diff --git a/.buildinfo b/.buildinfo new file mode 100644 index 000000000..e7f445e73 --- /dev/null +++ b/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: b22fdb61afb5ba29e48ab01a74c78409 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/.coveragerc b/.coveragerc deleted file mode 100644 index 97715b18d..000000000 --- a/.coveragerc +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2018 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. -# -# coverage configuration - used by https://coveralls.io/ integration -# -# - -[run] -source=shotgun_api3 -omit= - shotgun_api3/lib/httplib2/* - shotgun_api3/lib/six.py - shotgun_api3/lib/certify/* - shotgun_api3/lib/pyparsing.py diff --git a/.doctrees/advanced.doctree b/.doctrees/advanced.doctree new file mode 100644 index 000000000..be05c8b8f Binary files /dev/null and b/.doctrees/advanced.doctree differ diff --git a/.doctrees/advanced/iron_python.doctree b/.doctrees/advanced/iron_python.doctree new file mode 100644 index 000000000..464a6ea23 Binary files /dev/null and b/.doctrees/advanced/iron_python.doctree differ diff --git a/.doctrees/advanced/packaging.doctree b/.doctrees/advanced/packaging.doctree new file mode 100644 index 000000000..71e99534c Binary files /dev/null and b/.doctrees/advanced/packaging.doctree differ diff --git a/.doctrees/authentication.doctree b/.doctrees/authentication.doctree new file mode 100644 index 000000000..2246ef529 Binary files /dev/null and b/.doctrees/authentication.doctree differ diff --git a/.doctrees/changelog.doctree b/.doctrees/changelog.doctree new file mode 100644 index 000000000..c62964877 Binary files /dev/null and b/.doctrees/changelog.doctree differ diff --git a/.doctrees/cookbook.doctree b/.doctrees/cookbook.doctree new file mode 100644 index 000000000..56d51ccda Binary files /dev/null and b/.doctrees/cookbook.doctree differ diff --git a/.doctrees/cookbook/attachments.doctree b/.doctrees/cookbook/attachments.doctree new file mode 100644 index 000000000..b273318f6 Binary files /dev/null and b/.doctrees/cookbook/attachments.doctree differ diff --git a/.doctrees/cookbook/examples/ami_handler.doctree b/.doctrees/cookbook/examples/ami_handler.doctree new file mode 100644 index 000000000..6a3cdaa77 Binary files /dev/null and b/.doctrees/cookbook/examples/ami_handler.doctree differ diff --git a/.doctrees/cookbook/examples/ami_version_packager.doctree b/.doctrees/cookbook/examples/ami_version_packager.doctree new file mode 100644 index 000000000..1912074d2 Binary files /dev/null and b/.doctrees/cookbook/examples/ami_version_packager.doctree differ diff --git a/.doctrees/cookbook/examples/basic_create_shot.doctree b/.doctrees/cookbook/examples/basic_create_shot.doctree new file mode 100644 index 000000000..607aa4067 Binary files /dev/null and b/.doctrees/cookbook/examples/basic_create_shot.doctree differ diff --git a/.doctrees/cookbook/examples/basic_create_shot_task_template.doctree b/.doctrees/cookbook/examples/basic_create_shot_task_template.doctree new file mode 100644 index 000000000..17bce5be3 Binary files /dev/null and b/.doctrees/cookbook/examples/basic_create_shot_task_template.doctree differ diff --git a/.doctrees/cookbook/examples/basic_create_version_link_shot.doctree b/.doctrees/cookbook/examples/basic_create_version_link_shot.doctree new file mode 100644 index 000000000..6b9ee9a16 Binary files /dev/null and b/.doctrees/cookbook/examples/basic_create_version_link_shot.doctree differ diff --git a/.doctrees/cookbook/examples/basic_delete_shot.doctree b/.doctrees/cookbook/examples/basic_delete_shot.doctree new file mode 100644 index 000000000..302e33e07 Binary files /dev/null and b/.doctrees/cookbook/examples/basic_delete_shot.doctree differ diff --git a/.doctrees/cookbook/examples/basic_find_shot.doctree b/.doctrees/cookbook/examples/basic_find_shot.doctree new file mode 100644 index 000000000..33b134ee4 Binary files /dev/null and b/.doctrees/cookbook/examples/basic_find_shot.doctree differ diff --git a/.doctrees/cookbook/examples/basic_sg_instance.doctree b/.doctrees/cookbook/examples/basic_sg_instance.doctree new file mode 100644 index 000000000..47cc423f8 Binary files /dev/null and b/.doctrees/cookbook/examples/basic_sg_instance.doctree differ diff --git a/.doctrees/cookbook/examples/basic_update_shot.doctree b/.doctrees/cookbook/examples/basic_update_shot.doctree new file mode 100644 index 000000000..42ab4d16f Binary files /dev/null and b/.doctrees/cookbook/examples/basic_update_shot.doctree differ diff --git a/.doctrees/cookbook/examples/basic_upload_thumbnail_version.doctree b/.doctrees/cookbook/examples/basic_upload_thumbnail_version.doctree new file mode 100644 index 000000000..20790c834 Binary files /dev/null and b/.doctrees/cookbook/examples/basic_upload_thumbnail_version.doctree differ diff --git a/.doctrees/cookbook/examples/svn_integration.doctree b/.doctrees/cookbook/examples/svn_integration.doctree new file mode 100644 index 000000000..1a6ab81b9 Binary files /dev/null and b/.doctrees/cookbook/examples/svn_integration.doctree differ diff --git a/.doctrees/cookbook/smart_cut_fields.doctree b/.doctrees/cookbook/smart_cut_fields.doctree new file mode 100644 index 000000000..014e32ce4 Binary files /dev/null and b/.doctrees/cookbook/smart_cut_fields.doctree differ diff --git a/.doctrees/cookbook/tasks.doctree b/.doctrees/cookbook/tasks.doctree new file mode 100644 index 000000000..34deddcb2 Binary files /dev/null and b/.doctrees/cookbook/tasks.doctree differ diff --git a/.doctrees/cookbook/tasks/split_tasks.doctree b/.doctrees/cookbook/tasks/split_tasks.doctree new file mode 100644 index 000000000..c38ad9851 Binary files /dev/null and b/.doctrees/cookbook/tasks/split_tasks.doctree differ diff --git a/.doctrees/cookbook/tasks/task_dependencies.doctree b/.doctrees/cookbook/tasks/task_dependencies.doctree new file mode 100644 index 000000000..7515b8f09 Binary files /dev/null and b/.doctrees/cookbook/tasks/task_dependencies.doctree differ diff --git a/.doctrees/cookbook/tasks/updating_tasks.doctree b/.doctrees/cookbook/tasks/updating_tasks.doctree new file mode 100644 index 000000000..c908464c7 Binary files /dev/null and b/.doctrees/cookbook/tasks/updating_tasks.doctree differ diff --git a/.doctrees/cookbook/tutorials.doctree b/.doctrees/cookbook/tutorials.doctree new file mode 100644 index 000000000..73eb93a67 Binary files /dev/null and b/.doctrees/cookbook/tutorials.doctree differ diff --git a/.doctrees/cookbook/usage_tips.doctree b/.doctrees/cookbook/usage_tips.doctree new file mode 100644 index 000000000..f100ef6c9 Binary files /dev/null and b/.doctrees/cookbook/usage_tips.doctree differ diff --git a/.doctrees/environment.pickle b/.doctrees/environment.pickle new file mode 100644 index 000000000..32296a02d Binary files /dev/null and b/.doctrees/environment.pickle differ diff --git a/.doctrees/index.doctree b/.doctrees/index.doctree new file mode 100644 index 000000000..7cfd700ce Binary files /dev/null and b/.doctrees/index.doctree differ diff --git a/.doctrees/installation.doctree b/.doctrees/installation.doctree new file mode 100644 index 000000000..ad2cdb485 Binary files /dev/null and b/.doctrees/installation.doctree differ diff --git a/.doctrees/reference.doctree b/.doctrees/reference.doctree new file mode 100644 index 000000000..a134a5a01 Binary files /dev/null and b/.doctrees/reference.doctree differ diff --git a/.flake8 b/.flake8 deleted file mode 100644 index 343f01039..000000000 --- a/.flake8 +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -[flake8] -max-line-length = 120 -exclude = shotgun_api3/lib/httplib2/*,shotgun_api3/lib/six.py,tests/httplib2test.py,tests/mock.py diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 861255397..000000000 --- a/.gitattributes +++ /dev/null @@ -1,6 +0,0 @@ -# Handle line endings automatically for files detected as text -# and leave all files detected as binary untouched. -* text=auto - -# Force the following filetypes to have unix eols, so Windows does not break them -*.pickle text eol=lf diff --git a/.gitignore b/.gitignore deleted file mode 100644 index 02018058b..000000000 --- a/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -#python specific -*.pyc - -## generic files to ignore -*~ -*.lock -*.DS_Store -*.swp -*.out -*.bak - -# test related -tests/config -.coverage -.cache -.travis-solo -htmlcov -test-output.xml -coverage.xml - -# setup related -build -dist -shotgun_api3.egg-info -/%1 diff --git a/shotgun_api3/lib/__init__.py b/.nojekyll similarity index 100% rename from shotgun_api3/lib/__init__.py rename to .nojekyll diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml deleted file mode 100644 index 537da22cf..000000000 --- a/.pre-commit-config.yaml +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (c) 2024, Shotgun Software Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# - Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# - Neither the name of the Shotgun Software Inc nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Styles the code properly - -# Exclude Third Pary components -exclude: "shotgun_api3/lib/.*" - -# List of super useful formatters. -repos: - - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v5.0.0 - hooks: - - id: check-ast - - id: check-case-conflict - - id: check-executables-have-shebangs - - id: check-merge-conflict - - id: end-of-file-fixer - - id: requirements-txt-fixer - - id: trailing-whitespace - - - repo: https://github.com/psf/black - rev: 25.1.0 - hooks: - - id: black diff --git a/HISTORY.rst b/HISTORY.rst deleted file mode 100644 index 10e34bb55..000000000 --- a/HISTORY.rst +++ /dev/null @@ -1,552 +0,0 @@ -********************************************* -Flow Production Tracking Python API Changelog -********************************************* - -Here you can see the full list of changes between each Python API release. - -v3.8.3 (2025 May 22) -==================== - -- Add improvements to Mockgun. - Ensure string comparison are case insensitive. - Ignore duplicate entities when ``multi_entity_update_mode`` is added. - Support for ``None`` in mockgun when using ordering. - Thank you rlessardrodeofx, slingshotsys, and MHendricks for your contributions. -- Minor fixes on unit tests and documentation. - - -v3.8.2 (2025 Mar 11) -==================== - -- Prevent flaky disconnection when uploading thumbnails on publish. - There's a flaky disconnection when the publisher uploads the thumbnail to the server. - The most common errors were: ``Connection closed by peer`` and ``URLopen error EOF occurred in violation of protocol ssl.c:1006``. - -v3.8.1 (2025 Feb 25) -==================== - -- Upgrade certifi to 2024.12.14. -- Apply black 25.1.0 formatting to the source code. -- Update Software Credits - -v3.8.0 (2025 Feb 7) -=================== - -- Extend the payload optimizations to the ``in`` and ``not_in`` filters and - the ``update`` method. -- The payload optimization is now enabled by default. - It can be disabled with the ``SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION`` - environment variable. - -v3.7.0 (2024 Dec 9) -=================== -- Remove unnecessary data in the payload when combining related queries before sending it to the server. - This would improve overall performance decreasing network latency and server processing. - See documentation for more information. - - -v3.6.2 (2024 Aug 13) -==================== -- Remove Ticket entity reference and prepare this to run in CI. -- Condition auth for Jenkins environment. -- Update certifi to 2024.7.4. -- FIRST PHASE Python2 removing. - -v3.6.1 (2024 Jun 6) -=================== -- Adds multi_entity_update_modes support to mockgun ``update()`` and ``batch()`` methods. -- Implements a retry strategy only when encountering an URLError or SSLEOFError. -- Fixes the issue with deleting prefix and suffix for ``display_name`` variable at the moment of upload for a local install. -- Clarifies the use of ``_build_opener`` in ``download_attachment()``. - -v3.6.0 (2024 May 1) -=================== -- Drop support for Python 2.7 -- certifi version changed to 2024.2.2 -- Documentation update - -v3.5.1 (2024 Apr 3) -=================== -- Documentation: Revert to Shotgun in the API Reference headers to keep consistency with the API methods -- Mockgun: fix entity data type -- Mockgun: add support for ``add_user_agent`` and ``set_session_uuid`` methods - -v3.5.0 (2024 Mar 26) -==================== -- Rebranding component for Flow Production Tracking - -v3.4.2 (2024 Feb 6) -=================== -- Add support for Python 3.11 - -v3.4.1 (2024 Jan 29) -==================== -- Flaky Tests -- Documentation: Fix issue regarding "in" filter prototype -- Documentation: Travis badge image is no working anymore -- Documentation: Add ``user_subscription_read`` and ``user_subscription_create`` methods -- Update Python Certifi license block -- Add methods for the user_subscriptions API end points -- Retry ShotGrid request also on error 504 -- Retry S3 uploads on error 500 -- Comment typing annotation breaks Python 2 compatibility -- Add field type ``entity_type`` to mockgun - - -v3.4.0 (2023 Sep 22) -==================== -- Started support for Python 3.10 for CI. -- Add documentation for PublishedFiles preset filters. -- Upgrade httplib2 to 0.22.0. -- Update licensing. -- Updates Autodesk URLs. -- Fix flaky tests. - -v3.3.6 (2023 Aug 29) -==================== -- Update docs for entity fields. -- Fix typo. -- Fix incorrect hint. -- Reformat code examples to prevent text overflow. -- Bump certifi from 2020.06.20 to 2022.12.7 in /shotgun_api3/lib. -- Skip SG-MIM entities. -- Replace shotgunsoftware references. -- Deprecation of Python 2. -- Security upgrade certifi to latest version 2023.07.22. - -v3.3.5 (2023 Jan 5) -==================== -- Add "Setting Up Your Environment with the Python API" to Python Docs (python-api docs). -- [Python API Documentation] Update Python version requirements. -- Rename Shotgun to Shotgrid in every about text like tk-multi-demo git repository. -- Rename Shotgun servers to ShotGrid servers in the documentation. - -v3.3.4 (2022 June 9) -==================== -- Adds Retries on 503 Errors when uploading to S3. -- Updates AMI Documentation to Support Python 3. -- Adds Python 3.9 coverage in Azure Pipeline CI tests. -- Fixes git protocol for the installation. - -v3.3.3 (2021 December 1) -========================== -- Replaces shotgunsoftware urls with Autodesk Knowledge Network and ShotGrid Developer Documentation pages. - -v3.3.2 (2021 September 27) -========================== -- Updates version of httplib2. - -v3.3.1 (2021 July 12) -===================== -- Implements retries with incremental backoff on 502 errors. - -v3.3.0 (2021 Jun 7) -=================== -- Updates documentation and error messages to mention ShotGrid. - -v3.2.6 (2020 Nov 24) -===================== -- Now includes ``certifi`` and defaults to using the certificates provided with that module. - -v3.2.4 (2020 May 25) -===================== -- Updates httplib2 to v0.18.0. - -v3.2.3 (2020 Apr 21) -===================== -- Fixes an import bug in httplib2 by using the `forked repository `_. - -v3.2.2 (2019 Dec 11) -===================== -- Upgrades packaged six module to 1.13.0 -- Adds ``platform`` and ``normalize_platform`` to sgsix module to provide unified platform value across Python 2/3 -- Changes httplib import procedure to emulate direct import of the module -- Adds test to ensure httplib2 is importable as expected - -v3.2.1 (2019 Oct 29) -===================== -- Returns a specific error from ``share_thumbnail`` when the source thumbnail is a 'transient' thumbnail. - -v3.2.0 (2019 Sept 23) -===================== -- Adds a new ``project_entity`` parameter to ``schema_field_update`` that allows to modify field visibility for a given project. - -v3.1.2 (2019 Sept 17) -===================== -- Adds an optional `localized` property on the Shotgun object which allows to retrieve localized display names on - methods ``schema_entity_read()``, ``schema_field_read()``, and ``schema_read()``. - -v3.1.1 (2019 August 29) -======================= -- Fixes a regression on Python 2.7.0-2.7.9 on Windows with the mimetypes module. - -v3.1.0 (2019 July 29) -===================== -- Adds support for Python 3.7 - -v3.0.41 (2019 June 28) -====================== -- Adds an optional sleep between retries specified via the `SHOTGUN_API_RETRY_INTERVAL` environment variable, or by setting `sg.config.rpc_attempt_interval`. - -v3.0.40 (2019 March 13) -======================= -- Updates encoding method to use shutil when uploading, to avoid memory and overflow errors when reading large files. (contributed by @eestrada) - -v3.0.39 (2019 February 20) -========================== -- Ensures the certificates packaged with the API and those specified via the `SHOTGUN_API_CACERTS` environment variable - are used when uploading a file. - -v3.0.38 (2019 February 7) -========================= -- Upgrades the version of ``httplib2`` to ``0.12.0``, which fixes SNI issues. Note this - version contains a more recent list of certificate authorities. If you are running Shotgun locally and have - signed your https certificate with an outdated certificate authority, the Shotgun connection will be rejected. - -v3.0.37 (2018 July 19) -====================== - -- Proper support added for unicode and utf-8 string paths given to upload methods, and a sane error is raised when an unusable string encoding is used. -- Adds support for querying preferences from Shotgun via the new preferences_read method. -- Under-the-hood changes to add support for direct to s3 uploads to Shotgun. This change should be transparent to users. - -v3.0.36 (2018 April 3) -====================== - -- Fixes an error where ``connect=False`` during ``__init__`` would still connect to Shotgun. -- Adds support for ``SHOTGUN_API_CACERTS`` when uploading and downloading files. -- Properly handles failed downloads due to malware scanning. - -v3.0.35 (2017 December 8) -========================= - -- Add exception UserCredentialsNotAllowedForSSOAuthenticationFault. - Triggered when attempting to initiate a connection with a username/password - pair on an SSO-enabled Shotgun site. - -v3.0.34 (2017 September 18) -=========================== - -- Optimized pagination strategy for Shotgun 7.4+ -- Switched from a hard-coded value of 500 for "records_per_page" to a server-defined value. We will be experimenting with higher values with the goal of increasing performance for large result sets. - -v3.0.33 (2017 July 18) -====================== - -- Raise an exception when uploading an empty file using :meth:`upload`, :meth:`upload_thumbnail` - or :meth:`upload_filmstrip_thumbnail` before calling out to the server. -- Multiple enhancements and bugfixes to Mockgun -- Added ``nav_search_string()`` and ``nav_search_entity()`` methods as experimental, internal methods for querying SG hierarchy. -- Introduces a :meth:`following` query method, that accepts a user entity and optionally an entity type and/or project. - -v3.0.32 (2016 Sep 22) -===================== - -- Optimized import speed of the API on Python 2.7. -- Integrated the latest fixes to the ``mimetypes`` module. -- Added ``nav_expand()`` method as an experimental, internal method for querying SG hierarchy. -- Ported all documentation to sphinx. See http://developer.shotgridsoftware.com/python-api. -- Moved Changelog to dedicated HISTORY file. - -v3.0.31 (2016 May 18) -===================== - -- Add optional ``additional_filter_presets`` argument to :meth:`find` and :meth:`find_one` - -v3.0.30 (2016 Apr 25) -===================== - -- Add option to use add/remove/set modes when updating multi-entity fields. -- Add explicit file handler close to download_attachment. -- Add basic :meth:`find` ordering support to mockgun. -- Allow for product specific authorization parameters. - -v3.0.29 (2016 Mar 7) -==================== - -- Reverted the change to the default field names for image uploading. - -v3.0.28 (2016 Mar 3) -==================== - -- Refactored nested classing of ``sgtimezone`` library to allow for serializable timestamps. - -v3.0.27 (2016 Feb 18) -===================== - -- Make sure HTTP proxy authentication works with the ``@`` character in a password. -- Make sure sudo authentication test works with Shotgun versions after v6.3.10. -- Smarter uploading of thumbnails and filmstrips with the :meth:`upload` method. -- Improve Travis build integration of the Python-API to run the full suite of - API tests instead of just the unit and client tests. - -v3.0.26 (2016 Feb 1) -==================== - -- Updating testing framework to use environment variables inconjunction with existing - ``example_config`` file so that commits and pull requests are automatically run on travis-ci. -- Fix to prevent stripping out case-sensitivity of a URL if the user passes their credentials to - ``config.server`` as an authorization header. - -v3.0.25 (2016 Jan 12) -===================== - -- Add handling for Python versions incompatible with SHA-2 (see `this blog post - `_). -- Add ``SHOTGUN_FORCE_CERTIFICATE_VALIDATION`` environment variable to prevent disabling certficate - validation when SHA-2 validation is not available. -- Add SSL info to user-agent header. - -v3.0.24 (2016 Jan 08) -===================== - -- Not released. - -v3.0.23 (2015 Oct 26) -===================== - -- Fix for `python bug #23371 `_ on Windows loading mimetypes - module (thanks `@patrickwolf `_). -- Fix for tests on older versions of python. -- Sanitize authentication values before raising error. - -v3.0.22 (2015 Sept 9) -===================== - -- Added method :meth:`text_search` which allows an API client to access the Shotgun global search - and auto completer. -- Added method :meth:`activity_stream_read` which allows an API client to access the activity - stream for a given Shotgun entity. -- Added method :meth:`note_thread_read` which allows an API client to download an entire Note - conversation, including Replies and Attachments, using a single API call. -- Added an experimental ``mockgun`` module which can be used to emulate the Shotgun API, for - example inside unit test rigs. -- [minor] Improved docstrings. - -v3.0.21 (2015 Aug 13) -===================== - -- Update bundled ``httplib2`` module to latest v0.9.1 - fixes some bugs - -v3.0.20 (2015 Jun 10) -===================== - -- Add authentication support for Shotgun servers with two-factor authentication turned on. - -v3.0.19 (2015 Mar 25) -===================== - -- Add ability to authenticate with Shotgun using ``session_token``. -- Add :meth:`get_session_token` method for obtaining token to authenticate with. -- Add new ``AuthenticationFault`` exception type to indicate when server communication has failed - due to authentication reasons. -- Add support for ``SHOTGUN_API_CACERTS`` environment variable to provide location of external - SSL certificates file. -- Fixes and updates to various tests. - -v3.0.18 (2015 Mar 13) -===================== - -- Add ability to query the per-project visibility status for entities, fields and statuses. - (requires Shotgun server >= v5.4.4) - -v3.0.17 (2014 Jul 10) -===================== - -- Add ability to update ``last_accessed_by_current_user`` on Project. -- Add workaround for `bug #9291 in Python 2.7 `_ affecting - mimetypes library on Windows. -- Add platform and Python version to user-agent (eg. ``shotgun-json (3.0.17); Python 2.7 (Mac)``) - -v3.0.16 (2014 May 23) -===================== - -- Add flag to ignore entities from archived Projects. -- Add support for differentiating between zero and ``None`` for number fields. -- Add ability to act as a different user. - -v3.0.15 (2014 Mar 6) -==================== - -- Fixed bug which allowed a value of ``None`` for password parameter in - :meth:`authenticate_human_user` -- Add :meth:`follow`, :meth:`unfollow` and :meth:`followers` methods. -- Add ability to login as HumanUser. -- Ensure that webm/mp4 mime types are always available. -- Updated link to video tour in README. -- Fixes and updates to various tests. - -v3.0.14 (2013 Jun 26) -===================== - -- added: additional tests for thumbnails. -- added: support for downloading from s3 in :meth:`download_attachment`. Accepts an Attachment - entity dict as a parameter (is still backwards compatible with passing in an Attachment id). -- added: optional ``file_path`` parameter to :meth:`download_attachment` to write data directly to - disk instead of loading into memory. (thanks to Adam Goforth `@aag `_) - -v3.0.13 (2013 Apr 11) -===================== - -- fixed: #20856 :meth:`authenticate_human_user` login was sticky and would be used for permissions - and logging. - -v3.0.12 (2013 Feb 22) -===================== -*no tag* - -- added: #18171 New ``ca_certs`` argument to the :class:`Shotgun` constructor to specify the - certificates to use in SSL validation. -- added: ``setup.py`` doesn't compress the installed ``.egg`` file which makes the - ``cacerts.txt`` file accessible. - -v3.0.11 (2013 Jan 31) -===================== - -- added: nested filter syntax (see :ref:`filter_syntax`) - -v3.0.10 (2013 Jan 25) -===================== - -- added: :meth:`add_user_agent()` and :meth:`reset_user_agent` methods to allow client code to add - strings to track. -- added: Changed default ``user-agent`` to include API version. -- updated: advanced summarize filter support. -- fixed: #19830 :meth:`share_thumbnail` errors when source has no thumbnail. - -v3.0.9 (2012 Dec 05) -==================== - -- added: :meth:`share_thumbnail` method to share the same thumbnail record and media between - entities. -- added: proxy handling to methods that transfer binary data (ie. :meth:`upload`, - :meth:`upload_thumbnail`, etc.). -- updated: default logging level to WARN. -- updated: documentation for :meth:`summarize()` method, previously released but without - documentation. -- fixed: unicode strings not always being encoded correctly. -- fixed: :meth:`create()` generates error when ``return_fields`` is None. -- fixed: clearing thumbnail by setting ``image`` value to ``None`` not working as expected. -- fixed: some html entities being returned sanitized via API. -- improved: ``simplejson`` fallback now uses relative imports to match other bundled packages. -- improved: various error messages are now clearer and more informative. -- installation is now ``pip`` compatible. - -v3.0.9.beta2 (2012 Mar 19) -========================== - -- use relative imports for included libraries when using Python v2.5 or later. -- replace sideband request for ``image`` (thumbnail) field with native support (requires Shotgun - server >= v3.3.0. Request will still work on older versions but fallback to slow sideband - method). -- allow setting ``image`` and ``filmstrip_thumbnail`` in data dict on :meth:`create` and - :meth:`update` (thanks `@hughmacdonald `_). -- fixed bug causing ``Attachment.tag_list`` to be set to ``"None"`` (str) for uploads. - -v3.0.9.beta1 (2012 Feb 23) -========================== - -- added support for access to WorkDayRules (requires Shotgun server >= v3.2.0). -- added support for filmstrip thumbnails (requires Shotgun server >= v3.1.0). -- fixed :meth:`download_attachment` pointing to incorrect url. -- fixed some issues with module import paths. - -v3.0.8 (2011 Oct 7) -=================== - -- now uses JSON as a transport rather than XML-RPC. This provides as much as a 40% speed boost. -- added the :meth:`summarize` method. -- refactored single file into package. -- tests added (Thanks to Aaron Morton `@amorton `_). -- return all strings as ascii for backwards compatibility, added ``ensure_ascii`` parameter to - enable returning unicode. - -v3.0.7 (2011 Apr 04) -==================== - -- fix: :meth:`update()` method should return a ``dict`` object not a ``list``. - -v3.0.6 (2010 Jan 25) -==================== - -- optimization: don't request ``paging_info`` unless required (and server support is available). - -v3.0.5 (2010 Dec 20) -==================== - -- officially remove support for old ``api3_preview`` controller. -- :meth:`find`: allow requesting a specific page of results instead of returning them all at once. -- add support for ``session_uuid`` parameter for communicating with a web browser session. - -v3.0.4 (2010 Nov 22) -==================== - -- fix for issue where :meth:`create` method was returning list type instead of dictionary. -- support new style classes (thanks to Alex Schworer `@schworer `_). - -v3.0.3 (2010 Nov 12) -==================== - -- add support for local files. Injects convenience info into returned hash for local file links. -- add support for authentication through http proxy server. - -v3.0.2 (2010 Aug 27) -==================== - -- add :meth:`revive` method to revive deleted entities. - -v3.0.1 (2010 May 10) -==================== - -- :meth:`find`: default sorting to ascending, if not set (instead of requiring - ascending/descending). -- :meth:`upload` and :meth:`upload_thumbnail`: pass auth info through. - -v3.0 (2010 May 5) -================= - -- non-beta! -- add :meth:`batch` method to do multiple :meth:`create`, :meth:`update`, and :meth:`delete` - operations in one request to the server (requires Shotgun server to be v1.13.0 or higher). - -v3.0b8 (2010 Feb 19) -==================== - -- fix python gotcha about using lists / dictionaries as defaults (`see this page for more info `_). -- add :meth:`schema_read` method. - -v3.0b7 (2009 Nov 30) -==================== - -- add additional retries for connection errors and a catch for broken pipe exceptions. - -v3.0b6 (2009 Oct 20) -==================== - -- add support for ``HTTP/1.1 keepalive``, which greatly improves performance for multiple - requests. -- add more helpful error if server entered is not ``http`` or ``https`` -- add support assigning tags to file uploads (for Shotgun version >= 1.10.6). - -v3.0b5 (2009 Sept 29) -===================== - -- fixed deprecation warnings to raise ``Exception`` class for python 2.5. - -v3.0b4 (2009 July 3) -==================== - -- made :meth:`upload` and :meth:`upload_thumbnail` methods more backwards compatible. -- changes to :meth:`find_one`: now defaults to no ``filter_operator``. - -v3.0b3 (2009 June 24) -===================== - -- fixed :meth:`upload` and :meth:`upload_thumbnail` methods. -- added :meth:`download_attachment` method. -- added ``schema_*`` methods for accessing entities and fields. -- added support for http proxy servers. -- added ``__version__`` string. -- removed ``RECORDS_PER_PAGE`` global (can just set ``records_per_page`` on the Shotgun object - after initializing it). -- removed ``api_ver`` from the constructor, as this class is only designed to work with API v3. diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 716d625d8..000000000 --- a/LICENSE +++ /dev/null @@ -1,54 +0,0 @@ -Copyright (c) 2009-2011, Shotgun Software Inc -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - - Neither the name of the Shotgun Software Inc nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -Portions of code (xml-rpc client libs from standard python distro): - -Copyright (c) 1999-2002 by Secret Labs AB -Copyright (c) 1999-2002 by Fredrik Lundh - -By obtaining, using, and/or copying this software and/or its -associated documentation, you agree that you have read, understood, -and will comply with the following terms and conditions: - -Permission to use, copy, modify, and distribute this software and -its associated documentation for any purpose and without fee is -hereby granted, provided that the above copyright notice appears in -all copies, and that both that copyright notice and this permission -notice appear in supporting documentation, and that the name of -Secret Labs AB or the author not be used in advertising or publicity -pertaining to distribution of the software without specific, written -prior permission. - -SECRET LABS AB AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD -TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANT- -ABILITY AND FITNESS. IN NO EVENT SHALL SECRET LABS AB OR THE AUTHOR -BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY -DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, -WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS -ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE -OF THIS SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index 4c9e464df..000000000 --- a/README.md +++ /dev/null @@ -1,84 +0,0 @@ -[![VFX Platform](https://img.shields.io/badge/vfxplatform-2025%20%7C%202024%20%7C%202023%20%7C%202022-blue.svg)](http://www.vfxplatform.com/) -[![Python](https://img.shields.io/badge/python-3.11%20%7C%203.10%20%7C%203.9-blue.svg)](https://www.python.org/)/) -[![Reference Documentation](http://img.shields.io/badge/doc-reference-blue.svg)](http://developer.shotgridsoftware.com/python-api) -[![Build Status](https://dev.azure.com/shotgun-ecosystem/Python%20API/_apis/build/status/shotgunsoftware.python-api?branchName=master)](https://dev.azure.com/shotgun-ecosystem/Python%20API/_build/latest?definitionId=108&branchName=master) -[![Coverage Status](https://coveralls.io/repos/github/shotgunsoftware/python-api/badge.svg?branch=master)](https://coveralls.io/github/shotgunsoftware/python-api?branch=master) - -# Flow Production Tracking Python API - -Autodesk provides a simple Python-based API for accessing Flow Production Tracking and integrating with other tools. This is the official API that is maintained by Autodesk (https://knowledge.autodesk.com/contact-support) - -The latest version can always be found at http://github.com/shotgunsoftware/python-api - -## Documentation -Tutorials and detailed documentation about the Python API are available at http://developer.shotgridsoftware.com/python-api). - -Some useful direct links: - -* [Installing](http://developer.shotgridsoftware.com/python-api/installation.html) -* [Tutorials](http://developer.shotgridsoftware.com/python-api/cookbook/tutorials.html) -* [API Reference](http://developer.shotgridsoftware.com/python-api/reference.html) -* [Data Types](http://developer.shotgridsoftware.com/python-api/reference.html#data-types) -* [Filter Syntax](http://developer.shotgridsoftware.com/python-api/reference.html#filter-syntax) - -## Changelog - -You can see the [full history of the Python API on the documentation site](http://developer.shotgridsoftware.com/python-api/changelog.html). - -## Updating HTTPLib2 - -The API comes with a copy of the `httplib2` inside the `shotgun_api3/lib` folder. To update the copy to a more recent version of the API, you can run the `update_httplib2.py` script at the root of this repository like this: - - python update_httplib2.py vX.Y.Z - -where `vX.Y.Z` is a release found on `httplib2`'s [release page](https://github.com/httplib2/httplib2/releases). - -## Tests - -Integration and unit tests are provided. - -- All tests require: - - The [nose unit testing tools](http://nose.readthedocs.org), - - The [nose-exclude nose plugin](https://pypi.org/project/nose-exclude/) - - (Note: Running `pip install -r tests/ci_requirements.txt` will install this package) -- A `tests/config` file (you can copy an example from `tests/example_config`). -- Tests can be run individually like this: `nosetests --config="nose.cfg" tests/test_client.py` - - Make sure to not forget the `--config="nose.cfg"` option. This option tells nose to use our config file. This will exclude python 2- and 3-specific files in the `/lib` directory, preventing a failure from being reported by nose for compilation due to incompatible syntax in those files. -- `test_client` and `tests_unit` use mock server interaction and do not require a Flow Production Tracking instance to be available (no modifications to `tests/config` are necessary). -- `test_api` and `test_api_long` *do* require a Flow Production Tracking instance, with a script key available for the tests. The server and script user values must be supplied in the `tests/config` file. The tests will add test data to your server based on information in your config. This data will be manipulated by the tests, and should not be used for other purposes. -- To run all of the tests, use the shell script `run-tests`. - -## Release process - -### Packaging up new release - -1) Update the Changelog in the `HISTORY.rst` file - - Add bullet points for any changes that have happened since the previous release. This may include changes you did not make so look at the commit history and make sure we don't miss anything. If you notice something was done that wasn't added to the changelog, hunt down that engineer and make them feel guilty for not doing so. This is a required step in making changes to the API. - - Try and match the language of previous change log messages. We want to keep a consistent voice. - - Make sure the date of the release matches today. We try and keep this TBD until we're ready to do a release so it's easy to catch that it needs to be updated. - - Make sure the version number is filled out and correct. We follow semantic versioning. -2) Ensure any changes or additions to public methods are documented - - Ensure that doc strings are updated in the code itself to work with Sphinx and are correctly formatted. - - Examples are always good especially if this a new feature or method. - - Think about a new user to the API trying to figure out how to use the features you're documenting. -3) Update the version value in `python-api/setup.py` to match the version you are packaging. This controls what version users will get when installing via pip. -4) Update the `__version__` value in `shotgun_api3/shotgun.py` to the version you're releasing. This identified the current version within the API itself. -5) Commit these changes in master with a commit message like `packaging for the vx.x.x release`. -6) Create a tag based off of the master branch called `vx.x.x` to match the version number you're releasing. -7) Push master and your tag to Github. -8) Update the Releases page with your new release. - - The release should already be there from your tag but if not, create a new one. - - Add more detailed information regarding the changes in this release. This is a great place to add examples, and reasons for the change! - -### Letting the world know -Post a message in the [Pipeline Community channel](https://community.shotgridsoftware.com/c/pipeline). - -### Prepare for the Next Dev Cycle -1) Update the `__version__` value in `shotgun_api3/shotgun.py` to the next version number with `.dev` appended to it. For example, `v3.0.24.dev` -2) Add a new section to the Changelog in the `HISTORY.rst` file with the next version number and a TBD date -``` - **v3.0.24 - TBD** - + TBD -``` -3) Commit the changes to master with a commit message like `Bump version to v3.0.24.dev` -4) Push master to Github diff --git a/SECURITY.md b/SECURITY.md deleted file mode 100644 index 0cf2a2664..000000000 --- a/SECURITY.md +++ /dev/null @@ -1,35 +0,0 @@ -# Security Policy - -## Security - -At Autodesk, we know that the security of your data is critical to your studio’s -operation. -As the industry shifts to the cloud, Flow Production Tracking knows that security and service -models are more important than ever. - -The confidentiality, integrity, and availability of your content is at the top -of our priority list. -Not only do we have a team of Flow Production Tracking engineers dedicated to platform security -and performance, we are also backed by Autodesk’s security team, also invests -heavily in the security for broad range of industries and customers. -We constantly reassess, develop, and improve our risk management program because -we know that the landscape of security is ever-changing. - -If you believe you have found a security vulnerability in any Flow Production Tracking-owned -repository, please report it to us as described below. - - -## Reporting Security Issues - -**Please do not report security vulnerabilities through public GitHub issues.** - -Instead, please report them by sending a message to -[Autodesk Trust Center](https://www.autodesk.com/trust/contact-us). - -Please include as much information as you can provide such as locations, -configurations, reproduction steps, exploit code, impact, etc. - - -## Additional Information - -Please check out the [Flow Production Tracking Security White Paper](https://help.autodesk.com/view/SGSUB/ENU/?guid=SG_Administrator_ar_general_security_ar_security_white_paper_html). diff --git a/docs/images/scripts_page.png b/_images/scripts_page.png similarity index 100% rename from docs/images/scripts_page.png rename to _images/scripts_page.png diff --git a/docs/images/split_tasks_1.png b/_images/split_tasks_1.png similarity index 100% rename from docs/images/split_tasks_1.png rename to _images/split_tasks_1.png diff --git a/docs/images/split_tasks_2.png b/_images/split_tasks_2.png similarity index 100% rename from docs/images/split_tasks_2.png rename to _images/split_tasks_2.png diff --git a/docs/images/split_tasks_3.png b/_images/split_tasks_3.png similarity index 100% rename from docs/images/split_tasks_3.png rename to _images/split_tasks_3.png diff --git a/docs/images/split_tasks_4.png b/_images/split_tasks_4.png similarity index 100% rename from docs/images/split_tasks_4.png rename to _images/split_tasks_4.png diff --git a/docs/images/split_tasks_5.png b/_images/split_tasks_5.png similarity index 100% rename from docs/images/split_tasks_5.png rename to _images/split_tasks_5.png diff --git a/docs/images/split_tasks_6.png b/_images/split_tasks_6.png similarity index 100% rename from docs/images/split_tasks_6.png rename to _images/split_tasks_6.png diff --git a/docs/images/split_tasks_7.png b/_images/split_tasks_7.png similarity index 100% rename from docs/images/split_tasks_7.png rename to _images/split_tasks_7.png diff --git a/docs/images/split_tasks_8.png b/_images/split_tasks_8.png similarity index 100% rename from docs/images/split_tasks_8.png rename to _images/split_tasks_8.png diff --git a/docs/images/split_tasks_9.png b/_images/split_tasks_9.png similarity index 100% rename from docs/images/split_tasks_9.png rename to _images/split_tasks_9.png diff --git a/_modules/index.html b/_modules/index.html new file mode 100644 index 000000000..13a6dac96 --- /dev/null +++ b/_modules/index.html @@ -0,0 +1,166 @@ + + + + + + + + Overview: module code — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +

All modules for which code is available

+ + +
+
+
+ +
+ +
+

© Copyright 2025, Autodesk.

+
+ + + +
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/logging.html b/_modules/logging.html new file mode 100644 index 000000000..7db3a8b8f --- /dev/null +++ b/_modules/logging.html @@ -0,0 +1,2426 @@ + + + + + + + + logging — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for logging

+# Copyright 2001-2019 by Vinay Sajip. All Rights Reserved.
+#
+# Permission to use, copy, modify, and distribute this software and its
+# documentation for any purpose and without fee is hereby granted,
+# provided that the above copyright notice appear in all copies and that
+# both that copyright notice and this permission notice appear in
+# supporting documentation, and that the name of Vinay Sajip
+# not be used in advertising or publicity pertaining to distribution
+# of the software without specific, written prior permission.
+# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
+# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
+# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+"""
+Logging package for Python. Based on PEP 282 and comments thereto in
+comp.lang.python.
+
+Copyright (C) 2001-2019 Vinay Sajip. All Rights Reserved.
+
+To use, simply 'import logging' and log away!
+"""
+
+import sys, os, time, io, re, traceback, warnings, weakref, collections.abc
+
+from string import Template
+from string import Formatter as StrFormatter
+
+
+__all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR',
+           'FATAL', 'FileHandler', 'Filter', 'Formatter', 'Handler', 'INFO',
+           'LogRecord', 'Logger', 'LoggerAdapter', 'NOTSET', 'NullHandler',
+           'StreamHandler', 'WARN', 'WARNING', 'addLevelName', 'basicConfig',
+           'captureWarnings', 'critical', 'debug', 'disable', 'error',
+           'exception', 'fatal', 'getLevelName', 'getLogger', 'getLoggerClass',
+           'info', 'log', 'makeLogRecord', 'setLoggerClass', 'shutdown',
+           'warn', 'warning', 'getLogRecordFactory', 'setLogRecordFactory',
+           'lastResort', 'raiseExceptions']
+
+import threading
+
+__author__  = "Vinay Sajip <vinay_sajip@red-dove.com>"
+__status__  = "production"
+# The following module attributes are no longer updated.
+__version__ = "0.5.1.2"
+__date__    = "07 February 2010"
+
+#---------------------------------------------------------------------------
+#   Miscellaneous module data
+#---------------------------------------------------------------------------
+
+#
+#_startTime is used as the base when calculating the relative time of events
+#
+_startTime = time.time()
+
+#
+#raiseExceptions is used to see if exceptions during handling should be
+#propagated
+#
+raiseExceptions = True
+
+#
+# If you don't want threading information in the log, set this to zero
+#
+logThreads = True
+
+#
+# If you don't want multiprocessing information in the log, set this to zero
+#
+logMultiprocessing = True
+
+#
+# If you don't want process information in the log, set this to zero
+#
+logProcesses = True
+
+#---------------------------------------------------------------------------
+#   Level related stuff
+#---------------------------------------------------------------------------
+#
+# Default levels and level names, these can be replaced with any positive set
+# of values having corresponding names. There is a pseudo-level, NOTSET, which
+# is only really there as a lower limit for user-defined levels. Handlers and
+# loggers are initialized with NOTSET so that they will log all messages, even
+# at user-defined levels.
+#
+
+CRITICAL = 50
+FATAL = CRITICAL
+ERROR = 40
+WARNING = 30
+WARN = WARNING
+INFO = 20
+DEBUG = 10
+NOTSET = 0
+
+_levelToName = {
+    CRITICAL: 'CRITICAL',
+    ERROR: 'ERROR',
+    WARNING: 'WARNING',
+    INFO: 'INFO',
+    DEBUG: 'DEBUG',
+    NOTSET: 'NOTSET',
+}
+_nameToLevel = {
+    'CRITICAL': CRITICAL,
+    'FATAL': FATAL,
+    'ERROR': ERROR,
+    'WARN': WARNING,
+    'WARNING': WARNING,
+    'INFO': INFO,
+    'DEBUG': DEBUG,
+    'NOTSET': NOTSET,
+}
+
+def getLevelName(level):
+    """
+    Return the textual or numeric representation of logging level 'level'.
+
+    If the level is one of the predefined levels (CRITICAL, ERROR, WARNING,
+    INFO, DEBUG) then you get the corresponding string. If you have
+    associated levels with names using addLevelName then the name you have
+    associated with 'level' is returned.
+
+    If a numeric value corresponding to one of the defined levels is passed
+    in, the corresponding string representation is returned.
+
+    If a string representation of the level is passed in, the corresponding
+    numeric value is returned.
+
+    If no matching numeric or string value is passed in, the string
+    'Level %s' % level is returned.
+    """
+    # See Issues #22386, #27937 and #29220 for why it's this way
+    result = _levelToName.get(level)
+    if result is not None:
+        return result
+    result = _nameToLevel.get(level)
+    if result is not None:
+        return result
+    return "Level %s" % level
+
+def addLevelName(level, levelName):
+    """
+    Associate 'levelName' with 'level'.
+
+    This is used when converting levels to text during message formatting.
+    """
+    _acquireLock()
+    try:    #unlikely to cause an exception, but you never know...
+        _levelToName[level] = levelName
+        _nameToLevel[levelName] = level
+    finally:
+        _releaseLock()
+
+if hasattr(sys, '_getframe'):
+    currentframe = lambda: sys._getframe(3)
+else: #pragma: no cover
+    def currentframe():
+        """Return the frame object for the caller's stack frame."""
+        try:
+            raise Exception
+        except Exception:
+            return sys.exc_info()[2].tb_frame.f_back
+
+#
+# _srcfile is used when walking the stack to check when we've got the first
+# caller stack frame, by skipping frames whose filename is that of this
+# module's source. It therefore should contain the filename of this module's
+# source file.
+#
+# Ordinarily we would use __file__ for this, but frozen modules don't always
+# have __file__ set, for some reason (see Issue #21736). Thus, we get the
+# filename from a handy code object from a function defined in this module.
+# (There's no particular reason for picking addLevelName.)
+#
+
+_srcfile = os.path.normcase(addLevelName.__code__.co_filename)
+
+# _srcfile is only used in conjunction with sys._getframe().
+# To provide compatibility with older versions of Python, set _srcfile
+# to None if _getframe() is not available; this value will prevent
+# findCaller() from being called. You can also do this if you want to avoid
+# the overhead of fetching caller information, even when _getframe() is
+# available.
+#if not hasattr(sys, '_getframe'):
+#    _srcfile = None
+
+
+def _checkLevel(level):
+    if isinstance(level, int):
+        rv = level
+    elif str(level) == level:
+        if level not in _nameToLevel:
+            raise ValueError("Unknown level: %r" % level)
+        rv = _nameToLevel[level]
+    else:
+        raise TypeError("Level not an integer or a valid string: %r"
+                        % (level,))
+    return rv
+
+#---------------------------------------------------------------------------
+#   Thread-related stuff
+#---------------------------------------------------------------------------
+
+#
+#_lock is used to serialize access to shared data structures in this module.
+#This needs to be an RLock because fileConfig() creates and configures
+#Handlers, and so might arbitrary user threads. Since Handler code updates the
+#shared dictionary _handlers, it needs to acquire the lock. But if configuring,
+#the lock would already have been acquired - so we need an RLock.
+#The same argument applies to Loggers and Manager.loggerDict.
+#
+_lock = threading.RLock()
+
+def _acquireLock():
+    """
+    Acquire the module-level lock for serializing access to shared data.
+
+    This should be released with _releaseLock().
+    """
+    if _lock:
+        _lock.acquire()
+
+def _releaseLock():
+    """
+    Release the module-level lock acquired by calling _acquireLock().
+    """
+    if _lock:
+        _lock.release()
+
+
+# Prevent a held logging lock from blocking a child from logging.
+
+if not hasattr(os, 'register_at_fork'):  # Windows and friends.
+    def _register_at_fork_reinit_lock(instance):
+        pass  # no-op when os.register_at_fork does not exist.
+else:
+    # A collection of instances with a _at_fork_reinit method (logging.Handler)
+    # to be called in the child after forking.  The weakref avoids us keeping
+    # discarded Handler instances alive.
+    _at_fork_reinit_lock_weakset = weakref.WeakSet()
+
+    def _register_at_fork_reinit_lock(instance):
+        _acquireLock()
+        try:
+            _at_fork_reinit_lock_weakset.add(instance)
+        finally:
+            _releaseLock()
+
+    def _after_at_fork_child_reinit_locks():
+        for handler in _at_fork_reinit_lock_weakset:
+            handler._at_fork_reinit()
+
+        # _acquireLock() was called in the parent before forking.
+        # The lock is reinitialized to unlocked state.
+        _lock._at_fork_reinit()
+
+    os.register_at_fork(before=_acquireLock,
+                        after_in_child=_after_at_fork_child_reinit_locks,
+                        after_in_parent=_releaseLock)
+
+
+#---------------------------------------------------------------------------
+#   The logging record
+#---------------------------------------------------------------------------
+
+class LogRecord(object):
+    """
+    A LogRecord instance represents an event being logged.
+
+    LogRecord instances are created every time something is logged. They
+    contain all the information pertinent to the event being logged. The
+    main information passed in is in msg and args, which are combined
+    using str(msg) % args to create the message field of the record. The
+    record also includes information such as when the record was created,
+    the source line where the logging call was made, and any exception
+    information to be logged.
+    """
+    def __init__(self, name, level, pathname, lineno,
+                 msg, args, exc_info, func=None, sinfo=None, **kwargs):
+        """
+        Initialize a logging record with interesting information.
+        """
+        ct = time.time()
+        self.name = name
+        self.msg = msg
+        #
+        # The following statement allows passing of a dictionary as a sole
+        # argument, so that you can do something like
+        #  logging.debug("a %(a)d b %(b)s", {'a':1, 'b':2})
+        # Suggested by Stefan Behnel.
+        # Note that without the test for args[0], we get a problem because
+        # during formatting, we test to see if the arg is present using
+        # 'if self.args:'. If the event being logged is e.g. 'Value is %d'
+        # and if the passed arg fails 'if self.args:' then no formatting
+        # is done. For example, logger.warning('Value is %d', 0) would log
+        # 'Value is %d' instead of 'Value is 0'.
+        # For the use case of passing a dictionary, this should not be a
+        # problem.
+        # Issue #21172: a request was made to relax the isinstance check
+        # to hasattr(args[0], '__getitem__'). However, the docs on string
+        # formatting still seem to suggest a mapping object is required.
+        # Thus, while not removing the isinstance check, it does now look
+        # for collections.abc.Mapping rather than, as before, dict.
+        if (args and len(args) == 1 and isinstance(args[0], collections.abc.Mapping)
+            and args[0]):
+            args = args[0]
+        self.args = args
+        self.levelname = getLevelName(level)
+        self.levelno = level
+        self.pathname = pathname
+        try:
+            self.filename = os.path.basename(pathname)
+            self.module = os.path.splitext(self.filename)[0]
+        except (TypeError, ValueError, AttributeError):
+            self.filename = pathname
+            self.module = "Unknown module"
+        self.exc_info = exc_info
+        self.exc_text = None      # used to cache the traceback text
+        self.stack_info = sinfo
+        self.lineno = lineno
+        self.funcName = func
+        self.created = ct
+        self.msecs = int((ct - int(ct)) * 1000) + 0.0  # see gh-89047
+        self.relativeCreated = (self.created - _startTime) * 1000
+        if logThreads:
+            self.thread = threading.get_ident()
+            self.threadName = threading.current_thread().name
+        else: # pragma: no cover
+            self.thread = None
+            self.threadName = None
+        if not logMultiprocessing: # pragma: no cover
+            self.processName = None
+        else:
+            self.processName = 'MainProcess'
+            mp = sys.modules.get('multiprocessing')
+            if mp is not None:
+                # Errors may occur if multiprocessing has not finished loading
+                # yet - e.g. if a custom import hook causes third-party code
+                # to run when multiprocessing calls import. See issue 8200
+                # for an example
+                try:
+                    self.processName = mp.current_process().name
+                except Exception: #pragma: no cover
+                    pass
+        if logProcesses and hasattr(os, 'getpid'):
+            self.process = os.getpid()
+        else:
+            self.process = None
+
+    def __repr__(self):
+        return '<LogRecord: %s, %s, %s, %s, "%s">'%(self.name, self.levelno,
+            self.pathname, self.lineno, self.msg)
+
+    def getMessage(self):
+        """
+        Return the message for this LogRecord.
+
+        Return the message for this LogRecord after merging any user-supplied
+        arguments with the message.
+        """
+        msg = str(self.msg)
+        if self.args:
+            msg = msg % self.args
+        return msg
+
+#
+#   Determine which class to use when instantiating log records.
+#
+_logRecordFactory = LogRecord
+
+def setLogRecordFactory(factory):
+    """
+    Set the factory to be used when instantiating a log record.
+
+    :param factory: A callable which will be called to instantiate
+    a log record.
+    """
+    global _logRecordFactory
+    _logRecordFactory = factory
+
+def getLogRecordFactory():
+    """
+    Return the factory to be used when instantiating a log record.
+    """
+
+    return _logRecordFactory
+
+def makeLogRecord(dict):
+    """
+    Make a LogRecord whose attributes are defined by the specified dictionary,
+    This function is useful for converting a logging event received over
+    a socket connection (which is sent as a dictionary) into a LogRecord
+    instance.
+    """
+    rv = _logRecordFactory(None, None, "", 0, "", (), None, None)
+    rv.__dict__.update(dict)
+    return rv
+
+
+#---------------------------------------------------------------------------
+#   Formatter classes and functions
+#---------------------------------------------------------------------------
+_str_formatter = StrFormatter()
+del StrFormatter
+
+
+class PercentStyle(object):
+
+    default_format = '%(message)s'
+    asctime_format = '%(asctime)s'
+    asctime_search = '%(asctime)'
+    validation_pattern = re.compile(r'%\(\w+\)[#0+ -]*(\*|\d+)?(\.(\*|\d+))?[diouxefgcrsa%]', re.I)
+
+    def __init__(self, fmt, *, defaults=None):
+        self._fmt = fmt or self.default_format
+        self._defaults = defaults
+
+    def usesTime(self):
+        return self._fmt.find(self.asctime_search) >= 0
+
+    def validate(self):
+        """Validate the input format, ensure it matches the correct style"""
+        if not self.validation_pattern.search(self._fmt):
+            raise ValueError("Invalid format '%s' for '%s' style" % (self._fmt, self.default_format[0]))
+
+    def _format(self, record):
+        if defaults := self._defaults:
+            values = defaults | record.__dict__
+        else:
+            values = record.__dict__
+        return self._fmt % values
+
+    def format(self, record):
+        try:
+            return self._format(record)
+        except KeyError as e:
+            raise ValueError('Formatting field not found in record: %s' % e)
+
+
+class StrFormatStyle(PercentStyle):
+    default_format = '{message}'
+    asctime_format = '{asctime}'
+    asctime_search = '{asctime'
+
+    fmt_spec = re.compile(r'^(.?[<>=^])?[+ -]?#?0?(\d+|{\w+})?[,_]?(\.(\d+|{\w+}))?[bcdefgnosx%]?$', re.I)
+    field_spec = re.compile(r'^(\d+|\w+)(\.\w+|\[[^]]+\])*$')
+
+    def _format(self, record):
+        if defaults := self._defaults:
+            values = defaults | record.__dict__
+        else:
+            values = record.__dict__
+        return self._fmt.format(**values)
+
+    def validate(self):
+        """Validate the input format, ensure it is the correct string formatting style"""
+        fields = set()
+        try:
+            for _, fieldname, spec, conversion in _str_formatter.parse(self._fmt):
+                if fieldname:
+                    if not self.field_spec.match(fieldname):
+                        raise ValueError('invalid field name/expression: %r' % fieldname)
+                    fields.add(fieldname)
+                if conversion and conversion not in 'rsa':
+                    raise ValueError('invalid conversion: %r' % conversion)
+                if spec and not self.fmt_spec.match(spec):
+                    raise ValueError('bad specifier: %r' % spec)
+        except ValueError as e:
+            raise ValueError('invalid format: %s' % e)
+        if not fields:
+            raise ValueError('invalid format: no fields')
+
+
+class StringTemplateStyle(PercentStyle):
+    default_format = '${message}'
+    asctime_format = '${asctime}'
+    asctime_search = '${asctime}'
+
+    def __init__(self, *args, **kwargs):
+        super().__init__(*args, **kwargs)
+        self._tpl = Template(self._fmt)
+
+    def usesTime(self):
+        fmt = self._fmt
+        return fmt.find('$asctime') >= 0 or fmt.find(self.asctime_search) >= 0
+
+    def validate(self):
+        pattern = Template.pattern
+        fields = set()
+        for m in pattern.finditer(self._fmt):
+            d = m.groupdict()
+            if d['named']:
+                fields.add(d['named'])
+            elif d['braced']:
+                fields.add(d['braced'])
+            elif m.group(0) == '$':
+                raise ValueError('invalid format: bare \'$\' not allowed')
+        if not fields:
+            raise ValueError('invalid format: no fields')
+
+    def _format(self, record):
+        if defaults := self._defaults:
+            values = defaults | record.__dict__
+        else:
+            values = record.__dict__
+        return self._tpl.substitute(**values)
+
+
+BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s"
+
+_STYLES = {
+    '%': (PercentStyle, BASIC_FORMAT),
+    '{': (StrFormatStyle, '{levelname}:{name}:{message}'),
+    '$': (StringTemplateStyle, '${levelname}:${name}:${message}'),
+}
+
+class Formatter(object):
+    """
+    Formatter instances are used to convert a LogRecord to text.
+
+    Formatters need to know how a LogRecord is constructed. They are
+    responsible for converting a LogRecord to (usually) a string which can
+    be interpreted by either a human or an external system. The base Formatter
+    allows a formatting string to be specified. If none is supplied, the
+    style-dependent default value, "%(message)s", "{message}", or
+    "${message}", is used.
+
+    The Formatter can be initialized with a format string which makes use of
+    knowledge of the LogRecord attributes - e.g. the default value mentioned
+    above makes use of the fact that the user's message and arguments are pre-
+    formatted into a LogRecord's message attribute. Currently, the useful
+    attributes in a LogRecord are described by:
+
+    %(name)s            Name of the logger (logging channel)
+    %(levelno)s         Numeric logging level for the message (DEBUG, INFO,
+                        WARNING, ERROR, CRITICAL)
+    %(levelname)s       Text logging level for the message ("DEBUG", "INFO",
+                        "WARNING", "ERROR", "CRITICAL")
+    %(pathname)s        Full pathname of the source file where the logging
+                        call was issued (if available)
+    %(filename)s        Filename portion of pathname
+    %(module)s          Module (name portion of filename)
+    %(lineno)d          Source line number where the logging call was issued
+                        (if available)
+    %(funcName)s        Function name
+    %(created)f         Time when the LogRecord was created (time.time()
+                        return value)
+    %(asctime)s         Textual time when the LogRecord was created
+    %(msecs)d           Millisecond portion of the creation time
+    %(relativeCreated)d Time in milliseconds when the LogRecord was created,
+                        relative to the time the logging module was loaded
+                        (typically at application startup time)
+    %(thread)d          Thread ID (if available)
+    %(threadName)s      Thread name (if available)
+    %(process)d         Process ID (if available)
+    %(message)s         The result of record.getMessage(), computed just as
+                        the record is emitted
+    """
+
+    converter = time.localtime
+
+    def __init__(self, fmt=None, datefmt=None, style='%', validate=True, *,
+                 defaults=None):
+        """
+        Initialize the formatter with specified format strings.
+
+        Initialize the formatter either with the specified format string, or a
+        default as described above. Allow for specialized date formatting with
+        the optional datefmt argument. If datefmt is omitted, you get an
+        ISO8601-like (or RFC 3339-like) format.
+
+        Use a style parameter of '%', '{' or '$' to specify that you want to
+        use one of %-formatting, :meth:`str.format` (``{}``) formatting or
+        :class:`string.Template` formatting in your format string.
+
+        .. versionchanged:: 3.2
+           Added the ``style`` parameter.
+        """
+        if style not in _STYLES:
+            raise ValueError('Style must be one of: %s' % ','.join(
+                             _STYLES.keys()))
+        self._style = _STYLES[style][0](fmt, defaults=defaults)
+        if validate:
+            self._style.validate()
+
+        self._fmt = self._style._fmt
+        self.datefmt = datefmt
+
+    default_time_format = '%Y-%m-%d %H:%M:%S'
+    default_msec_format = '%s,%03d'
+
+    def formatTime(self, record, datefmt=None):
+        """
+        Return the creation time of the specified LogRecord as formatted text.
+
+        This method should be called from format() by a formatter which
+        wants to make use of a formatted time. This method can be overridden
+        in formatters to provide for any specific requirement, but the
+        basic behaviour is as follows: if datefmt (a string) is specified,
+        it is used with time.strftime() to format the creation time of the
+        record. Otherwise, an ISO8601-like (or RFC 3339-like) format is used.
+        The resulting string is returned. This function uses a user-configurable
+        function to convert the creation time to a tuple. By default,
+        time.localtime() is used; to change this for a particular formatter
+        instance, set the 'converter' attribute to a function with the same
+        signature as time.localtime() or time.gmtime(). To change it for all
+        formatters, for example if you want all logging times to be shown in GMT,
+        set the 'converter' attribute in the Formatter class.
+        """
+        ct = self.converter(record.created)
+        if datefmt:
+            s = time.strftime(datefmt, ct)
+        else:
+            s = time.strftime(self.default_time_format, ct)
+            if self.default_msec_format:
+                s = self.default_msec_format % (s, record.msecs)
+        return s
+
+    def formatException(self, ei):
+        """
+        Format and return the specified exception information as a string.
+
+        This default implementation just uses
+        traceback.print_exception()
+        """
+        sio = io.StringIO()
+        tb = ei[2]
+        # See issues #9427, #1553375. Commented out for now.
+        #if getattr(self, 'fullstack', False):
+        #    traceback.print_stack(tb.tb_frame.f_back, file=sio)
+        traceback.print_exception(ei[0], ei[1], tb, None, sio)
+        s = sio.getvalue()
+        sio.close()
+        if s[-1:] == "\n":
+            s = s[:-1]
+        return s
+
+    def usesTime(self):
+        """
+        Check if the format uses the creation time of the record.
+        """
+        return self._style.usesTime()
+
+    def formatMessage(self, record):
+        return self._style.format(record)
+
+    def formatStack(self, stack_info):
+        """
+        This method is provided as an extension point for specialized
+        formatting of stack information.
+
+        The input data is a string as returned from a call to
+        :func:`traceback.print_stack`, but with the last trailing newline
+        removed.
+
+        The base implementation just returns the value passed in.
+        """
+        return stack_info
+
+    def format(self, record):
+        """
+        Format the specified record as text.
+
+        The record's attribute dictionary is used as the operand to a
+        string formatting operation which yields the returned string.
+        Before formatting the dictionary, a couple of preparatory steps
+        are carried out. The message attribute of the record is computed
+        using LogRecord.getMessage(). If the formatting string uses the
+        time (as determined by a call to usesTime(), formatTime() is
+        called to format the event time. If there is exception information,
+        it is formatted using formatException() and appended to the message.
+        """
+        record.message = record.getMessage()
+        if self.usesTime():
+            record.asctime = self.formatTime(record, self.datefmt)
+        s = self.formatMessage(record)
+        if record.exc_info:
+            # Cache the traceback text to avoid converting it multiple times
+            # (it's constant anyway)
+            if not record.exc_text:
+                record.exc_text = self.formatException(record.exc_info)
+        if record.exc_text:
+            if s[-1:] != "\n":
+                s = s + "\n"
+            s = s + record.exc_text
+        if record.stack_info:
+            if s[-1:] != "\n":
+                s = s + "\n"
+            s = s + self.formatStack(record.stack_info)
+        return s
+
+#
+#   The default formatter to use when no other is specified
+#
+_defaultFormatter = Formatter()
+
+class BufferingFormatter(object):
+    """
+    A formatter suitable for formatting a number of records.
+    """
+    def __init__(self, linefmt=None):
+        """
+        Optionally specify a formatter which will be used to format each
+        individual record.
+        """
+        if linefmt:
+            self.linefmt = linefmt
+        else:
+            self.linefmt = _defaultFormatter
+
+    def formatHeader(self, records):
+        """
+        Return the header string for the specified records.
+        """
+        return ""
+
+    def formatFooter(self, records):
+        """
+        Return the footer string for the specified records.
+        """
+        return ""
+
+    def format(self, records):
+        """
+        Format the specified records and return the result as a string.
+        """
+        rv = ""
+        if len(records) > 0:
+            rv = rv + self.formatHeader(records)
+            for record in records:
+                rv = rv + self.linefmt.format(record)
+            rv = rv + self.formatFooter(records)
+        return rv
+
+#---------------------------------------------------------------------------
+#   Filter classes and functions
+#---------------------------------------------------------------------------
+
+class Filter(object):
+    """
+    Filter instances are used to perform arbitrary filtering of LogRecords.
+
+    Loggers and Handlers can optionally use Filter instances to filter
+    records as desired. The base filter class only allows events which are
+    below a certain point in the logger hierarchy. For example, a filter
+    initialized with "A.B" will allow events logged by loggers "A.B",
+    "A.B.C", "A.B.C.D", "A.B.D" etc. but not "A.BB", "B.A.B" etc. If
+    initialized with the empty string, all events are passed.
+    """
+    def __init__(self, name=''):
+        """
+        Initialize a filter.
+
+        Initialize with the name of the logger which, together with its
+        children, will have its events allowed through the filter. If no
+        name is specified, allow every event.
+        """
+        self.name = name
+        self.nlen = len(name)
+
+    def filter(self, record):
+        """
+        Determine if the specified record is to be logged.
+
+        Returns True if the record should be logged, or False otherwise.
+        If deemed appropriate, the record may be modified in-place.
+        """
+        if self.nlen == 0:
+            return True
+        elif self.name == record.name:
+            return True
+        elif record.name.find(self.name, 0, self.nlen) != 0:
+            return False
+        return (record.name[self.nlen] == ".")
+
+class Filterer(object):
+    """
+    A base class for loggers and handlers which allows them to share
+    common code.
+    """
+    def __init__(self):
+        """
+        Initialize the list of filters to be an empty list.
+        """
+        self.filters = []
+
+    def addFilter(self, filter):
+        """
+        Add the specified filter to this handler.
+        """
+        if not (filter in self.filters):
+            self.filters.append(filter)
+
+    def removeFilter(self, filter):
+        """
+        Remove the specified filter from this handler.
+        """
+        if filter in self.filters:
+            self.filters.remove(filter)
+
+    def filter(self, record):
+        """
+        Determine if a record is loggable by consulting all the filters.
+
+        The default is to allow the record to be logged; any filter can veto
+        this and the record is then dropped. Returns a zero value if a record
+        is to be dropped, else non-zero.
+
+        .. versionchanged:: 3.2
+
+           Allow filters to be just callables.
+        """
+        rv = True
+        for f in self.filters:
+            if hasattr(f, 'filter'):
+                result = f.filter(record)
+            else:
+                result = f(record) # assume callable - will raise if not
+            if not result:
+                rv = False
+                break
+        return rv
+
+#---------------------------------------------------------------------------
+#   Handler classes and functions
+#---------------------------------------------------------------------------
+
+_handlers = weakref.WeakValueDictionary()  #map of handler names to handlers
+_handlerList = [] # added to allow handlers to be removed in reverse of order initialized
+
+def _removeHandlerRef(wr):
+    """
+    Remove a handler reference from the internal cleanup list.
+    """
+    # This function can be called during module teardown, when globals are
+    # set to None. It can also be called from another thread. So we need to
+    # pre-emptively grab the necessary globals and check if they're None,
+    # to prevent race conditions and failures during interpreter shutdown.
+    acquire, release, handlers = _acquireLock, _releaseLock, _handlerList
+    if acquire and release and handlers:
+        acquire()
+        try:
+            if wr in handlers:
+                handlers.remove(wr)
+        finally:
+            release()
+
+def _addHandlerRef(handler):
+    """
+    Add a handler to the internal cleanup list using a weak reference.
+    """
+    _acquireLock()
+    try:
+        _handlerList.append(weakref.ref(handler, _removeHandlerRef))
+    finally:
+        _releaseLock()
+
+class Handler(Filterer):
+    """
+    Handler instances dispatch logging events to specific destinations.
+
+    The base handler class. Acts as a placeholder which defines the Handler
+    interface. Handlers can optionally use Formatter instances to format
+    records as desired. By default, no formatter is specified; in this case,
+    the 'raw' message as determined by record.message is logged.
+    """
+    def __init__(self, level=NOTSET):
+        """
+        Initializes the instance - basically setting the formatter to None
+        and the filter list to empty.
+        """
+        Filterer.__init__(self)
+        self._name = None
+        self.level = _checkLevel(level)
+        self.formatter = None
+        self._closed = False
+        # Add the handler to the global _handlerList (for cleanup on shutdown)
+        _addHandlerRef(self)
+        self.createLock()
+
+    def get_name(self):
+        return self._name
+
+    def set_name(self, name):
+        _acquireLock()
+        try:
+            if self._name in _handlers:
+                del _handlers[self._name]
+            self._name = name
+            if name:
+                _handlers[name] = self
+        finally:
+            _releaseLock()
+
+    name = property(get_name, set_name)
+
+    def createLock(self):
+        """
+        Acquire a thread lock for serializing access to the underlying I/O.
+        """
+        self.lock = threading.RLock()
+        _register_at_fork_reinit_lock(self)
+
+    def _at_fork_reinit(self):
+        self.lock._at_fork_reinit()
+
+    def acquire(self):
+        """
+        Acquire the I/O thread lock.
+        """
+        if self.lock:
+            self.lock.acquire()
+
+    def release(self):
+        """
+        Release the I/O thread lock.
+        """
+        if self.lock:
+            self.lock.release()
+
+    def setLevel(self, level):
+        """
+        Set the logging level of this handler.  level must be an int or a str.
+        """
+        self.level = _checkLevel(level)
+
+    def format(self, record):
+        """
+        Format the specified record.
+
+        If a formatter is set, use it. Otherwise, use the default formatter
+        for the module.
+        """
+        if self.formatter:
+            fmt = self.formatter
+        else:
+            fmt = _defaultFormatter
+        return fmt.format(record)
+
+    def emit(self, record):
+        """
+        Do whatever it takes to actually log the specified logging record.
+
+        This version is intended to be implemented by subclasses and so
+        raises a NotImplementedError.
+        """
+        raise NotImplementedError('emit must be implemented '
+                                  'by Handler subclasses')
+
+    def handle(self, record):
+        """
+        Conditionally emit the specified logging record.
+
+        Emission depends on filters which may have been added to the handler.
+        Wrap the actual emission of the record with acquisition/release of
+        the I/O thread lock. Returns whether the filter passed the record for
+        emission.
+        """
+        rv = self.filter(record)
+        if rv:
+            self.acquire()
+            try:
+                self.emit(record)
+            finally:
+                self.release()
+        return rv
+
+    def setFormatter(self, fmt):
+        """
+        Set the formatter for this handler.
+        """
+        self.formatter = fmt
+
+    def flush(self):
+        """
+        Ensure all logging output has been flushed.
+
+        This version does nothing and is intended to be implemented by
+        subclasses.
+        """
+        pass
+
+    def close(self):
+        """
+        Tidy up any resources used by the handler.
+
+        This version removes the handler from an internal map of handlers,
+        _handlers, which is used for handler lookup by name. Subclasses
+        should ensure that this gets called from overridden close()
+        methods.
+        """
+        #get the module data lock, as we're updating a shared structure.
+        _acquireLock()
+        try:    #unlikely to raise an exception, but you never know...
+            self._closed = True
+            if self._name and self._name in _handlers:
+                del _handlers[self._name]
+        finally:
+            _releaseLock()
+
+    def handleError(self, record):
+        """
+        Handle errors which occur during an emit() call.
+
+        This method should be called from handlers when an exception is
+        encountered during an emit() call. If raiseExceptions is false,
+        exceptions get silently ignored. This is what is mostly wanted
+        for a logging system - most users will not care about errors in
+        the logging system, they are more interested in application errors.
+        You could, however, replace this with a custom handler if you wish.
+        The record which was being processed is passed in to this method.
+        """
+        if raiseExceptions and sys.stderr:  # see issue 13807
+            t, v, tb = sys.exc_info()
+            try:
+                sys.stderr.write('--- Logging error ---\n')
+                traceback.print_exception(t, v, tb, None, sys.stderr)
+                sys.stderr.write('Call stack:\n')
+                # Walk the stack frame up until we're out of logging,
+                # so as to print the calling context.
+                frame = tb.tb_frame
+                while (frame and os.path.dirname(frame.f_code.co_filename) ==
+                       __path__[0]):
+                    frame = frame.f_back
+                if frame:
+                    traceback.print_stack(frame, file=sys.stderr)
+                else:
+                    # couldn't find the right stack frame, for some reason
+                    sys.stderr.write('Logged from file %s, line %s\n' % (
+                                     record.filename, record.lineno))
+                # Issue 18671: output logging message and arguments
+                try:
+                    sys.stderr.write('Message: %r\n'
+                                     'Arguments: %s\n' % (record.msg,
+                                                          record.args))
+                except RecursionError:  # See issue 36272
+                    raise
+                except Exception:
+                    sys.stderr.write('Unable to print the message and arguments'
+                                     ' - possible formatting error.\nUse the'
+                                     ' traceback above to help find the error.\n'
+                                    )
+            except OSError: #pragma: no cover
+                pass    # see issue 5971
+            finally:
+                del t, v, tb
+
+    def __repr__(self):
+        level = getLevelName(self.level)
+        return '<%s (%s)>' % (self.__class__.__name__, level)
+
+class StreamHandler(Handler):
+    """
+    A handler class which writes logging records, appropriately formatted,
+    to a stream. Note that this class does not close the stream, as
+    sys.stdout or sys.stderr may be used.
+    """
+
+    terminator = '\n'
+
+    def __init__(self, stream=None):
+        """
+        Initialize the handler.
+
+        If stream is not specified, sys.stderr is used.
+        """
+        Handler.__init__(self)
+        if stream is None:
+            stream = sys.stderr
+        self.stream = stream
+
+    def flush(self):
+        """
+        Flushes the stream.
+        """
+        self.acquire()
+        try:
+            if self.stream and hasattr(self.stream, "flush"):
+                self.stream.flush()
+        finally:
+            self.release()
+
+    def emit(self, record):
+        """
+        Emit a record.
+
+        If a formatter is specified, it is used to format the record.
+        The record is then written to the stream with a trailing newline.  If
+        exception information is present, it is formatted using
+        traceback.print_exception and appended to the stream.  If the stream
+        has an 'encoding' attribute, it is used to determine how to do the
+        output to the stream.
+        """
+        try:
+            msg = self.format(record)
+            stream = self.stream
+            # issue 35046: merged two stream.writes into one.
+            stream.write(msg + self.terminator)
+            self.flush()
+        except RecursionError:  # See issue 36272
+            raise
+        except Exception:
+            self.handleError(record)
+
+    def setStream(self, stream):
+        """
+        Sets the StreamHandler's stream to the specified value,
+        if it is different.
+
+        Returns the old stream, if the stream was changed, or None
+        if it wasn't.
+        """
+        if stream is self.stream:
+            result = None
+        else:
+            result = self.stream
+            self.acquire()
+            try:
+                self.flush()
+                self.stream = stream
+            finally:
+                self.release()
+        return result
+
+    def __repr__(self):
+        level = getLevelName(self.level)
+        name = getattr(self.stream, 'name', '')
+        #  bpo-36015: name can be an int
+        name = str(name)
+        if name:
+            name += ' '
+        return '<%s %s(%s)>' % (self.__class__.__name__, name, level)
+
+
+class FileHandler(StreamHandler):
+    """
+    A handler class which writes formatted logging records to disk files.
+    """
+    def __init__(self, filename, mode='a', encoding=None, delay=False, errors=None):
+        """
+        Open the specified file and use it as the stream for logging.
+        """
+        # Issue #27493: add support for Path objects to be passed in
+        filename = os.fspath(filename)
+        #keep the absolute path, otherwise derived classes which use this
+        #may come a cropper when the current directory changes
+        self.baseFilename = os.path.abspath(filename)
+        self.mode = mode
+        self.encoding = encoding
+        if "b" not in mode:
+            self.encoding = io.text_encoding(encoding)
+        self.errors = errors
+        self.delay = delay
+        # bpo-26789: FileHandler keeps a reference to the builtin open()
+        # function to be able to open or reopen the file during Python
+        # finalization.
+        self._builtin_open = open
+        if delay:
+            #We don't open the stream, but we still need to call the
+            #Handler constructor to set level, formatter, lock etc.
+            Handler.__init__(self)
+            self.stream = None
+        else:
+            StreamHandler.__init__(self, self._open())
+
+    def close(self):
+        """
+        Closes the stream.
+        """
+        self.acquire()
+        try:
+            try:
+                if self.stream:
+                    try:
+                        self.flush()
+                    finally:
+                        stream = self.stream
+                        self.stream = None
+                        if hasattr(stream, "close"):
+                            stream.close()
+            finally:
+                # Issue #19523: call unconditionally to
+                # prevent a handler leak when delay is set
+                # Also see Issue #42378: we also rely on
+                # self._closed being set to True there
+                StreamHandler.close(self)
+        finally:
+            self.release()
+
+    def _open(self):
+        """
+        Open the current base file with the (original) mode and encoding.
+        Return the resulting stream.
+        """
+        open_func = self._builtin_open
+        return open_func(self.baseFilename, self.mode,
+                         encoding=self.encoding, errors=self.errors)
+
+    def emit(self, record):
+        """
+        Emit a record.
+
+        If the stream was not opened because 'delay' was specified in the
+        constructor, open it before calling the superclass's emit.
+
+        If stream is not open, current mode is 'w' and `_closed=True`, record
+        will not be emitted (see Issue #42378).
+        """
+        if self.stream is None:
+            if self.mode != 'w' or not self._closed:
+                self.stream = self._open()
+        if self.stream:
+            StreamHandler.emit(self, record)
+
+    def __repr__(self):
+        level = getLevelName(self.level)
+        return '<%s %s (%s)>' % (self.__class__.__name__, self.baseFilename, level)
+
+
+class _StderrHandler(StreamHandler):
+    """
+    This class is like a StreamHandler using sys.stderr, but always uses
+    whatever sys.stderr is currently set to rather than the value of
+    sys.stderr at handler construction time.
+    """
+    def __init__(self, level=NOTSET):
+        """
+        Initialize the handler.
+        """
+        Handler.__init__(self, level)
+
+    @property
+    def stream(self):
+        return sys.stderr
+
+
+_defaultLastResort = _StderrHandler(WARNING)
+lastResort = _defaultLastResort
+
+#---------------------------------------------------------------------------
+#   Manager classes and functions
+#---------------------------------------------------------------------------
+
+class PlaceHolder(object):
+    """
+    PlaceHolder instances are used in the Manager logger hierarchy to take
+    the place of nodes for which no loggers have been defined. This class is
+    intended for internal use only and not as part of the public API.
+    """
+    def __init__(self, alogger):
+        """
+        Initialize with the specified logger being a child of this placeholder.
+        """
+        self.loggerMap = { alogger : None }
+
+    def append(self, alogger):
+        """
+        Add the specified logger as a child of this placeholder.
+        """
+        if alogger not in self.loggerMap:
+            self.loggerMap[alogger] = None
+
+#
+#   Determine which class to use when instantiating loggers.
+#
+
+def setLoggerClass(klass):
+    """
+    Set the class to be used when instantiating a logger. The class should
+    define __init__() such that only a name argument is required, and the
+    __init__() should call Logger.__init__()
+    """
+    if klass != Logger:
+        if not issubclass(klass, Logger):
+            raise TypeError("logger not derived from logging.Logger: "
+                            + klass.__name__)
+    global _loggerClass
+    _loggerClass = klass
+
+def getLoggerClass():
+    """
+    Return the class to be used when instantiating a logger.
+    """
+    return _loggerClass
+
+class Manager(object):
+    """
+    There is [under normal circumstances] just one Manager instance, which
+    holds the hierarchy of loggers.
+    """
+    def __init__(self, rootnode):
+        """
+        Initialize the manager with the root node of the logger hierarchy.
+        """
+        self.root = rootnode
+        self.disable = 0
+        self.emittedNoHandlerWarning = False
+        self.loggerDict = {}
+        self.loggerClass = None
+        self.logRecordFactory = None
+
+    @property
+    def disable(self):
+        return self._disable
+
+    @disable.setter
+    def disable(self, value):
+        self._disable = _checkLevel(value)
+
+    def getLogger(self, name):
+        """
+        Get a logger with the specified name (channel name), creating it
+        if it doesn't yet exist. This name is a dot-separated hierarchical
+        name, such as "a", "a.b", "a.b.c" or similar.
+
+        If a PlaceHolder existed for the specified name [i.e. the logger
+        didn't exist but a child of it did], replace it with the created
+        logger and fix up the parent/child references which pointed to the
+        placeholder to now point to the logger.
+        """
+        rv = None
+        if not isinstance(name, str):
+            raise TypeError('A logger name must be a string')
+        _acquireLock()
+        try:
+            if name in self.loggerDict:
+                rv = self.loggerDict[name]
+                if isinstance(rv, PlaceHolder):
+                    ph = rv
+                    rv = (self.loggerClass or _loggerClass)(name)
+                    rv.manager = self
+                    self.loggerDict[name] = rv
+                    self._fixupChildren(ph, rv)
+                    self._fixupParents(rv)
+            else:
+                rv = (self.loggerClass or _loggerClass)(name)
+                rv.manager = self
+                self.loggerDict[name] = rv
+                self._fixupParents(rv)
+        finally:
+            _releaseLock()
+        return rv
+
+    def setLoggerClass(self, klass):
+        """
+        Set the class to be used when instantiating a logger with this Manager.
+        """
+        if klass != Logger:
+            if not issubclass(klass, Logger):
+                raise TypeError("logger not derived from logging.Logger: "
+                                + klass.__name__)
+        self.loggerClass = klass
+
+    def setLogRecordFactory(self, factory):
+        """
+        Set the factory to be used when instantiating a log record with this
+        Manager.
+        """
+        self.logRecordFactory = factory
+
+    def _fixupParents(self, alogger):
+        """
+        Ensure that there are either loggers or placeholders all the way
+        from the specified logger to the root of the logger hierarchy.
+        """
+        name = alogger.name
+        i = name.rfind(".")
+        rv = None
+        while (i > 0) and not rv:
+            substr = name[:i]
+            if substr not in self.loggerDict:
+                self.loggerDict[substr] = PlaceHolder(alogger)
+            else:
+                obj = self.loggerDict[substr]
+                if isinstance(obj, Logger):
+                    rv = obj
+                else:
+                    assert isinstance(obj, PlaceHolder)
+                    obj.append(alogger)
+            i = name.rfind(".", 0, i - 1)
+        if not rv:
+            rv = self.root
+        alogger.parent = rv
+
+    def _fixupChildren(self, ph, alogger):
+        """
+        Ensure that children of the placeholder ph are connected to the
+        specified logger.
+        """
+        name = alogger.name
+        namelen = len(name)
+        for c in ph.loggerMap.keys():
+            #The if means ... if not c.parent.name.startswith(nm)
+            if c.parent.name[:namelen] != name:
+                alogger.parent = c.parent
+                c.parent = alogger
+
+    def _clear_cache(self):
+        """
+        Clear the cache for all loggers in loggerDict
+        Called when level changes are made
+        """
+
+        _acquireLock()
+        for logger in self.loggerDict.values():
+            if isinstance(logger, Logger):
+                logger._cache.clear()
+        self.root._cache.clear()
+        _releaseLock()
+
+#---------------------------------------------------------------------------
+#   Logger classes and functions
+#---------------------------------------------------------------------------
+
+class Logger(Filterer):
+    """
+    Instances of the Logger class represent a single logging channel. A
+    "logging channel" indicates an area of an application. Exactly how an
+    "area" is defined is up to the application developer. Since an
+    application can have any number of areas, logging channels are identified
+    by a unique string. Application areas can be nested (e.g. an area
+    of "input processing" might include sub-areas "read CSV files", "read
+    XLS files" and "read Gnumeric files"). To cater for this natural nesting,
+    channel names are organized into a namespace hierarchy where levels are
+    separated by periods, much like the Java or Python package namespace. So
+    in the instance given above, channel names might be "input" for the upper
+    level, and "input.csv", "input.xls" and "input.gnu" for the sub-levels.
+    There is no arbitrary limit to the depth of nesting.
+    """
+    def __init__(self, name, level=NOTSET):
+        """
+        Initialize the logger with a name and an optional level.
+        """
+        Filterer.__init__(self)
+        self.name = name
+        self.level = _checkLevel(level)
+        self.parent = None
+        self.propagate = True
+        self.handlers = []
+        self.disabled = False
+        self._cache = {}
+
+    def setLevel(self, level):
+        """
+        Set the logging level of this logger.  level must be an int or a str.
+        """
+        self.level = _checkLevel(level)
+        self.manager._clear_cache()
+
+    def debug(self, msg, *args, **kwargs):
+        """
+        Log 'msg % args' with severity 'DEBUG'.
+
+        To pass exception information, use the keyword argument exc_info with
+        a true value, e.g.
+
+        logger.debug("Houston, we have a %s", "thorny problem", exc_info=1)
+        """
+        if self.isEnabledFor(DEBUG):
+            self._log(DEBUG, msg, args, **kwargs)
+
+    def info(self, msg, *args, **kwargs):
+        """
+        Log 'msg % args' with severity 'INFO'.
+
+        To pass exception information, use the keyword argument exc_info with
+        a true value, e.g.
+
+        logger.info("Houston, we have a %s", "interesting problem", exc_info=1)
+        """
+        if self.isEnabledFor(INFO):
+            self._log(INFO, msg, args, **kwargs)
+
+    def warning(self, msg, *args, **kwargs):
+        """
+        Log 'msg % args' with severity 'WARNING'.
+
+        To pass exception information, use the keyword argument exc_info with
+        a true value, e.g.
+
+        logger.warning("Houston, we have a %s", "bit of a problem", exc_info=1)
+        """
+        if self.isEnabledFor(WARNING):
+            self._log(WARNING, msg, args, **kwargs)
+
+    def warn(self, msg, *args, **kwargs):
+        warnings.warn("The 'warn' method is deprecated, "
+            "use 'warning' instead", DeprecationWarning, 2)
+        self.warning(msg, *args, **kwargs)
+
+    def error(self, msg, *args, **kwargs):
+        """
+        Log 'msg % args' with severity 'ERROR'.
+
+        To pass exception information, use the keyword argument exc_info with
+        a true value, e.g.
+
+        logger.error("Houston, we have a %s", "major problem", exc_info=1)
+        """
+        if self.isEnabledFor(ERROR):
+            self._log(ERROR, msg, args, **kwargs)
+
+    def exception(self, msg, *args, exc_info=True, **kwargs):
+        """
+        Convenience method for logging an ERROR with exception information.
+        """
+        self.error(msg, *args, exc_info=exc_info, **kwargs)
+
+    def critical(self, msg, *args, **kwargs):
+        """
+        Log 'msg % args' with severity 'CRITICAL'.
+
+        To pass exception information, use the keyword argument exc_info with
+        a true value, e.g.
+
+        logger.critical("Houston, we have a %s", "major disaster", exc_info=1)
+        """
+        if self.isEnabledFor(CRITICAL):
+            self._log(CRITICAL, msg, args, **kwargs)
+
+    def fatal(self, msg, *args, **kwargs):
+        """
+        Don't use this method, use critical() instead.
+        """
+        self.critical(msg, *args, **kwargs)
+
+    def log(self, level, msg, *args, **kwargs):
+        """
+        Log 'msg % args' with the integer severity 'level'.
+
+        To pass exception information, use the keyword argument exc_info with
+        a true value, e.g.
+
+        logger.log(level, "We have a %s", "mysterious problem", exc_info=1)
+        """
+        if not isinstance(level, int):
+            if raiseExceptions:
+                raise TypeError("level must be an integer")
+            else:
+                return
+        if self.isEnabledFor(level):
+            self._log(level, msg, args, **kwargs)
+
+    def findCaller(self, stack_info=False, stacklevel=1):
+        """
+        Find the stack frame of the caller so that we can note the source
+        file name, line number and function name.
+        """
+        f = currentframe()
+        #On some versions of IronPython, currentframe() returns None if
+        #IronPython isn't run with -X:Frames.
+        if f is not None:
+            f = f.f_back
+        orig_f = f
+        while f and stacklevel > 1:
+            f = f.f_back
+            stacklevel -= 1
+        if not f:
+            f = orig_f
+        rv = "(unknown file)", 0, "(unknown function)", None
+        while hasattr(f, "f_code"):
+            co = f.f_code
+            filename = os.path.normcase(co.co_filename)
+            if filename == _srcfile:
+                f = f.f_back
+                continue
+            sinfo = None
+            if stack_info:
+                sio = io.StringIO()
+                sio.write('Stack (most recent call last):\n')
+                traceback.print_stack(f, file=sio)
+                sinfo = sio.getvalue()
+                if sinfo[-1] == '\n':
+                    sinfo = sinfo[:-1]
+                sio.close()
+            rv = (co.co_filename, f.f_lineno, co.co_name, sinfo)
+            break
+        return rv
+
+    def makeRecord(self, name, level, fn, lno, msg, args, exc_info,
+                   func=None, extra=None, sinfo=None):
+        """
+        A factory method which can be overridden in subclasses to create
+        specialized LogRecords.
+        """
+        rv = _logRecordFactory(name, level, fn, lno, msg, args, exc_info, func,
+                             sinfo)
+        if extra is not None:
+            for key in extra:
+                if (key in ["message", "asctime"]) or (key in rv.__dict__):
+                    raise KeyError("Attempt to overwrite %r in LogRecord" % key)
+                rv.__dict__[key] = extra[key]
+        return rv
+
+    def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False,
+             stacklevel=1):
+        """
+        Low-level logging routine which creates a LogRecord and then calls
+        all the handlers of this logger to handle the record.
+        """
+        sinfo = None
+        if _srcfile:
+            #IronPython doesn't track Python frames, so findCaller raises an
+            #exception on some versions of IronPython. We trap it here so that
+            #IronPython can use logging.
+            try:
+                fn, lno, func, sinfo = self.findCaller(stack_info, stacklevel)
+            except ValueError: # pragma: no cover
+                fn, lno, func = "(unknown file)", 0, "(unknown function)"
+        else: # pragma: no cover
+            fn, lno, func = "(unknown file)", 0, "(unknown function)"
+        if exc_info:
+            if isinstance(exc_info, BaseException):
+                exc_info = (type(exc_info), exc_info, exc_info.__traceback__)
+            elif not isinstance(exc_info, tuple):
+                exc_info = sys.exc_info()
+        record = self.makeRecord(self.name, level, fn, lno, msg, args,
+                                 exc_info, func, extra, sinfo)
+        self.handle(record)
+
+    def handle(self, record):
+        """
+        Call the handlers for the specified record.
+
+        This method is used for unpickled records received from a socket, as
+        well as those created locally. Logger-level filtering is applied.
+        """
+        if (not self.disabled) and self.filter(record):
+            self.callHandlers(record)
+
+    def addHandler(self, hdlr):
+        """
+        Add the specified handler to this logger.
+        """
+        _acquireLock()
+        try:
+            if not (hdlr in self.handlers):
+                self.handlers.append(hdlr)
+        finally:
+            _releaseLock()
+
+    def removeHandler(self, hdlr):
+        """
+        Remove the specified handler from this logger.
+        """
+        _acquireLock()
+        try:
+            if hdlr in self.handlers:
+                self.handlers.remove(hdlr)
+        finally:
+            _releaseLock()
+
+    def hasHandlers(self):
+        """
+        See if this logger has any handlers configured.
+
+        Loop through all handlers for this logger and its parents in the
+        logger hierarchy. Return True if a handler was found, else False.
+        Stop searching up the hierarchy whenever a logger with the "propagate"
+        attribute set to zero is found - that will be the last logger which
+        is checked for the existence of handlers.
+        """
+        c = self
+        rv = False
+        while c:
+            if c.handlers:
+                rv = True
+                break
+            if not c.propagate:
+                break
+            else:
+                c = c.parent
+        return rv
+
+    def callHandlers(self, record):
+        """
+        Pass a record to all relevant handlers.
+
+        Loop through all handlers for this logger and its parents in the
+        logger hierarchy. If no handler was found, output a one-off error
+        message to sys.stderr. Stop searching up the hierarchy whenever a
+        logger with the "propagate" attribute set to zero is found - that
+        will be the last logger whose handlers are called.
+        """
+        c = self
+        found = 0
+        while c:
+            for hdlr in c.handlers:
+                found = found + 1
+                if record.levelno >= hdlr.level:
+                    hdlr.handle(record)
+            if not c.propagate:
+                c = None    #break out
+            else:
+                c = c.parent
+        if (found == 0):
+            if lastResort:
+                if record.levelno >= lastResort.level:
+                    lastResort.handle(record)
+            elif raiseExceptions and not self.manager.emittedNoHandlerWarning:
+                sys.stderr.write("No handlers could be found for logger"
+                                 " \"%s\"\n" % self.name)
+                self.manager.emittedNoHandlerWarning = True
+
+    def getEffectiveLevel(self):
+        """
+        Get the effective level for this logger.
+
+        Loop through this logger and its parents in the logger hierarchy,
+        looking for a non-zero logging level. Return the first one found.
+        """
+        logger = self
+        while logger:
+            if logger.level:
+                return logger.level
+            logger = logger.parent
+        return NOTSET
+
+    def isEnabledFor(self, level):
+        """
+        Is this logger enabled for level 'level'?
+        """
+        if self.disabled:
+            return False
+
+        try:
+            return self._cache[level]
+        except KeyError:
+            _acquireLock()
+            try:
+                if self.manager.disable >= level:
+                    is_enabled = self._cache[level] = False
+                else:
+                    is_enabled = self._cache[level] = (
+                        level >= self.getEffectiveLevel()
+                    )
+            finally:
+                _releaseLock()
+            return is_enabled
+
+    def getChild(self, suffix):
+        """
+        Get a logger which is a descendant to this one.
+
+        This is a convenience method, such that
+
+        logging.getLogger('abc').getChild('def.ghi')
+
+        is the same as
+
+        logging.getLogger('abc.def.ghi')
+
+        It's useful, for example, when the parent logger is named using
+        __name__ rather than a literal string.
+        """
+        if self.root is not self:
+            suffix = '.'.join((self.name, suffix))
+        return self.manager.getLogger(suffix)
+
+    def __repr__(self):
+        level = getLevelName(self.getEffectiveLevel())
+        return '<%s %s (%s)>' % (self.__class__.__name__, self.name, level)
+
+    def __reduce__(self):
+        # In general, only the root logger will not be accessible via its name.
+        # However, the root logger's class has its own __reduce__ method.
+        if getLogger(self.name) is not self:
+            import pickle
+            raise pickle.PicklingError('logger cannot be pickled')
+        return getLogger, (self.name,)
+
+
+class RootLogger(Logger):
+    """
+    A root logger is not that different to any other logger, except that
+    it must have a logging level and there is only one instance of it in
+    the hierarchy.
+    """
+    def __init__(self, level):
+        """
+        Initialize the logger with the name "root".
+        """
+        Logger.__init__(self, "root", level)
+
+    def __reduce__(self):
+        return getLogger, ()
+
+_loggerClass = Logger
+
+class LoggerAdapter(object):
+    """
+    An adapter for loggers which makes it easier to specify contextual
+    information in logging output.
+    """
+
+    def __init__(self, logger, extra=None):
+        """
+        Initialize the adapter with a logger and a dict-like object which
+        provides contextual information. This constructor signature allows
+        easy stacking of LoggerAdapters, if so desired.
+
+        You can effectively pass keyword arguments as shown in the
+        following example:
+
+        adapter = LoggerAdapter(someLogger, dict(p1=v1, p2="v2"))
+        """
+        self.logger = logger
+        self.extra = extra
+
+    def process(self, msg, kwargs):
+        """
+        Process the logging message and keyword arguments passed in to
+        a logging call to insert contextual information. You can either
+        manipulate the message itself, the keyword args or both. Return
+        the message and kwargs modified (or not) to suit your needs.
+
+        Normally, you'll only need to override this one method in a
+        LoggerAdapter subclass for your specific needs.
+        """
+        kwargs["extra"] = self.extra
+        return msg, kwargs
+
+    #
+    # Boilerplate convenience methods
+    #
+    def debug(self, msg, *args, **kwargs):
+        """
+        Delegate a debug call to the underlying logger.
+        """
+        self.log(DEBUG, msg, *args, **kwargs)
+
+    def info(self, msg, *args, **kwargs):
+        """
+        Delegate an info call to the underlying logger.
+        """
+        self.log(INFO, msg, *args, **kwargs)
+
+    def warning(self, msg, *args, **kwargs):
+        """
+        Delegate a warning call to the underlying logger.
+        """
+        self.log(WARNING, msg, *args, **kwargs)
+
+    def warn(self, msg, *args, **kwargs):
+        warnings.warn("The 'warn' method is deprecated, "
+            "use 'warning' instead", DeprecationWarning, 2)
+        self.warning(msg, *args, **kwargs)
+
+    def error(self, msg, *args, **kwargs):
+        """
+        Delegate an error call to the underlying logger.
+        """
+        self.log(ERROR, msg, *args, **kwargs)
+
+    def exception(self, msg, *args, exc_info=True, **kwargs):
+        """
+        Delegate an exception call to the underlying logger.
+        """
+        self.log(ERROR, msg, *args, exc_info=exc_info, **kwargs)
+
+    def critical(self, msg, *args, **kwargs):
+        """
+        Delegate a critical call to the underlying logger.
+        """
+        self.log(CRITICAL, msg, *args, **kwargs)
+
+    def log(self, level, msg, *args, **kwargs):
+        """
+        Delegate a log call to the underlying logger, after adding
+        contextual information from this adapter instance.
+        """
+        if self.isEnabledFor(level):
+            msg, kwargs = self.process(msg, kwargs)
+            self.logger.log(level, msg, *args, **kwargs)
+
+    def isEnabledFor(self, level):
+        """
+        Is this logger enabled for level 'level'?
+        """
+        return self.logger.isEnabledFor(level)
+
+    def setLevel(self, level):
+        """
+        Set the specified level on the underlying logger.
+        """
+        self.logger.setLevel(level)
+
+    def getEffectiveLevel(self):
+        """
+        Get the effective level for the underlying logger.
+        """
+        return self.logger.getEffectiveLevel()
+
+    def hasHandlers(self):
+        """
+        See if the underlying logger has any handlers.
+        """
+        return self.logger.hasHandlers()
+
+    def _log(self, level, msg, args, exc_info=None, extra=None, stack_info=False):
+        """
+        Low-level log implementation, proxied to allow nested logger adapters.
+        """
+        return self.logger._log(
+            level,
+            msg,
+            args,
+            exc_info=exc_info,
+            extra=extra,
+            stack_info=stack_info,
+        )
+
+    @property
+    def manager(self):
+        return self.logger.manager
+
+    @manager.setter
+    def manager(self, value):
+        self.logger.manager = value
+
+    @property
+    def name(self):
+        return self.logger.name
+
+    def __repr__(self):
+        logger = self.logger
+        level = getLevelName(logger.getEffectiveLevel())
+        return '<%s %s (%s)>' % (self.__class__.__name__, logger.name, level)
+
+root = RootLogger(WARNING)
+Logger.root = root
+Logger.manager = Manager(Logger.root)
+
+#---------------------------------------------------------------------------
+# Configuration classes and functions
+#---------------------------------------------------------------------------
+
+def basicConfig(**kwargs):
+    """
+    Do basic configuration for the logging system.
+
+    This function does nothing if the root logger already has handlers
+    configured, unless the keyword argument *force* is set to ``True``.
+    It is a convenience method intended for use by simple scripts
+    to do one-shot configuration of the logging package.
+
+    The default behaviour is to create a StreamHandler which writes to
+    sys.stderr, set a formatter using the BASIC_FORMAT format string, and
+    add the handler to the root logger.
+
+    A number of optional keyword arguments may be specified, which can alter
+    the default behaviour.
+
+    filename  Specifies that a FileHandler be created, using the specified
+              filename, rather than a StreamHandler.
+    filemode  Specifies the mode to open the file, if filename is specified
+              (if filemode is unspecified, it defaults to 'a').
+    format    Use the specified format string for the handler.
+    datefmt   Use the specified date/time format.
+    style     If a format string is specified, use this to specify the
+              type of format string (possible values '%', '{', '$', for
+              %-formatting, :meth:`str.format` and :class:`string.Template`
+              - defaults to '%').
+    level     Set the root logger level to the specified level.
+    stream    Use the specified stream to initialize the StreamHandler. Note
+              that this argument is incompatible with 'filename' - if both
+              are present, 'stream' is ignored.
+    handlers  If specified, this should be an iterable of already created
+              handlers, which will be added to the root handler. Any handler
+              in the list which does not have a formatter assigned will be
+              assigned the formatter created in this function.
+    force     If this keyword  is specified as true, any existing handlers
+              attached to the root logger are removed and closed, before
+              carrying out the configuration as specified by the other
+              arguments.
+    encoding  If specified together with a filename, this encoding is passed to
+              the created FileHandler, causing it to be used when the file is
+              opened.
+    errors    If specified together with a filename, this value is passed to the
+              created FileHandler, causing it to be used when the file is
+              opened in text mode. If not specified, the default value is
+              `backslashreplace`.
+
+    Note that you could specify a stream created using open(filename, mode)
+    rather than passing the filename and mode in. However, it should be
+    remembered that StreamHandler does not close its stream (since it may be
+    using sys.stdout or sys.stderr), whereas FileHandler closes its stream
+    when the handler is closed.
+
+    .. versionchanged:: 3.2
+       Added the ``style`` parameter.
+
+    .. versionchanged:: 3.3
+       Added the ``handlers`` parameter. A ``ValueError`` is now thrown for
+       incompatible arguments (e.g. ``handlers`` specified together with
+       ``filename``/``filemode``, or ``filename``/``filemode`` specified
+       together with ``stream``, or ``handlers`` specified together with
+       ``stream``.
+
+    .. versionchanged:: 3.8
+       Added the ``force`` parameter.
+
+    .. versionchanged:: 3.9
+       Added the ``encoding`` and ``errors`` parameters.
+    """
+    # Add thread safety in case someone mistakenly calls
+    # basicConfig() from multiple threads
+    _acquireLock()
+    try:
+        force = kwargs.pop('force', False)
+        encoding = kwargs.pop('encoding', None)
+        errors = kwargs.pop('errors', 'backslashreplace')
+        if force:
+            for h in root.handlers[:]:
+                root.removeHandler(h)
+                h.close()
+        if len(root.handlers) == 0:
+            handlers = kwargs.pop("handlers", None)
+            if handlers is None:
+                if "stream" in kwargs and "filename" in kwargs:
+                    raise ValueError("'stream' and 'filename' should not be "
+                                     "specified together")
+            else:
+                if "stream" in kwargs or "filename" in kwargs:
+                    raise ValueError("'stream' or 'filename' should not be "
+                                     "specified together with 'handlers'")
+            if handlers is None:
+                filename = kwargs.pop("filename", None)
+                mode = kwargs.pop("filemode", 'a')
+                if filename:
+                    if 'b' in mode:
+                        errors = None
+                    else:
+                        encoding = io.text_encoding(encoding)
+                    h = FileHandler(filename, mode,
+                                    encoding=encoding, errors=errors)
+                else:
+                    stream = kwargs.pop("stream", None)
+                    h = StreamHandler(stream)
+                handlers = [h]
+            dfs = kwargs.pop("datefmt", None)
+            style = kwargs.pop("style", '%')
+            if style not in _STYLES:
+                raise ValueError('Style must be one of: %s' % ','.join(
+                                 _STYLES.keys()))
+            fs = kwargs.pop("format", _STYLES[style][1])
+            fmt = Formatter(fs, dfs, style)
+            for h in handlers:
+                if h.formatter is None:
+                    h.setFormatter(fmt)
+                root.addHandler(h)
+            level = kwargs.pop("level", None)
+            if level is not None:
+                root.setLevel(level)
+            if kwargs:
+                keys = ', '.join(kwargs.keys())
+                raise ValueError('Unrecognised argument(s): %s' % keys)
+    finally:
+        _releaseLock()
+
+#---------------------------------------------------------------------------
+# Utility functions at module level.
+# Basically delegate everything to the root logger.
+#---------------------------------------------------------------------------
+
+def getLogger(name=None):
+    """
+    Return a logger with the specified name, creating it if necessary.
+
+    If no name is specified, return the root logger.
+    """
+    if not name or isinstance(name, str) and name == root.name:
+        return root
+    return Logger.manager.getLogger(name)
+
+def critical(msg, *args, **kwargs):
+    """
+    Log a message with severity 'CRITICAL' on the root logger. If the logger
+    has no handlers, call basicConfig() to add a console handler with a
+    pre-defined format.
+    """
+    if len(root.handlers) == 0:
+        basicConfig()
+    root.critical(msg, *args, **kwargs)
+
+def fatal(msg, *args, **kwargs):
+    """
+    Don't use this function, use critical() instead.
+    """
+    critical(msg, *args, **kwargs)
+
+def error(msg, *args, **kwargs):
+    """
+    Log a message with severity 'ERROR' on the root logger. If the logger has
+    no handlers, call basicConfig() to add a console handler with a pre-defined
+    format.
+    """
+    if len(root.handlers) == 0:
+        basicConfig()
+    root.error(msg, *args, **kwargs)
+
+def exception(msg, *args, exc_info=True, **kwargs):
+    """
+    Log a message with severity 'ERROR' on the root logger, with exception
+    information. If the logger has no handlers, basicConfig() is called to add
+    a console handler with a pre-defined format.
+    """
+    error(msg, *args, exc_info=exc_info, **kwargs)
+
+def warning(msg, *args, **kwargs):
+    """
+    Log a message with severity 'WARNING' on the root logger. If the logger has
+    no handlers, call basicConfig() to add a console handler with a pre-defined
+    format.
+    """
+    if len(root.handlers) == 0:
+        basicConfig()
+    root.warning(msg, *args, **kwargs)
+
+def warn(msg, *args, **kwargs):
+    warnings.warn("The 'warn' function is deprecated, "
+        "use 'warning' instead", DeprecationWarning, 2)
+    warning(msg, *args, **kwargs)
+
+def info(msg, *args, **kwargs):
+    """
+    Log a message with severity 'INFO' on the root logger. If the logger has
+    no handlers, call basicConfig() to add a console handler with a pre-defined
+    format.
+    """
+    if len(root.handlers) == 0:
+        basicConfig()
+    root.info(msg, *args, **kwargs)
+
+def debug(msg, *args, **kwargs):
+    """
+    Log a message with severity 'DEBUG' on the root logger. If the logger has
+    no handlers, call basicConfig() to add a console handler with a pre-defined
+    format.
+    """
+    if len(root.handlers) == 0:
+        basicConfig()
+    root.debug(msg, *args, **kwargs)
+
+def log(level, msg, *args, **kwargs):
+    """
+    Log 'msg % args' with the integer severity 'level' on the root logger. If
+    the logger has no handlers, call basicConfig() to add a console handler
+    with a pre-defined format.
+    """
+    if len(root.handlers) == 0:
+        basicConfig()
+    root.log(level, msg, *args, **kwargs)
+
+def disable(level=CRITICAL):
+    """
+    Disable all logging calls of severity 'level' and below.
+    """
+    root.manager.disable = level
+    root.manager._clear_cache()
+
+def shutdown(handlerList=_handlerList):
+    """
+    Perform any cleanup actions in the logging system (e.g. flushing
+    buffers).
+
+    Should be called at application exit.
+    """
+    for wr in reversed(handlerList[:]):
+        #errors might occur, for example, if files are locked
+        #we just ignore them if raiseExceptions is not set
+        try:
+            h = wr()
+            if h:
+                try:
+                    h.acquire()
+                    h.flush()
+                    h.close()
+                except (OSError, ValueError):
+                    # Ignore errors which might be caused
+                    # because handlers have been closed but
+                    # references to them are still around at
+                    # application exit.
+                    pass
+                finally:
+                    h.release()
+        except: # ignore everything, as we're shutting down
+            if raiseExceptions:
+                raise
+            #else, swallow
+
+#Let's try and shutdown automatically on application exit...
+import atexit
+atexit.register(shutdown)
+
+# Null handler
+
+class NullHandler(Handler):
+    """
+    This handler does nothing. It's intended to be used to avoid the
+    "No handlers could be found for logger XXX" one-off warning. This is
+    important for library code, which may contain code to log events. If a user
+    of the library does not configure logging, the one-off warning might be
+    produced; to avoid this, the library developer simply needs to instantiate
+    a NullHandler and add it to the top-level logger of the library module or
+    package.
+    """
+    def handle(self, record):
+        """Stub."""
+
+    def emit(self, record):
+        """Stub."""
+
+    def createLock(self):
+        self.lock = None
+
+    def _at_fork_reinit(self):
+        pass
+
+# Warnings integration
+
+_warnings_showwarning = None
+
+def _showwarning(message, category, filename, lineno, file=None, line=None):
+    """
+    Implementation of showwarnings which redirects to logging, which will first
+    check to see if the file parameter is None. If a file is specified, it will
+    delegate to the original warnings implementation of showwarning. Otherwise,
+    it will call warnings.formatwarning and will log the resulting string to a
+    warnings logger named "py.warnings" with level logging.WARNING.
+    """
+    if file is not None:
+        if _warnings_showwarning is not None:
+            _warnings_showwarning(message, category, filename, lineno, file, line)
+    else:
+        s = warnings.formatwarning(message, category, filename, lineno, line)
+        logger = getLogger("py.warnings")
+        if not logger.handlers:
+            logger.addHandler(NullHandler())
+        logger.warning("%s", s)
+
+def captureWarnings(capture):
+    """
+    If capture is true, redirect all warnings to the logging package.
+    If capture is False, ensure that warnings are not redirected to logging
+    but to their original destinations.
+    """
+    global _warnings_showwarning
+    if capture:
+        if _warnings_showwarning is None:
+            _warnings_showwarning = warnings.showwarning
+            warnings.showwarning = _showwarning
+    else:
+        if _warnings_showwarning is not None:
+            warnings.showwarning = _warnings_showwarning
+            _warnings_showwarning = None
+
+ +
+
+
+ +
+ +
+

© Copyright 2025, Autodesk.

+
+ + + +
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/_modules/shotgun_api3/shotgun.html b/_modules/shotgun_api3/shotgun.html new file mode 100644 index 000000000..98da69ba0 --- /dev/null +++ b/_modules/shotgun_api3/shotgun.html @@ -0,0 +1,5063 @@ + + + + + + + + shotgun_api3.shotgun — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

Source code for shotgun_api3.shotgun

+#!/usr/bin/env python
+"""
+-----------------------------------------------------------------------------
+Copyright (c) 2009-2019, Shotgun Software Inc.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ - Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+ - Neither the name of the Shotgun Software Inc nor the names of its
+   contributors may be used to endorse or promote products derived from this
+   software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+"""
+
+# Python 2/3 compatibility
+from .lib import six
+from .lib import sgsix
+from .lib import sgutils
+from .lib.six import BytesIO  # used for attachment upload
+from .lib.six.moves import map
+
+from .lib.six.moves import http_cookiejar  # used for attachment upload
+import datetime
+import logging
+import uuid  # used for attachment upload
+import os
+import re
+import copy
+import ssl
+import stat  # used for attachment upload
+import sys
+import time
+import json
+from .lib.six.moves import urllib
+import shutil  # used for attachment download
+from .lib.six.moves import http_client  # Used for secure file upload.
+from .lib.httplib2 import Http, ProxyInfo, socks, ssl_error_classes
+from .lib.sgtimezone import SgTimezone
+
+# Import Error and ResponseError (even though they're unused in this file) since they need
+# to be exposed as part of the API.
+from .lib.six.moves.xmlrpc_client import Error, ProtocolError, ResponseError  # noqa
+
+if six.PY3:
+    from base64 import encodebytes as base64encode
+else:
+    from base64 import encodestring as base64encode
+
+
+LOG = logging.getLogger("shotgun_api3")
+"""
+Logging instance for shotgun_api3
+
+Provides a logging instance where log messages are sent during execution. This instance has no
+handler associated with it.
+
+.. seealso:: :ref:`logging`
+"""
+LOG.setLevel(logging.WARN)
+
+
+def _is_mimetypes_broken():
+    """
+    Checks if this version of Python ships with a broken version of mimetypes
+
+    :returns: True if the version of mimetypes is broken, False otherwise.
+    """
+    # mimetypes is broken on Windows only and for Python 2.7.0 to 2.7.9 inclusively.
+    # We're bundling the version from 2.7.10.
+    # See bugs :
+    # http://bugs.python.org/issue9291  <- Fixed in 2.7.7
+    # http://bugs.python.org/issue21652 <- Fixed in 2.7.8
+    # http://bugs.python.org/issue22028 <- Fixed in 2.7.10
+    return (
+        sys.platform == "win32"
+        and sys.version_info[0] == 2
+        and sys.version_info[1] == 7
+        and sys.version_info[2] >= 0
+        and sys.version_info[2] <= 9
+    )
+
+
+if _is_mimetypes_broken():
+    from .lib import mimetypes as mimetypes
+else:
+    import mimetypes
+
+
+# mimetypes imported in version specific imports
+mimetypes.add_type("video/webm", ".webm")  # webm and mp4 seem to be missing
+mimetypes.add_type("video/mp4", ".mp4")  # from some OS/distros
+
+SG_TIMEZONE = SgTimezone()
+
+SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION = False
+
+NO_SSL_VALIDATION = False
+"""
+Turns off hostname matching validation for SSL certificates
+
+Sometimes there are cases where certificate validation should be disabled. For example, if you
+have a self-signed internal certificate that isn't included in our certificate bundle, you may
+not require the added security provided by enforcing this.
+"""
+
+# ----------------------------------------------------------------------------
+# Version
+__version__ = "3.8.2"
+
+# ----------------------------------------------------------------------------
+# Errors
+
+
+
[docs]class ShotgunError(Exception): + """ + Base for all Shotgun API Errors. + """ + + pass
+ + +
[docs]class ShotgunFileDownloadError(ShotgunError): + """ + Exception for file download-related errors. + """ + + pass
+ + +class ShotgunThumbnailNotReady(ShotgunError): + """ + Exception for when trying to use a 'pending thumbnail' (aka transient thumbnail) in an operation + """ + + pass + + +
[docs]class Fault(ShotgunError): + """ + Exception when server-side exception detected. + """ + + pass
+ + +
[docs]class AuthenticationFault(Fault): + """ + Exception when the server side reports an error related to authentication. + """ + + pass
+ + +
[docs]class MissingTwoFactorAuthenticationFault(Fault): + """ + Exception when the server side reports an error related to missing two-factor authentication + credentials. + """ + + pass
+ + +class UserCredentialsNotAllowedForSSOAuthenticationFault(Fault): + """ + Exception when the server is configured to use SSO. It is not possible to use + a username/password pair to authenticate on such server. + """ + + pass + + +class UserCredentialsNotAllowedForOxygenAuthenticationFault(Fault): + """ + Exception when the server is configured to use Oxygen. It is not possible to use + a username/password pair to authenticate on such server. + """ + + pass + + +# ---------------------------------------------------------------------------- +# API + + +class ServerCapabilities(object): + """ + Container for the servers capabilities, such as version enabled features. + + .. warning:: + + This class is part of the internal API and its interfaces may change at any time in + the future. Therefore, usage of this class is discouraged. + """ + + def __init__(self, host, meta): + """ + ServerCapabilities.__init__ + + :param str host: Host name for the server excluding protocol. + :param dict meta: dict of meta data for the server returned from the info() api method. + + :ivar str host: + :ivar dict server_info: + :ivar tuple version: Simple version of the Shotgun server. ``(major, minor, rev)`` + :ivar bool is_dev: ``True`` if server is running a development version of the Shotgun + codebase. + """ + self._ensure_python_version_supported() + # Server host name + self.host = host + self.server_info = meta + + # Version from server is major.minor.rev or major.minor.rev."Dev" + # Store version as tuple and check dev flag + try: + self.version = meta.get("version", None) + except AttributeError: + self.version = None + if not self.version: + raise ShotgunError( + "The Flow Production Tracking Server didn't respond with a version number. " + "This may be because you are running an older version of " + "Flow Production Tracking against a more recent version of the Flow Production Tracking API. " + "For more information, please contact the Autodesk support." + ) + + if len(self.version) > 3 and self.version[3] == "Dev": + self.is_dev = True + else: + self.is_dev = False + + self.version = tuple(self.version[:3]) + self._ensure_json_supported() + + def _ensure_python_version_supported(self): + """ + Checks the if current Python version is supported. + """ + if sys.version_info < (3, 7): + raise ShotgunError("This module requires Python version 3.7 or higher.") + + def _ensure_support(self, feature, raise_hell=True): + """ + Checks the server version supports a given feature, raises an exception if it does not. + + :param dict feature: dict where **version** key contains a 3 integer tuple indicating the + supported server version and **label** key contains a human-readable label str:: + + { 'version': (5, 4, 4), 'label': 'project parameter } + :param bool raise_hell: Whether to raise an exception if the feature is not supported. + Defaults to ``True`` + :raises: :class:`ShotgunError` if the current server version does not support ``feature`` + """ + + if not self.version or self.version < feature["version"]: + if raise_hell: + raise ShotgunError( + "%s requires server version %s or higher, " + "server is %s" + % ( + feature["label"], + _version_str(feature["version"]), + _version_str(self.version), + ) + ) + return False + else: + return True + + def _ensure_json_supported(self): + """ + Ensures server has support for JSON API endpoint added in v2.4.0. + """ + self._ensure_support({"version": (2, 4, 0), "label": "JSON API"}) + + def ensure_include_archived_projects(self): + """ + Ensures server has support for archived Projects feature added in v5.3.14. + """ + self._ensure_support( + {"version": (5, 3, 14), "label": "include_archived_projects parameter"} + ) + + def ensure_per_project_customization(self): + """ + Ensures server has support for per-project customization feature added in v5.4.4. + """ + return self._ensure_support( + {"version": (5, 4, 4), "label": "project parameter"}, True + ) + + def ensure_support_for_additional_filter_presets(self): + """ + Ensures server has support for additional filter presets feature added in v7.0.0. + """ + return self._ensure_support( + {"version": (7, 0, 0), "label": "additional_filter_presets parameter"}, True + ) + + def ensure_user_following_support(self): + """ + Ensures server has support for listing items a user is following, added in v7.0.12. + """ + return self._ensure_support( + {"version": (7, 0, 12), "label": "user_following parameter"}, True + ) + + def ensure_paging_info_without_counts_support(self): + """ + Ensures server has support for optimized pagination, added in v7.4.0. + """ + return self._ensure_support( + {"version": (7, 4, 0), "label": "optimized pagination"}, False + ) + + def ensure_return_image_urls_support(self): + """ + Ensures server has support for returning thumbnail URLs without additional round-trips, added in v3.3.0. + """ + return self._ensure_support( + {"version": (3, 3, 0), "label": "return thumbnail URLs"}, False + ) + + def __str__(self): + return "ServerCapabilities: host %s, version %s, is_dev %s" % ( + self.host, + self.version, + self.is_dev, + ) + + +class ClientCapabilities(object): + """ + Container for the client capabilities. + + .. warning:: + + This class is part of the internal API and its interfaces may change at any time in + the future. Therefore, usage of this class is discouraged. + + :ivar str platform: The current client platform. Valid values are ``mac``, ``linux``, + ``windows``, or ``None`` (if the current platform couldn't be determined). + :ivar str local_path_field: The PTR field used for local file paths. This is calculated using + the value of ``platform``. Ex. ``local_path_mac``. + :ivar str py_version: Simple version of Python executable as a string. Eg. ``2.7``. + :ivar str ssl_version: Version of OpenSSL installed. Eg. ``OpenSSL 1.0.2g 1 Mar 2016``. This + info is only available in Python 2.7+ if the ssl module was imported successfully. + Defaults to ``unknown`` + """ + + def __init__(self): + system = sys.platform.lower() + + if system == "darwin": + self.platform = "mac" + elif system.startswith("linux"): + self.platform = "linux" + elif system == "win32": + self.platform = "windows" + else: + self.platform = None + + if self.platform: + self.local_path_field = "local_path_%s" % (self.platform) + else: + self.local_path_field = None + + self.py_version = ".".join(str(x) for x in sys.version_info[:2]) + + # extract the OpenSSL version if we can. The version is only available in Python 2.7 and + # only if we successfully imported ssl + self.ssl_version = "unknown" + try: + self.ssl_version = ssl.OPENSSL_VERSION + except (AttributeError, NameError): + pass + + def __str__(self): + return ( + "ClientCapabilities: platform %s, local_path_field %s, " + "py_verison %s, ssl version %s" + % (self.platform, self.local_path_field, self.py_version, self.ssl_version) + ) + + +class _Config(object): + """ + Container for the client configuration. + """ + + def __init__(self, sg): + """ + :param sg: Shotgun connection. + """ + self._sg = sg + self.max_rpc_attempts = 3 + # rpc_attempt_interval stores the number of milliseconds to wait between + # request retries. By default, this will be 3000 milliseconds. You can + # override this by setting this property on the config like so: + # + # sg = Shotgun(site_name, script_name, script_key) + # sg.config.rpc_attempt_interval = 1000 # adjusting default interval + # + # Or by setting the ``SHOTGUN_API_RETRY_INTERVAL`` environment variable. + # In the case that the environment variable is already set, setting the + # property on the config will override it. + self.rpc_attempt_interval = 3000 + # From http://docs.python.org/2.6/library/httplib.html: + # If the optional timeout parameter is given, blocking operations + # (like connection attempts) will timeout after that many seconds + # (if it is not given, the global default timeout setting is used) + self.timeout_secs = None + self.api_ver = "api3" + self.convert_datetimes_to_utc = True + self._records_per_page = None + self.api_key = None + self.script_name = None + self.user_login = None + self.user_password = None + self.auth_token = None + self.sudo_as_login = None + # Authentication parameters to be folded into final auth_params dict + self.extra_auth_params = None + # uuid as a string + self.session_uuid = None + self.scheme = None + self.server = None + self.api_path = None + # The raw_http_proxy reflects the exact string passed in + # to the Shotgun constructor. This can be useful if you + # need to construct a Shotgun API instance based on + # another Shotgun API instance. + self.raw_http_proxy = None + # if a proxy server is being used, the proxy_handler + # below will contain a urllib2.ProxyHandler instance + # which can be used whenever a request needs to be made. + self.proxy_handler = None + self.proxy_server = None + self.proxy_port = 8080 + self.proxy_user = None + self.proxy_pass = None + self.session_token = None + self.authorization = None + self.no_ssl_validation = False + self.localized = False + + def set_server_params(self, base_url): + """ + Set the different server related fields based on the passed in URL. + + This will impact the following attributes: + + - scheme: http or https + - api_path: usually /api3/json + - server: usually something.shotgunstudio.com + + :param str base_url: The server URL. + + :raises ValueError: Raised if protocol is not http or https. + """ + self.scheme, self.server, api_base, _, _ = urllib.parse.urlsplit(base_url) + if self.scheme not in ("http", "https"): + raise ValueError("base_url must use http or https got '%s'" % base_url) + self.api_path = urllib.parse.urljoin( + urllib.parse.urljoin(api_base or "/", self.api_ver + "/"), "json" + ) + + @property + def records_per_page(self): + """ + The records per page value from the server. + """ + if self._records_per_page is None: + # Check for api_max_entities_per_page in the server info and change the record per page + # value if it is supplied. + self._records_per_page = ( + self._sg.server_info.get("api_max_entities_per_page") or 500 + ) + return self._records_per_page + + +
[docs]class Shotgun(object): + """ + Shotgun Client connection. + """ + + # reg ex from + # http://underground.infovark.com/2008/07/22/iso-date-validation-regex/ + # Note a length check is done before checking the reg ex + _DATE_PATTERN = re.compile(r"^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])$") + _DATE_TIME_PATTERN = re.compile( + r"^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])" + r"(\D?([01]\d|2[0-3])\D?([0-5]\d)\D?([0-5]\d)?\D?(\d{3})?)?$" + ) + + _MULTIPART_UPLOAD_CHUNK_SIZE = 20000000 + MAX_ATTEMPTS = 3 # Retries on failure + BACKOFF = 0.75 # Seconds to wait before retry, times the attempt number + + def __init__( + self, + base_url, + script_name=None, + api_key=None, + convert_datetimes_to_utc=True, + http_proxy=None, + ensure_ascii=True, + connect=True, + ca_certs=None, + login=None, + password=None, + sudo_as_login=None, + session_token=None, + auth_token=None, + ): + """ + Initializes a new instance of the Shotgun client. + + :param str base_url: http or https url of the Shotgun server. Do not include the trailing + slash:: + + https://example.shotgunstudio.com + :param str script_name: name of the Script entity used to authenticate to the server. + If provided, then ``api_key`` must be as well, and neither ``login`` nor ``password`` + can be provided. + + .. seealso:: :ref:`authentication` + :param str api_key: API key for the provided ``script_name``. Used to authenticate to the + server. If provided, then ``script_name`` must be as well, and neither ``login`` nor + ``password`` can be provided. + + .. seealso:: :ref:`authentication` + :param bool convert_datetimes_to_utc: (optional) When ``True``, datetime values are converted + from local time to UTC time before being sent to the server. Datetimes received from + the server are then converted back to local time. When ``False`` the client should use + UTC date time values. Default is ``True``. + :param str http_proxy: (optional) URL for a proxy server to use for all connections. The + expected str format is ``[username:password@]111.222.333.444[:8080]``. Examples:: + + 192.168.0.1 + 192.168.0.1:8888 + joe:user@192.168.0.1:8888 + :param bool connect: (optional) When ``True``, as soon as the :class:`~shotgun_api3.Shotgun` + instance is created, a connection will be made to the Shotgun server to determine the + server capabilities and confirm this version of the client is compatible with the server + version. This is mostly used for testing. Default is ``True``. + :param str ca_certs: (optional) path to an external SSL certificates file. By default, the + Shotgun API will use its own built-in certificates file which stores root certificates + for the most common Certificate Authorities (CAs). If you are using a corporate or + internal CA, or are packaging an application into an executable, it may be necessary to + point to your own certificates file. You can do this by passing in the full path to the + file via this parameter or by setting the environment variable ``SHOTGUN_API_CACERTS``. + In the case both are set, this parameter will take precedence. + :param str login: The user login str to use to authenticate to the server when using user-based + authentication. If provided, then ``password`` must be as well, and neither + ``script_name`` nor ``api_key`` can be provided. + + .. seealso:: :ref:`authentication` + :param str password: The password str to use to authenticate to the server when using user-based + authentication. If provided, then ``login`` must be as well and neither ``script_name`` + nor ``api_key`` can be provided. + + See :ref:`authentication` for more info. + :param str sudo_as_login: A user login string for the user whose permissions will be applied + to all actions. Event log entries will be generated showing this user performing all + actions with an additional extra meta-data parameter ``sudo_actual_user`` indicating the + script or user that is actually authenticated. + :param str session_token: The session token to use to authenticate to the server. This + can be used as an alternative to authenticating with a script user or regular user. + You can retrieve the session token by running the + :meth:`~shotgun_api3.Shotgun.get_session_token()` method. + + .. todo: Add this info to the Authentication section of the docs + :param str auth_token: The authentication token required to authenticate to a server with + two-factor authentication turned on. If provided, then ``login`` and ``password`` must + be provided as well, and neither ``script_name`` nor ``api_key`` can be provided. + + .. note:: These tokens can be short lived so a session is established right away if an + ``auth_token`` is provided. A + :class:`~shotgun_api3.MissingTwoFactorAuthenticationFault` will be raised if the + ``auth_token`` is invalid. + .. todo: Add this info to the Authentication section of the docs + + .. note:: A note about proxy connections: If you are using Python <= v2.6.2, HTTPS + connections through a proxy server will not work due to a bug in the :mod:`urllib2` + library (see http://bugs.python.org/issue1424152). This will affect upload and + download-related methods in the Shotgun API (eg. :meth:`~shotgun_api3.Shotgun.upload`, + :meth:`~shotgun_api3.Shotgun.upload_thumbnail`, + :meth:`~shotgun_api3.Shotgun.upload_filmstrip_thumbnail`, + :meth:`~shotgun_api3.Shotgun.download_attachment`. Normal CRUD methods for passing JSON + data should still work fine. If you cannot upgrade your Python installation, you can see + the patch merged into Python v2.6.3 (http://hg.python.org/cpython/rev/0f57b30a152f/) and + try and hack it into your installation but YMMV. For older versions of Python there + are other patches that were proposed in the bug report that may help you as well. + """ + + # verify authentication arguments + if session_token is not None: + if script_name is not None or api_key is not None: + raise ValueError( + "cannot provide both session_token " "and script_name/api_key" + ) + if login is not None or password is not None: + raise ValueError( + "cannot provide both session_token " "and login/password" + ) + + if login is not None or password is not None: + if script_name is not None or api_key is not None: + raise ValueError( + "cannot provide both login/password " "and script_name/api_key" + ) + if login is None: + raise ValueError("password provided without login") + if password is None: + raise ValueError("login provided without password") + + if script_name is not None or api_key is not None: + if script_name is None: + raise ValueError("api_key provided without script_name") + if api_key is None: + raise ValueError("script_name provided without api_key") + + if auth_token is not None: + if login is None or password is None: + raise ValueError( + "must provide a user login and password with an auth_token" + ) + + if script_name is not None or api_key is not None: + raise ValueError("cannot provide an auth_code with script_name/api_key") + + # Can't use 'all' with python 2.4 + if ( + len( + [x for x in [session_token, script_name, api_key, login, password] if x] + ) + == 0 + ): + if connect: + raise ValueError( + "must provide login/password, session_token or script_name/api_key" + ) + + self.config = _Config(self) + self.config.api_key = api_key + self.config.script_name = script_name + self.config.user_login = login + self.config.user_password = password + self.config.auth_token = auth_token + self.config.session_token = session_token + self.config.sudo_as_login = sudo_as_login + self.config.convert_datetimes_to_utc = convert_datetimes_to_utc + self.config.no_ssl_validation = NO_SSL_VALIDATION + self.config.raw_http_proxy = http_proxy + + try: + self.config.rpc_attempt_interval = int( + os.environ.get("SHOTGUN_API_RETRY_INTERVAL", 3000) + ) + except ValueError: + retry_interval = os.environ.get("SHOTGUN_API_RETRY_INTERVAL", 3000) + raise ValueError( + "Invalid value '%s' found in environment variable " + "SHOTGUN_API_RETRY_INTERVAL, must be int." % retry_interval + ) + if self.config.rpc_attempt_interval < 0: + raise ValueError( + "Value of SHOTGUN_API_RETRY_INTERVAL must be positive, " + "got '%s'." % self.config.rpc_attempt_interval + ) + + global SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION + if ( + os.environ.get("SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION", "0") + .strip() + .lower() + == "1" + ): + SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION = True + + self._connection = None + + self.__ca_certs = self._get_certs_file(ca_certs) + + self.base_url = (base_url or "").lower() + self.config.set_server_params(self.base_url) + + # if the service contains user information strip it out + # copied from the xmlrpclib which turned the user:password into + # and auth header + + # Do NOT self._split_url(self.base_url) here, as it contains the lower + # case version of the base_url argument. Doing so would base64encode + # the lowercase version of the credentials. + auth, self.config.server = self._split_url(base_url) + if auth: + auth = base64encode( + sgutils.ensure_binary(urllib.parse.unquote(auth)) + ).decode("utf-8") + self.config.authorization = "Basic " + auth.strip() + + # foo:bar@123.456.789.012:3456 + if http_proxy: + # check if we're using authentication. Start from the end since + # there might be @ in the user's password. + p = http_proxy.rsplit("@", 1) + if len(p) > 1: + self.config.proxy_user, self.config.proxy_pass = p[0].split(":", 1) + proxy_server = p[1] + else: + proxy_server = http_proxy + proxy_netloc_list = proxy_server.split(":", 1) + self.config.proxy_server = proxy_netloc_list[0] + if len(proxy_netloc_list) > 1: + try: + self.config.proxy_port = int(proxy_netloc_list[1]) + except ValueError: + raise ValueError( + "Invalid http_proxy address '%s'. Valid " + "format is '123.456.789.012' or '123.456.789.012:3456'" + ". If no port is specified, a default of %d will be " + "used." % (http_proxy, self.config.proxy_port) + ) + + # now populate self.config.proxy_handler + if self.config.proxy_user and self.config.proxy_pass: + auth_string = "%s:%s@" % ( + self.config.proxy_user, + self.config.proxy_pass, + ) + else: + auth_string = "" + proxy_addr = "http://%s%s:%d" % ( + auth_string, + self.config.proxy_server, + self.config.proxy_port, + ) + self.config.proxy_handler = urllib.request.ProxyHandler( + {self.config.scheme: proxy_addr} + ) + + if ensure_ascii: + self._json_loads = self._json_loads_ascii + + self.client_caps = ClientCapabilities() + # this relies on self.client_caps being set first + self.reset_user_agent() + + self._server_caps = None + # test to ensure the the server supports the json API + # call to server will only be made once and will raise error + if connect: + self.server_caps + + # When using auth_token in a 2FA scenario we need to switch to session-based + # authentication because the auth token will no longer be valid after a first use. + if self.config.auth_token is not None: + self.config.session_token = self.get_session_token() + self.config.user_login = None + self.config.user_password = None + self.config.auth_token = None + + def _split_url(self, base_url): + """ + Extract the hostname:port and username/password/token from base_url + sent when connect to the API. + + In python 3.8 `urllib.parse.splituser` was deprecated warning devs to + use `urllib.parse.urlparse`. + """ + if six.PY38: + auth = None + results = urllib.parse.urlparse(base_url) + server = results.hostname + if results.port: + server = "{}:{}".format(server, results.port) + + if results.username: + auth = results.username + + if results.password: + auth = "{}:{}".format(auth, results.password) + + else: + auth, server = urllib.parse.splituser( + urllib.parse.urlsplit(base_url).netloc + ) + + return auth, server + + # ======================================================================== + # API Functions + + @property + def server_info(self): + """ + Property containing server information. + + >>> sg.server_info + {'full_version': [6, 3, 15, 0], 'version': [6, 3, 15], ...} + + .. note:: + + Beyond ``full_version`` and ``version`` which differ by the inclusion of the bugfix number, + you should expect these values to be unsupported and for internal use only. + + :returns: dict of server information from :class:`ServerCapabilities` object + :rtype: dict + """ + return self.server_caps.server_info + + @property + def server_caps(self): + """ + Property containing :class:`ServerCapabilities` object. + + >>> sg.server_caps + <shotgun_api3.shotgun.ServerCapabilities object at 0x10120d350> + + :returns: :class:`ServerCapabilities` object that describe the server the client is + connected to. + :rtype: :class:`ServerCapabilities` object + """ + if not self._server_caps or (self._server_caps.host != self.config.server): + self._server_caps = ServerCapabilities(self.config.server, self.info()) + return self._server_caps + +
[docs] def connect(self): + """ + Connect client to the server if it is not already connected. + + .. note:: The client will automatically connect to the server on demand. You only need to + call this function if you wish to confirm the client can connect. + """ + self._get_connection() + self.info() + return
+ +
[docs] def close(self): + """ + Close the current connection to the server. + + If the client needs to connect again it will do so automatically. + """ + self._close_connection() + return
+ +
[docs] def info(self): + """ + Get API-related metadata from the Shotgun server. + + >>> sg.info() + {'full_version': [8, 2, 1, 0], 'version': [8, 2, 1], 'user_authentication_method': 'default', ...} + + :: + + Token Value + -------- --------- + full_version An ordered array of the full Shotgun version. + [major, minor, patch, hotfix] + version An ordered array of the Shotgun version. + [major, minor, patch] + user_authentication_method Indicates the authentication method used by Shotgun. + Will be one of the following values: + default: regular username/password. + ldap: username/password from the company's LDAP. + saml2: SSO used, over SAML2. + + .. note:: + + Beyond the documented tokens, you should expect + the other values to be unsupported and for internal use only. + + :returns: dict of the server metadata. + :rtype: dict + """ + return self._call_rpc("info", None, include_auth_params=False)
+ +
[docs] def find_one( + self, + entity_type, + filters, + fields=None, + order=None, + filter_operator=None, + retired_only=False, + include_archived_projects=True, + additional_filter_presets=None, + ): + """ + Shortcut for :meth:`~shotgun_api3.Shotgun.find` with ``limit=1`` so it returns a single + result. + + >>> sg.find_one("Asset", [["id", "is", 32]], ["id", "code", "sg_status_list"]) + {'code': 'Gopher', 'id': 32, 'sg_status_list': 'ip', 'type': 'Asset'} + + :param str entity_type: Shotgun entity type as a string to find. + :param list filters: list of filters to apply to the query. + + .. seealso:: :ref:`filter_syntax` + + :param list fields: Optional list of fields to include in each entity record returned. + Defaults to ``["id"]``. + :param int order: Optional list of fields to order the results by. List has the format:: + + [ + {'field_name':'foo', 'direction':'asc'}, + {'field_name':'bar', 'direction':'desc'} + ] + + Defaults to sorting by ``id`` in ascending order. + :param str filter_operator: Operator to apply to the filters. Supported values are ``"all"`` + and ``"any"``. These are just another way of defining if the query is an AND or OR + query. Defaults to ``"all"``. + :param bool retired_only: Optional boolean when ``True`` will return only entities that have + been retired. Defaults to ``False`` which returns only entities which have not been + retired. There is no option to return both retired and non-retired entities in the + same query. + :param bool include_archived_projects: Optional boolean flag to include entities whose projects + have been archived. Defaults to ``True``. + :param additional_filter_presets: Optional list of presets to further filter the result + set, list has the form:: + + [{ + "preset_name": <preset_name>, + <optional_param1>: <optional_value1>, + ... + }] + + Note that these filters are ANDed together and ANDed with the 'filter' + argument. + + For details on supported presets and the format of this parameter see + :ref:`additional_filter_presets` + :returns: Dictionary representing a single matching entity with the requested fields, + and the defaults ``"id"`` and ``"type"`` which are always included. + + .. seealso:: :ref:`entity-fields` + + :rtype: dict + """ + + results = self.find( + entity_type, + filters, + fields, + order, + filter_operator, + 1, + retired_only, + include_archived_projects=include_archived_projects, + additional_filter_presets=additional_filter_presets, + ) + + if results: + return results[0] + return None
+ +
[docs] def find( + self, + entity_type, + filters, + fields=None, + order=None, + filter_operator=None, + limit=0, + retired_only=False, + page=0, + include_archived_projects=True, + additional_filter_presets=None, + ): + """ + Find entities matching the given filters. + + >>> # Find Character Assets in Sequence 100_FOO + >>> # ------------- + >>> fields = ['id', 'code', 'sg_asset_type'] + >>> sequence_id = 2 # Sequence "100_FOO" + >>> project_id = 4 # Demo Project + >>> filters = [ + ... ['project', 'is', {'type': 'Project', 'id': project_id}], + ... ['sg_asset_type', 'is', 'Character'], + ... ['sequences', 'is', {'type': 'Sequence', 'id': sequence_id}] + ... ] + >>> assets= sg.find("Asset",filters,fields) + [{'code': 'Gopher', 'id': 32, 'sg_asset_type': 'Character', 'type': 'Asset'}, + {'code': 'Cow', 'id': 33, 'sg_asset_type': 'Character', 'type': 'Asset'}, + {'code': 'Bird_1', 'id': 35, 'sg_asset_type': 'Character', 'type': 'Asset'}, + {'code': 'Bird_2', 'id': 36, 'sg_asset_type': 'Character', 'type': 'Asset'}, + {'code': 'Bird_3', 'id': 37, 'sg_asset_type': 'Character', 'type': 'Asset'}, + {'code': 'Raccoon', 'id': 45, 'sg_asset_type': 'Character', 'type': 'Asset'}, + {'code': 'Wet Gopher', 'id': 149, 'sg_asset_type': 'Character', 'type': 'Asset'}] + + You can drill through single entity links to filter on fields or display linked fields. + This is often called "deep linking" or using "dot notation". + + .. seealso:: :ref:`filter_syntax` + + >>> # Find Versions created by Tasks in the Animation Pipeline Step + >>> # ------------- + >>> fields = ['id', 'code'] + >>> pipeline_step_id = 2 # Animation Step ID + >>> project_id = 4 # Demo Project + >>> # you can drill through single-entity link fields + >>> filters = [ + ... ['project','is', {'type': 'Project','id': project_id}], + ... ['sg_task.Task.step.Step.id', 'is', pipeline_step_id] + >>> ] + >>> sg.find("Version", filters, fields) + [{'code': 'scene_010_anim_v001', 'id': 42, 'type': 'Version'}, + {'code': 'scene_010_anim_v002', 'id': 134, 'type': 'Version'}, + {'code': 'bird_v001', 'id': 137, 'type': 'Version'}, + {'code': 'birdAltBlue_v002', 'id': 236, 'type': 'Version'}] + + :param str entity_type: Shotgun entity type to find. + :param list filters: list of filters to apply to the query. + + .. seealso:: :ref:`filter_syntax`, :ref:`combining-related-queries` + + :param list fields: Optional list of fields to include in each entity record returned. + Defaults to ``["id"]``. + + .. seealso:: :ref:`combining-related-queries` + + :param list order: Optional list of dictionaries defining how to order the results of the + query. Each dictionary contains the ``field_name`` to order by and the ``direction`` + to sort:: + + [ + {'field_name':'foo', 'direction':'asc'}, + {'field_name':'bar', 'direction':'desc'} + ] + + Defaults to sorting by ``id`` in ascending order. + :param str filter_operator: Operator to apply to the filters. Supported values are ``"all"`` + and ``"any"``. These are just another way of defining if the query is an AND or OR + query. Defaults to ``"all"``. + :param int limit: Optional limit to the number of entities to return. Defaults to ``0`` which + returns all entities that match. + :param int page: Optional page of results to return. Use this together with the ``limit`` + parameter to control how your query results are paged. Defaults to ``0`` which returns + all entities that match. + :param bool retired_only: Optional boolean when ``True`` will return only entities that have + been retired. Defaults to ``False`` which returns only entities which have not been + retired. There is no option to return both retired and non-retired entities in the + same query. + :param bool include_archived_projects: Optional boolean flag to include entities whose projects + have been archived. Defaults to ``True``. + :param additional_filter_presets: Optional list of presets to further filter the result + set, list has the form:: + + [{ + "preset_name": <preset_name>, + <optional_param1>: <optional_value1>, + ... + }] + + Note that these filters are ANDed together and ANDed with the 'filter' + argument. + + For details on supported presets and the format of this parameter see + :ref:`additional_filter_presets` + :returns: list of dictionaries representing each entity with the requested fields, and the + defaults ``"id"`` and ``"type"`` which are always included. + + .. seealso:: :ref:`entity-fields` + + :rtype: list + """ + + if not isinstance(limit, int) or limit < 0: + raise ValueError("limit parameter must be a positive integer") + + if not isinstance(page, int) or page < 0: + raise ValueError("page parameter must be a positive integer") + + if isinstance(filters, (list, tuple)): + filters = _translate_filters(filters, filter_operator) + elif filter_operator: + # TODO: Not sure if this test is correct, replicated from prev api + raise ShotgunError( + "Deprecated: Use of filter_operator for find() is not valid any more." + " See the documentation on find()" + ) + + if not include_archived_projects: + # This defaults to True on the server (no argument is sent) + # So we only need to check the server version if it is False + self.server_caps.ensure_include_archived_projects() + + if additional_filter_presets: + self.server_caps.ensure_support_for_additional_filter_presets() + + params = self._construct_read_parameters( + entity_type, + fields, + filters, + retired_only, + order, + include_archived_projects, + additional_filter_presets, + ) + + if self.server_caps.ensure_return_image_urls_support(): + params["api_return_image_urls"] = True + + if self.server_caps.ensure_paging_info_without_counts_support(): + paging_info_param = "return_paging_info_without_counts" + else: + paging_info_param = "return_paging_info" + + params[paging_info_param] = False + + if limit and limit <= self.config.records_per_page: + params["paging"]["entities_per_page"] = limit + # If page isn't set and the limit doesn't require pagination, + # then trigger the faster code path. + if page == 0: + page = 1 + + # if page is specified, then only return the page of records requested + if page != 0: + params["paging"]["current_page"] = page + records = self._call_rpc("read", params).get("entities", []) + return self._parse_records(records) + + params[paging_info_param] = True + records = [] + + if self.server_caps.ensure_paging_info_without_counts_support(): + has_next_page = True + while has_next_page: + result = self._call_rpc("read", params) + records.extend(result.get("entities")) + + if limit and len(records) >= limit: + records = records[:limit] + break + + has_next_page = result["paging_info"]["has_next_page"] + params["paging"]["current_page"] += 1 + else: + result = self._call_rpc("read", params) + while result.get("entities"): + records.extend(result.get("entities")) + + if limit and len(records) >= limit: + records = records[:limit] + break + if len(records) == result["paging_info"]["entity_count"]: + break + + params["paging"]["current_page"] += 1 + result = self._call_rpc("read", params) + + return self._parse_records(records)
+ + def _construct_read_parameters( + self, + entity_type, + fields, + filters, + retired_only, + order, + include_archived_projects, + additional_filter_presets, + ): + params = {} + params["type"] = entity_type + params["return_fields"] = fields or ["id"] + params["filters"] = filters + params["return_only"] = (retired_only and "retired") or "active" + params["paging"] = { + "entities_per_page": self.config.records_per_page, + "current_page": 1, + } + + if additional_filter_presets: + params["additional_filter_presets"] = additional_filter_presets + + if include_archived_projects is False: + # Defaults to True on the server, so only pass it if it's False + params["include_archived_projects"] = False + + if order: + sort_list = [] + for sort in order: + if "column" in sort: + # TODO: warn about deprecation of 'column' param name + sort["field_name"] = sort["column"] + sort.setdefault("direction", "asc") + sort_list.append( + {"field_name": sort["field_name"], "direction": sort["direction"]} + ) + params["sorts"] = sort_list + return params + + def _add_project_param(self, params, project_entity): + + if project_entity and self.server_caps.ensure_per_project_customization(): + params["project"] = project_entity + + return params + + def _translate_update_params( + self, entity_type, entity_id, data, multi_entity_update_modes + ): + global SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION + + def optimize_field(field_dict): + if SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION: + return field_dict + return {k: _get_type_and_id_from_value(v) for k, v in field_dict.items()} + + full_fields = self._dict_to_list( + data, + extra_data=self._dict_to_extra_data( + multi_entity_update_modes, "multi_entity_update_mode" + ), + ) + return { + "type": entity_type, + "id": entity_id, + "fields": [optimize_field(field_dict) for field_dict in full_fields], + } + +
[docs] def summarize( + self, + entity_type, + filters, + summary_fields, + filter_operator=None, + grouping=None, + include_archived_projects=True, + ): + """ + Summarize field data returned by a query. + + This provides the same functionality as the summaries in the UI. You can specify one or + more fields to summarize, choose the summary type for each, and optionally group the + results which will return summary information for each group as well as the total for + the query. + + **Example: Count all Assets for a Project** + + >>> sg.summarize(entity_type='Asset', + ... filters = [['project', 'is', {'type':'Project', 'id':4}]], + ... summary_fields=[{'field':'id', 'type':'count'}]) + {'groups': [], 'summaries': {'id': 15}} + + ``summaries`` contains the total summary for the query. Each key is the field summarized + and the value is the result of the summary operation for the entire result set. + + .. note:: + You cannot perform more than one summary on a field at a time, but you can summarize + several different fields in the same call. + + **Example: Count all Assets for a Project, grouped by sg_asset_type** + + >>> sg.summarize(entity_type='Asset', + ... filters=[['project', 'is', {'type': 'Project', 'id': 4}]], + ... summary_fields=[{'field': 'id', 'type': 'count'}], + ... grouping=[{'field': 'sg_asset_type', 'type': 'exact', 'direction': 'asc'}]) + {'groups': [{'group_name': 'Character','group_value': 'Character', 'summaries': {'id': 3}}, + {'group_name': 'Environment','group_value': 'Environment', 'summaries': {'id': 3}}, + {'group_name': 'Matte Painting', 'group_value': 'Matte Painting', 'summaries': {'id': 1}}, + {'group_name': 'Prop', 'group_value': 'Prop', 'summaries': {'id': 4}}, + {'group_name': 'Vehicle', 'group_value': 'Vehicle', 'summaries': {'id': 4}}], + 'summaries': {'id': 15}} + + - ``summaries`` contains the total summary for the query. + - ``groups`` contains the summary for each group. + + - ``group_name`` is the display name for the group. + - ``group_value`` is the actual value of the grouping value. This is often the same as + ``group_name`` but in the case when grouping by entity, the ``group_name`` may be + ``PuppyA`` and the group_value would be + ``{'type':'Asset','id':922,'name':'PuppyA'}``. + - ``summaries`` contains the summary calculation dict for each field requested. + + **Example: Count all Tasks for a Sequence and find the latest due_date** + + >>> sg.summarize(entity_type='Task', + ... filters = [ + ... ['entity.Shot.sg_sequence', 'is', {'type':'Sequence', 'id':2}], + ... ['sg_status_list', 'is_not', 'na']], + ... summary_fields=[{'field':'id', 'type':'count'}, + ... {'field':'due_date','type':'latest'}]) + {'groups': [], 'summaries': {'due_date': '2013-07-05', 'id': 30}} + + This shows that the there are 30 Tasks for Shots in the Sequence and the latest ``due_date`` + of any Task is ``2013-07-05``. + + **Example: Count all Tasks for a Sequence, find the latest due_date and group by Shot** + + >>> sg.summarize(entity_type='Task', + ... filters = [ + ... ['entity.Shot.sg_sequence', 'is', {'type': 'Sequence', 'id': 2}], + ... ['sg_status_list', 'is_not', 'na']], + ... summary_fields=[{'field': 'id', 'type': 'count'}, {'field': 'due_date', 'type': 'latest'}], + ... grouping=[{'field': 'entity', 'type': 'exact', 'direction': 'asc'}])) + {'groups': [{'group_name': 'shot_010', + 'group_value': {'id': 2, 'name': 'shot_010', 'type': 'Shot', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-06-18', 'id': 10}}, + {'group_name': 'shot_020', + 'group_value': {'id': 3, 'name': 'shot_020', 'type': 'Shot', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-06-28', 'id': 10}}, + {'group_name': 'shot_030', + 'group_value': {'id': 4, 'name': 'shot_030', 'type': 'Shot', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-07-05', 'id': 10}}], + 'summaries': {'due_date': '2013-07-05', 'id': 30}} + + This shows that the there are 30 Tasks for Shots in the Sequence and the latest ``due_date`` + of any Task is ``2013-07-05``. Because the summary is grouped by ``entity``, we can also + see the summaries for each Shot returned. Each Shot has 10 Tasks and the latest ``due_date`` + for each Shot. The difference between ``group_name`` and ``group_value`` is highlighted in + this example as the name of the Shot is different from its value. + + **Example: Count all Tasks for a Sequence, find the latest due_date, group by Shot and + Pipeline Step** + + >>> sg.summarize(entity_type='Task', + ... filters = [ + ... ['entity.Shot.sg_sequence', 'is', {'type': 'Sequence', 'id': 2}], + ... ['sg_status_list', 'is_not', 'na']], + ... summary_fields=[{'field': 'id', 'type': 'count'}, + ... {'field': 'due_date', 'type': 'latest'}], + ... grouping=[{'field': 'entity', 'type': 'exact', 'direction': 'asc'}, + ... {'field': 'step', 'type': 'exact', 'direction': 'asc'}]) + {'groups': [{'group_name': 'shot_010', + 'group_value': {'id': 2, 'name': 'shot_010', 'type': 'Shot', 'valid': 'valid'}, + 'groups': [{'group_name': 'Client', + 'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-05-04', 'id': 1}}, + {'group_name': 'Online', + 'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-05-05', 'id': 1}}, + ... + ... truncated for brevity + ... + {'group_name': 'Comp', + 'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-06-18', 'id': 1}}], + 'summaries': {'due_date': '2013-06-18', 'id': 10}}, + {'group_name': 'shot_020', + 'group_value': {'id': 3, 'name': 'shot_020', 'type': 'Shot', 'valid': 'valid'}, + 'groups': [{'group_name': 'Client', + 'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-05-15', 'id': 1}}, + {'group_name': 'Online', + 'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-05-16', 'id': 1}}, + ... + ... truncated for brevity + ... + {'group_name': 'Comp', + 'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-06-28', 'id': 1}}], + 'summaries': {'due_date': '2013-06-28', 'id': 10}}, + {'group_name': 'shot_030', + 'group_value': {'id': 4, 'name': 'shot_030', 'type': 'Shot', 'valid': 'valid'}, + 'groups': [{'group_name': 'Client', + 'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-05-20', 'id': 1}}, + {'group_name': 'Online', + 'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-05-21', 'id': 1}}, + ... + ... truncated for brevity + ... + {'group_name': 'Comp', + 'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'}, + 'summaries': {'due_date': '2013-07-05', 'id': 1}}], + 'summaries': {'due_date': '2013-07-05', 'id': 10}}], + 'summaries': {'due_date': '2013-07-05', 'id': 30}} + + When grouping my more than one field, the grouping structure is repeated for each sub-group + and summary values are returned for each group on each level. + + :param str entity_type: The entity type to summarize + :param list filters: A list of conditions used to filter the find query. Uses the same + syntax as :meth:`~shotgun_api3.Shotgun.find` method. + :param list summary_fields: A list of dictionaries with the following keys: + + :field: The internal Shotgun field name you are summarizing. + :type: The type of summary you are performing on the field. Summary types can be any of + ``record_count``, ``count``, ``sum``, ``maximum``, ``minimum``, ``average``, + ``earliest``, ``latest``, ``percentage``, ``status_percentage``, ``status_list``, + ``checked``, ``unchecked`` depending on the type of field you're summarizing. + + :param str filter_operator: Operator to apply to the filters. Supported values are ``"all"`` + and ``"any"``. These are just another way of defining if the query is an AND or OR + query. Defaults to ``"all"``. + :param list grouping: Optional list of dicts with the following keys: + + :field: a string indicating the internal Shotgun field name on ``entity_type`` to + group results by. + :type: A string indicating the type of grouping to perform for each group. + Valid types depend on the type of field you are grouping on and can be one of + ``exact``, ``tens``, ``hundreds``, ``thousands``, ``tensofthousands``, + ``hundredsofthousands``, ``millions``, ``day``, ``week``, ``month``, + ``quarter``,``year``, ``clustered_date``, ``oneday``, ``fivedays``, + ``entitytype``, ``firstletter``. + :direction: A string that sets the order to display the grouped results. Valid + options are ``asc`` and ``desc``. Defaults to ``asc``. + + :returns: dictionary containing grouping and summaries keys. + :rtype: dict + """ + + if not isinstance(grouping, list) and grouping is not None: + msg = "summarize() 'grouping' parameter must be a list or None" + raise ValueError(msg) + + if isinstance(filters, (list, tuple)): + filters = _translate_filters(filters, filter_operator) + + if not include_archived_projects: + # This defaults to True on the server (no argument is sent) + # So we only need to check the server version if it is False + self.server_caps.ensure_include_archived_projects() + + params = {"type": entity_type, "summaries": summary_fields, "filters": filters} + + if include_archived_projects is False: + # Defaults to True on the server, so only pass it if it's False + params["include_archived_projects"] = False + + if grouping is not None: + params["grouping"] = grouping + + records = self._call_rpc("summarize", params) + return records
+ +
[docs] def create(self, entity_type, data, return_fields=None): + """ + Create a new entity of the specified ``entity_type``. + + >>> data = { + ... "project": {"type": "Project", "id": 161}, + ... "sg_sequence": {"type": "Sequence", "id": 109}, + ... "code": "001_100", + ... 'sg_status_list': "ip" + ... } + >>> sg.create('Shot', data) + {'code': '001_100', + 'id': 2557, + 'project': {'id': 161, 'name': 'Pied Piper', 'type': 'Project'}, + 'sg_sequence': {'id': 109, 'name': 'Sequence 001', 'type': 'Sequence'}, + 'sg_status_list': 'ip', + 'type': 'Shot'} + + :param str entity_type: Shotgun entity type to create. + :param dict data: Dictionary of fields and corresponding values to set on the new entity. If + ``image`` or ``filmstrip_image`` fields are provided, the file path will be uploaded + to the server automatically. + :param list return_fields: Optional list of additional field values to return from the new + entity. Defaults to ``id`` field. + + .. seealso:: :ref:`combining-related-queries` + + :returns: Shotgun entity dictionary containing the field/value pairs of all of the fields + set from the ``data`` parameter as well as the defaults ``type`` and ``id``. If any + additional fields were provided using the ``return_fields`` parameter, these would be + included as well. + + .. seealso:: :ref:`entity-fields` + + :rtype: dict + """ + + data = data.copy() + if not return_fields: + return_fields = ["id"] + + upload_image = None + if "image" in data: + upload_image = data.pop("image") + + upload_filmstrip_image = None + if "filmstrip_image" in data: + if not self.server_caps.version or self.server_caps.version < (3, 1, 0): + raise ShotgunError( + "Filmstrip thumbnail support requires server version 3.1 or " + "higher, server is %s" % (self.server_caps.version,) + ) + upload_filmstrip_image = data.pop("filmstrip_image") + + params = { + "type": entity_type, + "fields": self._dict_to_list(data), + "return_fields": return_fields, + } + + record = self._call_rpc("create", params, first=True) + result = self._parse_records(record)[0] + + if upload_image: + self.upload_thumbnail(entity_type, result["id"], upload_image) + image = self.find_one( + entity_type, [["id", "is", result.get("id")]], fields=["image"] + ) + result["image"] = image.get("image") + + if upload_filmstrip_image: + self.upload_filmstrip_thumbnail( + entity_type, result["id"], upload_filmstrip_image + ) + filmstrip = self.find_one( + entity_type, + [["id", "is", result.get("id")]], + fields=["filmstrip_image"], + ) + result["filmstrip_image"] = filmstrip.get("filmstrip_image") + + return result
+ +
[docs] def update(self, entity_type, entity_id, data, multi_entity_update_modes=None): + """ + Update the specified entity with the supplied data. + + >>> shots = [ + ... {'type':'Shot', 'id':'40435'}, + ... {'type':'Shot', 'id':'40438'}, + ... {'type':'Shot', 'id':'40441'}] + >>> data = { + ... 'shots': shots_asset_is_in, + ... 'sg_status_list':'rev'} + >>> sg.update("Asset", 55, data) + {'type': 'Shot', + 'id': 55, + 'sg_status_`list`': 'rev', + 'shots': [{'id': 40435, 'name': '100_010', 'type': 'Shot', 'valid': 'valid'}, + {'id': 40438, 'name': '100_040', 'type': 'Shot', 'valid': 'valid'}, + {'id': 40441, 'name': '100_070', 'type': 'Shot', 'valid': 'valid'}] + } + + :param str entity_type: Entity type to update. + :param id entity_id: id of the entity to update. + :param dict data: key/value pairs where key is the field name and value is the value to set + for that field. This method does not restrict the updating of fields hidden in the web + UI via the Project Tracking Settings panel. + :param dict multi_entity_update_modes: Optional dict indicating what update mode to use + when updating a multi-entity link field. The keys in the dict are the fields to set + the mode for, and the values from the dict are one of ``set``, ``add``, or ``remove``. + Defaults to ``set``. + :: + + multi_entity_update_modes={"shots": "add", "assets": "remove"} + + :returns: Dictionary of the fields updated, with the default keys `type` and `id` added as well. + :rtype: dict + """ + + data = data.copy() + upload_image = None + if "image" in data and data["image"] is not None: + upload_image = data.pop("image") + upload_filmstrip_image = None + if "filmstrip_image" in data: + if not self.server_caps.version or self.server_caps.version < (3, 1, 0): + raise ShotgunError( + "Filmstrip thumbnail support requires server version 3.1 or " + "higher, server is %s" % (self.server_caps.version,) + ) + upload_filmstrip_image = data.pop("filmstrip_image") + + if data: + params = self._translate_update_params( + entity_type, entity_id, data, multi_entity_update_modes + ) + record = self._call_rpc("update", params) + result = self._parse_records(record)[0] + else: + result = {"id": entity_id, "type": entity_type} + + if upload_image: + self.upload_thumbnail(entity_type, entity_id, upload_image) + image = self.find_one( + entity_type, [["id", "is", result.get("id")]], fields=["image"] + ) + result["image"] = image.get("image") + + if upload_filmstrip_image: + self.upload_filmstrip_thumbnail( + entity_type, result["id"], upload_filmstrip_image + ) + filmstrip = self.find_one( + entity_type, + [["id", "is", result.get("id")]], + fields=["filmstrip_image"], + ) + result["filmstrip_image"] = filmstrip.get("filmstrip_image") + + return result
+ +
[docs] def delete(self, entity_type, entity_id): + """ + Retire the specified entity. + + Entities in Shotgun are not "deleted" destructively, they are instead, "retired". This + means they are placed in the trash where they are no longer accessible to users. + + The entity can be brought back to life using :meth:`~shotgun_api3.Shotgun.revive`. + + >>> sg.delete("Shot", 2557) + True + + :param str entity_type: Shotgun entity type to delete. + :param id entity_id: ``id`` of the entity to delete. + :returns: ``True`` if the entity was deleted, ``False`` otherwise (for example, if the + entity was already deleted). + :rtype: bool + :raises: :class:`Fault` if entity does not exist (deleted or not). + """ + + params = {"type": entity_type, "id": entity_id} + + return self._call_rpc("delete", params)
+ +
[docs] def revive(self, entity_type, entity_id): + """ + Revive an entity that has previously been deleted. + + >>> sg.revive("Shot", 860) + True + + :param str entity_type: Shotgun entity type to revive. + :param int entity_id: id of the entity to revive. + :returns: ``True`` if the entity was revived, ``False`` otherwise (e.g. if the + entity is not currently retired). + :rtype: bool + """ + + params = {"type": entity_type, "id": entity_id} + + return self._call_rpc("revive", params)
+ +
[docs] def batch(self, requests): + """ + Make a batch request of several :meth:`~shotgun_api3.Shotgun.create`, + :meth:`~shotgun_api3.Shotgun.update`, and :meth:`~shotgun_api3.Shotgun.delete` calls. + + All requests are performed within a transaction, so either all will complete or none will. + + Ex. Make a bunch of shots:: + + batch_data = [] + for i in range(1,100): + data = { + "code": "shot_%04d" % i, + "project": project + } + batch_data.append({"request_type": "create", "entity_type": "Shot", "data": data}) + sg.batch(batch_data) + + Example output:: + + [{'code': 'shot_0001', + 'type': 'Shot', + 'id': 3624, + 'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}}, + ... + ... and a bunch more ... + ... + {'code': 'shot_0099', + 'type': 'Shot', + 'id': 3722, + 'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}}] + + Ex. All three types of requests in one batch:: + + batch_data = [ + {"request_type": "create", "entity_type": "Shot", "data": {"code": "New Shot 1", "project": project}}, + {"request_type": "update", "entity_type": "Shot", "entity_id": 3624, "data": {"code": "Changed 1"}}, + {"request_type": "delete", "entity_type": "Shot", "entity_id": 3624} + ] + sg.batch(batch_data) + + Example output:: + + [{'code': 'New Shot 1', 'type': 'Shot', 'id': 3723, + 'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}}, + {'code': 'Changed 1', 'type': 'Shot', 'id': 3624}, + True] + + :param list requests: A list of dict's of the form which have a request_type key and also + specifies: + + - create: ``entity_type``, data dict of fields to set + - update: ``entity_type``, ``entity_id``, data dict of fields to set, + and optionally ``multi_entity_update_modes`` + - delete: ``entity_type`` and entity_id + :returns: A list of values for each operation. Create and update requests return a dict of + the fields updated. Delete requests return ``True`` if the entity was deleted. + :rtype: list + """ + + if not isinstance(requests, list): + raise ShotgunError( + "batch() expects a list. Instead was sent a %s" % type(requests) + ) + + # If we have no requests, just return an empty list immediately. + # Nothing to process means nothing to get results of. + if len(requests) == 0: + return [] + + calls = [] + + def _required_keys(message, required_keys, data): + missing = set(required_keys) - set(data.keys()) + if missing: + raise ShotgunError( + "%s missing required key: %s. " + "Value was: %s." % (message, ", ".join(missing), data) + ) + + for req in requests: + _required_keys("Batched request", ["request_type", "entity_type"], req) + request_params = { + "request_type": req["request_type"], + "type": req["entity_type"], + } + + if req["request_type"] == "create": + _required_keys("Batched create request", ["data"], req) + request_params["fields"] = self._dict_to_list(req["data"]) + request_params["return_fields"] = req.get("return_fields") or ["id"] + elif req["request_type"] == "update": + _required_keys("Batched update request", ["entity_id", "data"], req) + request_params["id"] = req["entity_id"] + request_params["fields"] = self._dict_to_list( + req["data"], + extra_data=self._dict_to_extra_data( + req.get("multi_entity_update_modes"), "multi_entity_update_mode" + ), + ) + if "multi_entity_update_mode" in req: + request_params["multi_entity_update_mode"] = req[ + "multi_entity_update_mode" + ] + elif req["request_type"] == "delete": + _required_keys("Batched delete request", ["entity_id"], req) + request_params["id"] = req["entity_id"] + else: + raise ShotgunError( + "Invalid request_type '%s' for batch" % (req["request_type"]) + ) + calls.append(request_params) + records = self._call_rpc("batch", calls) + return self._parse_records(records)
+ +
[docs] def work_schedule_read(self, start_date, end_date, project=None, user=None): + """ + Return the work day rules for a given date range. + + .. versionadded:: 3.0.9 + Requires Shotgun server v3.2.0+ + + This returns the defined WorkDayRules between the ``start_date`` and ``end_date`` inclusive + as a dict where the key is the date and the value is another dict describing the rule for + that date. + + Rules are represented by a dict with the following keys: + + :description: the description entered into the work day rule exception if applicable. + :reason: one of six options: + + - STUDIO_WORK_WEEK: standard studio schedule applies + - STUDIO_EXCEPTION: studio-wide exception applies + - PROJECT_WORK_WEEK: standard project schedule applies + - PROJECT_EXCEPTION: project-specific exception applies + - USER_WORK_WEEK: standard user work week applies + - USER_EXCEPTION: user-specific exception applies + + :working: boolean indicating whether it is a "working" day or not. + + >>> sg.work_schedule_read("2015-12-21", "2015-12-25") + {'2015-12-21': {'description': None, + 'reason': 'STUDIO_WORK_WEEK', + 'working': True}, + '2015-12-22': {'description': None, + 'reason': 'STUDIO_WORK_WEEK', + 'working': True}, + '2015-12-23': {'description': None, + 'reason': 'STUDIO_WORK_WEEK', + 'working': True}, + '2015-12-24': {'description': 'Closed for Christmas Eve', + 'reason': 'STUDIO_EXCEPTION', + 'working': False}, + '2015-12-25': {'description': 'Closed for Christmas', + 'reason': 'STUDIO_EXCEPTION', + 'working': False}} + + + :param str start_date: Start date of date range. ``YYYY-MM-DD`` + :param str end_date: End date of date range. ``YYYY-MM-DD`` + :param dict project: Optional Project entity to query `WorkDayRules` for. + :param dict user: Optional HumanUser entity to query WorkDayRules for. + :returns: Complex dict containing each date and the WorkDayRule defined for that date + between the ``start_date`` and ``end date`` inclusive. See above for details. + :rtype: dict + """ + + if not self.server_caps.version or self.server_caps.version < (3, 2, 0): + raise ShotgunError( + "Work schedule support requires server version 3.2 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + if not isinstance(start_date, str) or not isinstance(end_date, str): + raise ShotgunError( + "The start_date and end_date arguments must be strings in YYYY-MM-DD format" + ) + + params = dict( + start_date=start_date, end_date=end_date, project=project, user=user + ) + + return self._call_rpc("work_schedule_read", params)
+ +
[docs] def work_schedule_update( + self, + date, + working, + description=None, + project=None, + user=None, + recalculate_field=None, + ): + """ + Update the work schedule for a given date. + + .. versionadded:: 3.0.9 + Requires Shotgun server v3.2.0+ + + If neither ``project`` nor ``user`` are passed in, the studio work schedule will be updated. + ``project`` and ``user`` can only be used exclusively of each other. + + >>> sg.work_schedule_update ("2015-12-31", working=False, + ... description="Studio closed for New Years Eve", project=None, + ... user=None, recalculate_field=None) + {'date': '2015-12-31', + 'description': "Studio closed for New Years Eve", + 'project': None, + 'user': None, + 'working': False} + + :param str date: Date of WorkDayRule to update. ``YYY-MM-DD`` + :param bool working: Indicates whether the day is a working day or not. + :param str description: Optional reason for time off. + :param dict project: Optional Project entity to assign the rule to. Cannot be used with the + ``user`` param. + :param dict user: Optional HumanUser entity to assign the rule to. Cannot be used with the + ``project`` param. + :param str recalculate_field: Optional schedule field that will be recalculated on Tasks + when they are affected by a change in working schedule. Options are ``due_date`` or + ``duration``. Defaults to the value set in the Shotgun web application's Site + Preferences. + :returns: dict containing key/value pairs for each value of the work day rule updated. + :rtype: dict + """ + + if not self.server_caps.version or self.server_caps.version < (3, 2, 0): + raise ShotgunError( + "Work schedule support requires server version 3.2 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + if not isinstance(date, str): + raise ShotgunError("The date argument must be string in YYYY-MM-DD format") + + params = dict( + date=date, + working=working, + description=description, + project=project, + user=user, + recalculate_field=recalculate_field, + ) + + return self._call_rpc("work_schedule_update", params)
+ +
[docs] def follow(self, user, entity): + """ + Add the entity to the user's followed entities. + + If the user is already following the entity, the method will succeed but nothing will be + changed on the server-side. + + >>> sg.follow({"type": "HumanUser", "id": 42}, {"type": "Shot", "id": 2050}) + {'followed': True, 'user': {'type': 'HumanUser', 'id': 42}, + 'entity': {'type': 'Shot', 'id': 2050}} + + :param dict user: User entity that will follow the entity. + :param dict entity: Shotgun entity to be followed. + :returns: dict with ``"followed": True`` as well as key/values for the params that were + passed in. + :rtype: dict + """ + + if not self.server_caps.version or self.server_caps.version < (5, 1, 22): + raise ShotgunError( + "Follow support requires server version 5.2 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + params = dict(user=user, entity=entity) + + return self._call_rpc("follow", params)
+ +
[docs] def unfollow(self, user, entity): + """ + Remove entity from the user's followed entities. + + This does nothing if the user is not following the entity. + + >>> sg.unfollow({"type": "HumanUser", "id": 42}, {"type": "Shot", "id": 2050}) + {'entity': {'type': 'Shot', 'id': 2050}, 'user': {'type': 'HumanUser', 'id': 42}, + 'unfollowed': True} + + :param dict user: User entity that will unfollow the entity. + :param dict entity: Entity to be unfollowed + :returns: dict with ``"unfollowed": True`` as well as key/values for the params that were + passed in. + :rtype: dict + """ + + if not self.server_caps.version or self.server_caps.version < (5, 1, 22): + raise ShotgunError( + "Follow support requires server version 5.2 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + params = dict(user=user, entity=entity) + + return self._call_rpc("unfollow", params)
+ +
[docs] def followers(self, entity): + """ + Return all followers for an entity. + + >>> sg.followers({"type": "Shot", "id": 2050}) + [{'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Richard Hendriks', + 'id': 42}, + {'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Bertram Gilfoyle', + 'id': 33}, + {'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Dinesh Chugtai', + 'id': 57}] + + :param dict entity: Entity to find followers of. + :returns: list of dicts representing each user following the entity + :rtype: list + :versionadded: + """ + + if not self.server_caps.version or self.server_caps.version < (5, 1, 22): + raise ShotgunError( + "Follow support requires server version 5.2 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + params = dict(entity=entity) + + return self._call_rpc("followers", params)
+ +
[docs] def following(self, user, project=None, entity_type=None): + """ + Return all entity instances a user is following. + + Optionally, a project and/or entity_type can be supplied to restrict returned results. + + >>> user = {"type": "HumanUser", "id": 1234} + >>> project = {"type": "Project", "id": 1234} + >>> entity_type = "Task" + >>> sg.following(user, project=project, entity_type=entity_type) + [{"type":"Task", "id":1}, + {"type":"Task", "id":2}, + {"type":"Task", "id":3}] + + :param dict user: Find what this person is following. + :param dict project: Optional filter to only return results from a specific project. + :param str entity_type: Optional filter to only return results from one entity type. + :returns: list of dictionaries, each containing entity type & id's being followed. + :rtype: list + """ + + self.server_caps.ensure_user_following_support() + + params = {"user": user} + if project: + params["project"] = project + if entity_type: + params["entity_type"] = entity_type + + return self._call_rpc("following", params)
+ +
[docs] def schema_entity_read(self, project_entity=None): + """ + Return all active entity types, their display names, and their visibility. + + If the project parameter is specified, the schema visibility for the given project is + being returned. If the project parameter is omitted or set to ``None``, a full listing is + returned where per-project entity type visibility settings are not considered. + + >>> sg.schema_entity_read() + {'ActionMenuItem': {'name': {'editable': False, 'value': 'Action Menu Item'}, + 'visible': {'editable': False, 'value': True}}, + 'ApiUser': {'name': {'editable': False, 'value': 'Script'}, + 'visible': {'editable': False, 'value': True}}, + 'AppWelcomeUserConnection': {'name': {'editable': False, + 'value': 'App Welcome User Connection'}, + 'visible': {'editable': False, 'value': True}}, + 'Asset': {'name': {'editable': False, 'value': 'Asset'}, + 'visible': {'editable': False, 'value': True}}, + 'AssetAssetConnection': {'name': {'editable': False, + 'value': 'Asset Asset Connection'}, + 'visible': {'editable': False, 'value': True}}, + '...' + } + + :param dict project_entity: Optional Project entity specifying which project to return + the listing for. If omitted or set to ``None``, per-project visibility settings are + not taken into consideration and the global list is returned. Example: + ``{'type': 'Project', 'id': 3}`` + :returns: dict of Entity Type to dict containing the display name. + :rtype: dict + + .. note:: + The returned display names for this method will be localized when the ``localize`` Shotgun config property is set to ``True``. See :ref:`localization` for more information. + """ + + params = {} + + params = self._add_project_param(params, project_entity) + + if params: + return self._call_rpc("schema_entity_read", params) + else: + return self._call_rpc("schema_entity_read", None)
+ +
[docs] def schema_read(self, project_entity=None): + """ + Get the schema for all fields on all entities. + + .. note:: + If ``project_entity`` is not specified, everything is reported as visible. + + >>> sg.schema_read() + {'ActionMenuItem': {'created_at': {'data_type': {'editable': False, 'value': 'date_time'}, + 'description': {'editable': True, 'value': ''}, + 'editable': {'editable': False, 'value': False}, + 'entity_type': {'editable': False, 'value': 'ActionMenuItem'}, + 'mandatory': {'editable': False, 'value': False}, + 'name': {'editable': True, 'value': 'Date Created'}, + 'properties': {'default_value': {'editable': False, 'value': None}, + 'summary_default': {'editable': True, 'value': 'none'}}, + 'unique': {'editable': False, 'value': False}, + 'visible': {'editable': False, 'value': True}}, + 'created_by': {'data_type': {'editable': False,'value': 'entity'}, + 'description': {'editable': True,'value': ''}, + 'editable': {'editable': False,'value': False}, + 'entity_type': {'editable': False,'value': 'ActionMenuItem'}, + 'mandatory': {'editable': False,'value': False}, + 'name': {'editable': True,'value': 'Created by'}, + 'properties': {'default_value': {'editable': False,'value': None}, + 'summary_default': {'editable': True,'value': 'none'}, + 'valid_types': {'editable': True,'value': + ['HumanUser','ApiUser']}}, + 'unique': {'editable': False,'value': False}, + 'visible': {'editable': False,'value': True}}, + ... + ... + ... + ... + 'Version': {'client_approved': {'data_type': {'editable': False,'value': 'checkbox'}, + 'description': {'editable': True,'value': ''}, + 'editable': {'editable': False,'value': True}, + 'entity_type': {'editable': False,'value': 'Version'}, + 'mandatory': {'editable': False,'value': False}, + 'name': {'editable': True,'value': 'Client Approved'}, + 'properties': {'default_value': {'editable': False,'value': False}, + 'summary_default': {'editable': False,'value': 'none'}}, + 'unique': {'editable': False,'value': False}, + 'visible': {'editable': False,'value': True}}, + ... + ... + ... + ... + } + + :param dict project_entity: Optional, Project entity specifying which project to return + the listing for. If omitted or set to ``None``, per-project visibility settings are + not taken into consideration and the global list is returned. Example: + ``{'type': 'Project', 'id': 3}``. Defaults to ``None``. + :returns: A nested dict object containing a key/value pair for all fields of all entity + types. Properties that are ``'editable': True``, can be updated using the + :meth:`~shotgun_api3.Shotgun.schema_field_update` method. + :rtype: dict + + .. note:: + The returned display names for this method will be localized when the ``localize`` Shotgun config property is set to ``True``. See :ref:`localization` for more information. + """ + + params = {} + + params = self._add_project_param(params, project_entity) + + if params: + return self._call_rpc("schema_read", params) + else: + return self._call_rpc("schema_read", None)
+ +
[docs] def schema_field_read(self, entity_type, field_name=None, project_entity=None): + """ + Get schema for all fields on the specified entity type or just the field name specified + if provided. + + .. note:: + Unlike how the results of a :meth:`~shotgun_api3.Shotgun.find` can be pumped into a + :meth:`~shotgun_api3.Shotgun.create` or :meth:`~shotgun_api3.Shotgun.update`, the + results of :meth:`~shotgun_api3.Shotgun.schema_field_read` are not compatible with + the format used for :meth:`~shotgun_api3.Shotgun.schema_field_create` or + :meth:`~shotgun_api3.Shotgun.schema_field_update`. If you need to pipe the results + from :meth:`~shotgun_api3.Shotgun.schema_field_read` into a + :meth:`~shotgun_api3.Shotgun.schema_field_create` or + :meth:`~shotgun_api3.Shotgun.schema_field_update`, you will need to reformat the + data in your script. + + .. note:: + If you don't specify a ``project_entity``, everything is reported as visible. + + .. note:: + The returned display names for this method will be localized when the ``localize`` Shotgun config property is set to ``True``. See :ref:`localization` for more information. + + >>> sg.schema_field_read('Asset', 'shots') + {'shots': {'data_type': {'editable': False, 'value': 'multi_entity'}, + 'description': {'editable': True, 'value': ''}, + 'editable': {'editable': False, 'value': True}, + 'entity_type': {'editable': False, 'value': 'Asset'}, + 'mandatory': {'editable': False, 'value': False}, + 'name': {'editable': True, 'value': 'Shots'}, + 'properties': {'default_value': {'editable': False, + 'value': None}, + 'summary_default': {'editable': True, + 'value': 'none'}, + 'valid_types': {'editable': True, + 'value': ['Shot']}}, + 'unique': {'editable': False, 'value': False}, + 'visible': {'editable': False, 'value': True}}} + + :param str entity_type: Entity type to get the schema for. + :param str field_name: Optional internal Shotgun name of the field to get the schema + definition for. If this parameter is excluded or set to ``None``, data structures of + all fields will be returned. Defaults to ``None``. Example: ``sg_temp_field``. + :param dict project_entity: Optional Project entity specifying which project to return + the listing for. If omitted or set to ``None``, per-project visibility settings are + not taken into consideration and the global list is returned. Example: + ``{'type': 'Project', 'id': 3}`` + :returns: a nested dict object containing a key/value pair for the ``field_name`` specified + and its properties, or if no field_name is specified, for all the fields of the + ``entity_type``. Properties that are ``'editable': True``, can be updated using the + :meth:`~shotgun_api3.Shotgun.schema_field_update` method. + :rtype: dict + """ + + params = { + "type": entity_type, + } + + if field_name: + params["field_name"] = field_name + + params = self._add_project_param(params, project_entity) + + return self._call_rpc("schema_field_read", params)
+ +
[docs] def schema_field_create( + self, entity_type, data_type, display_name, properties=None + ): + """ + Create a field for the specified entity type. + + .. note:: + If the internal Shotgun field name computed from the provided ``display_name`` already + exists, the internal Shotgun field name will automatically be appended with ``_1`` in + order to create a unique name. The integer suffix will be incremented by 1 until a + unique name is found. + + >>> properties = {"summary_default": "count", "description": "Complexity breakdown of Asset"} + >>> sg.schema_field_create("Asset", "text", "Complexity", properties) + 'sg_complexity' + + :param str entity_type: Entity type to add the field to. + :param str data_type: Shotgun data type for the new field. + :param str display_name: Specifies the display name of the field you are creating. The + system name will be created from this display name and returned upon successful + creation. + :param dict properties: Dict of valid properties for the new field. Use this to specify + other field properties such as the 'description' or 'summary_default'. + :returns: The internal Shotgun name for the new field, this is different to the + ``display_name`` parameter passed in. + :rtype: str + """ + + params = { + "type": entity_type, + "data_type": data_type, + "properties": [{"property_name": "name", "value": display_name}], + } + params["properties"].extend( + self._dict_to_list(properties, key_name="property_name", value_name="value") + ) + + return self._call_rpc("schema_field_create", params)
+ +
[docs] def schema_field_update( + self, entity_type, field_name, properties, project_entity=None + ): + """ + Update the properties for the specified field on an entity. + + .. note:: + Although the property name may be the key in a nested dictionary, like + 'summary_default', it is treated no differently than keys that are up + one level, like 'description'. + + >>> properties = {"name": "Test Number Field Renamed", "summary_default": "sum", + ... "description": "this is only a test"} + >>> sg.schema_field_update("Asset", "sg_test_number", properties) + True + + :param entity_type: Entity type of field to update. + :param field_name: Internal Shotgun name of the field to update. + :param properties: Dictionary with key/value pairs where the key is the property to be + updated and the value is the new value. + :param dict project_entity: Optional Project entity specifying which project to modify the + ``visible`` property for. If ``visible`` is present in ``properties`` and + ``project_entity`` is not set, an exception will be raised. Example: + ``{'type': 'Project', 'id': 3}`` + :returns: ``True`` if the field was updated. + + .. note:: + The ``project_entity`` parameter can only affect the state of the ``visible`` property + and has no impact on other properties. + + :rtype: bool + """ + + params = { + "type": entity_type, + "field_name": field_name, + "properties": [ + {"property_name": k, "value": v} + for k, v in six.iteritems((properties or {})) + ], + } + params = self._add_project_param(params, project_entity) + return self._call_rpc("schema_field_update", params)
+ +
[docs] def schema_field_delete(self, entity_type, field_name): + """ + Delete the specified field from the entity type. + + >>> sg.schema_field_delete("Asset", "sg_temp_field") + True + + :param str entity_type: Entity type to delete the field from. + :param str field_name: Internal Shotgun name of the field to delete. + :returns: ``True`` if the field was deleted. + :rtype: bool + """ + + params = {"type": entity_type, "field_name": field_name} + + return self._call_rpc("schema_field_delete", params)
+ +
[docs] def add_user_agent(self, agent): + """ + Add agent to the user-agent header. + + Appends agent to the user-agent string sent with every API request. + + >>> sg.add_user_agent("my_tool 1.0") + + :param str agent: string to append to user-agent. + """ + self._user_agents.append(agent)
+ +
[docs] def reset_user_agent(self): + """ + Reset user agent to the default value. + + Example default user-agent:: + + shotgun-json (3.0.17); Python 2.6 (Mac); ssl OpenSSL 1.0.2d 9 Jul 2015 (validate) + + """ + ua_platform = "Unknown" + if self.client_caps.platform is not None: + ua_platform = self.client_caps.platform.capitalize() + + # create ssl validation string based on settings + validation_str = "validate" + if self.config.no_ssl_validation: + validation_str = "no-validate" + + self._user_agents = [ + "shotgun-json (%s)" % __version__, + "Python %s (%s)" % (self.client_caps.py_version, ua_platform), + "ssl %s (%s)" % (self.client_caps.ssl_version, validation_str), + ]
+ +
[docs] def set_session_uuid(self, session_uuid): + """ + Set the browser session_uuid in the current Shotgun API instance. + + When this is set, any events generated by the API will include the ``session_uuid`` value + on the corresponding EventLogEntries. If there is a current browser session open with + this ``session_uuid``, the browser will display updates for these events. + + >>> sg.set_session_uuid("5a1d49b0-0c69-11e0-a24c-003048d17544") + + :param str session_uuid: The uuid of the browser session to be updated. + """ + + self.config.session_uuid = session_uuid + return
+ +
[docs] def share_thumbnail( + self, + entities, + thumbnail_path=None, + source_entity=None, + filmstrip_thumbnail=False, + **kwargs, + ): + """ + Associate a thumbnail with more than one Shotgun entity. + + .. versionadded:: 3.0.9 + Requires Shotgun server v4.0.0+ + + Share the thumbnail from between entities without requiring uploading the thumbnail file + multiple times. You can use this in two ways: + + 1) Upload an image to set as the thumbnail on multiple entities. + 2) Update multiple entities to point to an existing entity's thumbnail. + + .. note:: + When sharing a filmstrip thumbnail, it is required to have a static thumbnail in + place before the filmstrip will be displayed in the Shotgun web UI. + If the :ref:`thumbnail is still processing and is using a placeholder + <interpreting_image_field_strings>`, this method will error. + + Simple use case: + + >>> thumb = '/data/show/ne2/100_110/anim/01.mlk-02b.jpg' + >>> e = [{'type': 'Version', 'id': 123}, {'type': 'Version', 'id': 456}] + >>> sg.share_thumbnail(entities=e, thumbnail_path=thumb) + 4271 + + >>> e = [{'type': 'Version', 'id': 123}, {'type': 'Version', 'id': 456}] + >>> sg.share_thumbnail(entities=e, source_entity={'type':'Version', 'id': 789}) + 4271 + + :param list entities: The entities to update to point to the shared thumbnail provided in + standard entity dict format:: + + [{'type': 'Version', 'id': 123}, + {'type': 'Version', 'id': 456}] + :param str thumbnail_path: The full path to the local thumbnail file to upload and share. + Required if ``source_entity`` is not provided. + :param dict source_entity: The entity whos thumbnail will be the source for sharing. + Required if ``source_entity`` is not provided. + :param bool filmstrip_thumbnail: ``True`` to share the filmstrip thumbnail. ``False`` to + share the static thumbnail. Defaults to ``False``. + :returns: ``id`` of the Attachment entity representing the source thumbnail that is shared. + :rtype: int + :raises: :class:`ShotgunError` if not supported by server version or improperly called, + or :class:`ShotgunThumbnailNotReady` if thumbnail is still pending. + """ + if not self.server_caps.version or self.server_caps.version < (4, 0, 0): + raise ShotgunError( + "Thumbnail sharing support requires server " + "version 4.0 or higher, server is %s" % (self.server_caps.version,) + ) + + if not isinstance(entities, list) or len(entities) == 0: + raise ShotgunError( + "'entities' parameter must be a list of entity " + "hashes and may not be empty" + ) + + for e in entities: + if not isinstance(e, dict) or "id" not in e or "type" not in e: + raise ShotgunError( + "'entities' parameter must be a list of " + "entity hashes with at least 'type' and 'id' keys.\nInvalid " + "entity: %s" % e + ) + + if (not thumbnail_path and not source_entity) or ( + thumbnail_path and source_entity + ): + raise ShotgunError( + "You must supply either thumbnail_path OR source_entity." + ) + + # upload thumbnail + if thumbnail_path: + source_entity = entities.pop(0) + if filmstrip_thumbnail: + thumb_id = self.upload_filmstrip_thumbnail( + source_entity["type"], source_entity["id"], thumbnail_path, **kwargs + ) + else: + thumb_id = self.upload_thumbnail( + source_entity["type"], source_entity["id"], thumbnail_path, **kwargs + ) + else: + if ( + not isinstance(source_entity, dict) + or "id" not in source_entity + or "type" not in source_entity + ): + raise ShotgunError( + "'source_entity' parameter must be a dict " + "with at least 'type' and 'id' keys.\nGot: %s (%s)" + % (source_entity, type(source_entity)) + ) + + # only 1 entity in list and we already uploaded the thumbnail to it + if len(entities) == 0: + return thumb_id + + # update entities with source_entity thumbnail + entities_str = [] + for e in entities: + entities_str.append("%s_%s" % (e["type"], e["id"])) + # format for post request + if filmstrip_thumbnail: + filmstrip_thumbnail = 1 + params = { + "entities": ",".join(entities_str), + "source_entity": "%s_%s" % (source_entity["type"], source_entity["id"]), + "filmstrip_thumbnail": filmstrip_thumbnail, + } + + url = urllib.parse.urlunparse( + ( + self.config.scheme, + self.config.server, + "/upload/share_thumbnail", + None, + None, + None, + ) + ) + + result = self._send_form(url, params) + + if result.startswith("1:"): + # clearing thumbnail returns no attachment_id + try: + attachment_id = int(result.split(":", 2)[1].split("\n", 1)[0]) + except ValueError: + attachment_id = None + elif result.startswith("2"): + raise ShotgunThumbnailNotReady("Unable to share thumbnail: %s" % result) + else: + raise ShotgunError("Unable to share thumbnail: %s" % result) + + return attachment_id
+ +
[docs] def upload_thumbnail(self, entity_type, entity_id, path, **kwargs): + """ + Upload a file from a local path and assign it as the thumbnail for the specified entity. + + .. note:: + Images will automatically be re-sized on the server to generate a size-appropriate image + file. However, the original file is retained as well and is accessible when you click + on the thumbnail image in the web UI. If you are using a local install of Shotgun and + have not enabled S3, this can eat up disk space if you're uploading really large source + images for your thumbnails. + + You can un-set (aka clear) a thumbnail on an entity using the + :meth:`~shotgun_api3.Shotgun.update` method and setting the **image** field to ``None``. + This will also unset the ``filmstrip_thumbnail`` field if it is set. + + Supported image file types include ``.jpg` and ``.png`` (preferred) but will also accept. + ``.gif```, ``.tif``, ``.tiff``, ``.bmp``, ``.exr``, ``.dpx``, and ``.tga``. + + This method wraps over :meth:`~shotgun_api3.Shotgun.upload`. Additional keyword arguments + passed to this method will be forwarded to the :meth:`~shotgun_api3.Shotgun.upload` method. + + :param str entity_type: Entity type to set the thumbnail for. + :param int entity_id: Id of the entity to set the thumbnail for. + :param str path: Full path to the thumbnail file on disk. + :returns: Id of the new attachment + """ + return self.upload( + entity_type, entity_id, path, field_name="thumb_image", **kwargs + )
+ +
[docs] def upload_filmstrip_thumbnail(self, entity_type, entity_id, path, **kwargs): + """ + Upload filmstrip thumbnail to specified entity. + + .. versionadded:: 3.0.9 + Requires Shotgun server v3.1.0+ + + Uploads a file from a local directory and assigns it as the filmstrip thumbnail for the + specified entity. The image must be a horizontal strip of any number of frames that are + exactly 240 pixels wide. Therefore the whole strip must be an exact multiple of 240 pixels + in width. The height can be anything (and will depend on the aspect ratio of the frames). + Any image file type that works for thumbnails will work for filmstrip thumbnails. + + Filmstrip thumbnails will only be visible in the Thumbnail field on an entity if a + regular thumbnail image is also uploaded to the entity. The standard thumbnail is + displayed by default as the poster frame. Then, on hover, the filmstrip thumbnail is + displayed and updated based on your horizontal cursor position for scrubbing. On mouseout, + the default thumbnail is displayed again as the poster frame. + + The url for a filmstrip thumbnail on an entity is available by querying for the + ``filmstrip_image field``. + + You can un-set (aka clear) a thumbnail on an entity using the + :meth:`~shotgun_api3.Shotgun.update` method and setting the **image** field to ``None``. + This will also unset the ``filmstrip_thumbnail`` field if it is set. + + This method wraps over :meth:`~shotgun_api3.Shotgun.upload`. Additional keyword arguments + passed to this method will be forwarded to the :meth:`~shotgun_api3.Shotgun.upload` method. + + >>> filmstrip_thumbnail = '/data/show/ne2/100_110/anim/01.mlk-02b_filmstrip.jpg' + >>> sg.upload_filmstrip_thumbnail("Version", 27, filmstrip_thumbnail) + 87 + + :param str entity_type: Entity type to set the filmstrip thumbnail for. + :param int entity_id: Id of the entity to set the filmstrip thumbnail for. + :param str path: Full path to the filmstrip thumbnail file on disk. + :returns: Id of the new Attachment entity created for the filmstrip thumbnail + :rtype: int + """ + if not self.server_caps.version or self.server_caps.version < (3, 1, 0): + raise ShotgunError( + "Filmstrip thumbnail support requires server version 3.1 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + return self.upload( + entity_type, entity_id, path, field_name="filmstrip_thumb_image", **kwargs + )
+ +
[docs] def upload( + self, + entity_type, + entity_id, + path, + field_name=None, + display_name=None, + tag_list=None, + ): + """ + Upload a file to the specified entity. + + Creates an Attachment entity for the file in Shotgun and links it to the specified entity. + You can optionally store the file in a field on the entity, change the display name, and + assign tags to the Attachment. + + .. note:: + Make sure to have retries for file uploads. Failures when uploading will occasionally happen. + When it does, immediately retrying to upload usually works + + >>> mov_file = '/data/show/ne2/100_110/anim/01.mlk-02b.mov' + >>> sg.upload("Shot", 423, mov_file, field_name="sg_latest_quicktime", + ... display_name="Latest QT") + 72 + + :param str entity_type: Entity type to link the upload to. + :param int entity_id: Id of the entity to link the upload to. + :param str path: Full path to an existing non-empty file on disk to upload. + :param str field_name: The internal Shotgun field name on the entity to store the file in. + This field must be a File/Link field type. + :param str display_name: The display name to use for the file. Defaults to the file name. + :param str tag_list: comma-separated string of tags to assign to the file. + :returns: Id of the Attachment entity that was created for the image. + :rtype: int + :raises: :class:`ShotgunError` on upload failure. + """ + # Basic validations of the file to upload. + path = os.path.abspath(os.path.expanduser(path or "")) + + # We need to check for string encodings that we aren't going to be able + # to support later in the upload process. If the given path wasn't already + # unicode, we will try to decode it as utf-8, and if that fails then we + # have to raise a sane exception. This will always work for ascii and utf-8 + # encoded strings, but will fail on some others if the string includes non + # ascii characters. + if not isinstance(path, str): + try: + path = path.decode("utf-8") + except UnicodeDecodeError: + raise ShotgunError( + "Could not upload the given file path. It is encoded as " + "something other than utf-8 or ascii. To upload this file, " + "it can be string encoded as utf-8, or given as unicode: %s" % path + ) + + if not os.path.isfile(path): + raise ShotgunError("Path must be a valid file, got '%s'" % path) + if os.path.getsize(path) == 0: + raise ShotgunError("Path cannot be an empty file: '%s'" % path) + + is_thumbnail = field_name in [ + "thumb_image", + "filmstrip_thumb_image", + "image", + "filmstrip_image", + ] + + # Supported types can be directly uploaded to Cloud storage + if self._requires_direct_s3_upload(entity_type, field_name): + return self._upload_to_storage( + entity_type, + entity_id, + path, + field_name, + display_name, + tag_list, + is_thumbnail, + ) + else: + return self._upload_to_sg( + entity_type, + entity_id, + path, + field_name, + display_name, + tag_list, + is_thumbnail, + )
+ + def _upload_to_storage( + self, + entity_type, + entity_id, + path, + field_name, + display_name, + tag_list, + is_thumbnail, + ): + """ + Internal function to upload a file to the Cloud storage and link it to the specified entity. + + :param str entity_type: Entity type to link the upload to. + :param int entity_id: Id of the entity to link the upload to. + :param str path: Full path to an existing non-empty file on disk to upload. + :param str field_name: The internal Shotgun field name on the entity to store the file in. + This field must be a File/Link field type. + :param str display_name: The display name to use for the file. Defaults to the file name. + :param str tag_list: comma-separated string of tags to assign to the file. + :param bool is_thumbnail: indicates if the attachment is a thumbnail. + :returns: Id of the Attachment entity that was created for the image. + :rtype: int + """ + + filename = os.path.basename(path) + + # Step 1: get the upload url + + is_multipart_upload = os.path.getsize(path) > self._MULTIPART_UPLOAD_CHUNK_SIZE + + upload_info = self._get_attachment_upload_info( + is_thumbnail, filename, is_multipart_upload + ) + + # Step 2: upload the file + # We upload large files in multiple parts because it is more robust + # (and required when using S3 storage) + if is_multipart_upload: + self._multipart_upload_file_to_storage(path, upload_info) + else: + self._upload_file_to_storage(path, upload_info["upload_url"]) + + # Step 3: create the attachment + + url = urllib.parse.urlunparse( + ( + self.config.scheme, + self.config.server, + "/upload/api_link_file", + None, + None, + None, + ) + ) + + params = { + "entity_type": entity_type, + "entity_id": entity_id, + "upload_link_info": upload_info["upload_info"], + } + + params.update(self._auth_params()) + + if is_thumbnail: + if field_name == "filmstrip_thumb_image" or field_name == "filmstrip_image": + params["filmstrip"] = True + else: + if display_name is None: + display_name = filename + # we allow linking to nothing for generic reference use cases + if field_name is not None: + params["field_name"] = field_name + params["display_name"] = display_name + # None gets converted to a string and added as a tag... + if tag_list: + params["tag_list"] = tag_list + + result = self._send_form(url, params) + if not result.startswith("1"): + raise ShotgunError( + "Could not upload file successfully, but " + "not sure why.\nPath: %s\nUrl: %s\nError: %s" % (path, url, result) + ) + + LOG.debug("Attachment linked to content on Cloud storage") + + attachment_id = int(result.split(":", 2)[1].split("\n", 1)[0]) + return attachment_id + + def _upload_to_sg( + self, + entity_type, + entity_id, + path, + field_name, + display_name, + tag_list, + is_thumbnail, + ): + """ + Internal function to upload a file to Shotgun and link it to the specified entity. + + :param str entity_type: Entity type to link the upload to. + :param int entity_id: Id of the entity to link the upload to. + :param str path: Full path to an existing non-empty file on disk to upload. + :param str field_name: The internal Shotgun field name on the entity to store the file in. + This field must be a File/Link field type. + :param str display_name: The display name to use for the file. Defaults to the file name. + :param str tag_list: comma-separated string of tags to assign to the file. + :param bool is_thumbnail: indicates if the attachment is a thumbnail. + + :returns: Id of the Attachment entity that was created for the image. + :rtype: int + """ + + params = { + "entity_type": entity_type, + "entity_id": entity_id, + } + + params.update(self._auth_params()) + + if is_thumbnail: + url = urllib.parse.urlunparse( + ( + self.config.scheme, + self.config.server, + "/upload/publish_thumbnail", + None, + None, + None, + ) + ) + params["thumb_image"] = open(path, "rb") + if field_name == "filmstrip_thumb_image" or field_name == "filmstrip_image": + params["filmstrip"] = True + else: + url = urllib.parse.urlunparse( + ( + self.config.scheme, + self.config.server, + "/upload/upload_file", + None, + None, + None, + ) + ) + if display_name is None: + display_name = os.path.basename(path) + # we allow linking to nothing for generic reference use cases + if field_name is not None: + params["field_name"] = field_name + params["display_name"] = display_name + # None gets converted to a string and added as a tag... + if tag_list: + params["tag_list"] = tag_list + + params["file"] = open(path, "rb") + + result = self._send_form(url, params) + + if not result.startswith("1"): + raise ShotgunError( + "Could not upload file successfully, but " + "not sure why.\nPath: %s\nUrl: %s\nError: %s" % (path, url, result) + ) + + attachment_id = int(result.split(":", 2)[1].split("\n", 1)[0]) + return attachment_id + + def _get_attachment_upload_info(self, is_thumbnail, filename, is_multipart_upload): + """ + Internal function to get the information needed to upload a file to Cloud storage. + + :param bool is_thumbnail: indicates if the attachment is a thumbnail. + :param str filename: name of the file that will be uploaded. + :param bool is_multipart_upload: Indicates if we want multi-part upload information back. + + :returns: dictionary containing upload details from the server. + These details are used throughout the upload process. + :rtype: dict + """ + + if is_thumbnail: + upload_type = "Thumbnail" + else: + upload_type = "Attachment" + + params = {"upload_type": upload_type, "filename": filename} + + params["multipart_upload"] = is_multipart_upload + + upload_url = "/upload/api_get_upload_link_info" + url = urllib.parse.urlunparse( + (self.config.scheme, self.config.server, upload_url, None, None, None) + ) + + upload_info = self._send_form(url, params) + if not upload_info.startswith("1"): + raise ShotgunError( + "Could not get upload_url but " + "not sure why.\nPath: %s\nUrl: %s\nError: %s" + % (filename, url, upload_info) + ) + + LOG.debug("Completed rpc call to %s" % (upload_url)) + + upload_info_parts = upload_info.split("\n") + + return { + "upload_url": upload_info_parts[1], + "timestamp": upload_info_parts[2], + "upload_type": upload_info_parts[3], + "upload_id": upload_info_parts[4], + "upload_info": upload_info, + } + +
[docs] def download_attachment(self, attachment=False, file_path=None, attachment_id=None): + """ + Download the file associated with a Shotgun Attachment. + + >>> version = sg.find_one("Version", [["id", "is", 7115]], ["sg_uploaded_movie"]) + >>> local_file_path = "/var/tmp/%s" % version["sg_uploaded_movie"]["name"] + >>> sg.download_attachment(version["sg_uploaded_movie"], file_path=local_file_path) + /var/tmp/100b_scene_output_v032.mov + + .. warning:: + + On older (< v5.1.0) Shotgun versions, non-downloadable files + on Shotgun don't raise exceptions, they cause a server error which + returns a 200 with the page content. + + :param dict attachment: Usually a dictionary representing an Attachment entity. + The dictionary should have a ``url`` key that specifies the download url. + Optionally, the dictionary can be a standard entity hash format with ``id`` and + ``type`` keys as long as ``"type"=="Attachment"``. This is only supported for + backwards compatibility (#22150). + + If an int value is passed in, the Attachment entity with the matching id will + be downloaded from the Shotgun server. + :param str file_path: Optional file path to write the data directly to local disk. This + avoids loading all of the data in memory and saves the file locally at the given path. + :param id attachment_id: (deprecated) Optional ``id`` of the Attachment entity in Shotgun to + download. + + .. note: + This parameter exists only for backwards compatibility for scripts specifying + the parameter with keywords. + :returns: If ``file_path`` is provided, returns the path to the file on disk. If + ``file_path`` is ``None``, returns the actual data of the file, as str in Python 2 or + bytes in Python 3. + :rtype: str | bytes + """ + # backwards compatibility when passed via keyword argument + if attachment is False: + if type(attachment_id) == int: + attachment = attachment_id + else: + raise TypeError( + "Missing parameter 'attachment'. Expected a " + "dict, int, NoneType value or" + "an int for parameter attachment_id" + ) + # write to disk + if file_path: + try: + fp = open(file_path, "wb") + except IOError as e: + raise IOError( + "Unable to write Attachment to disk using " "file_path. %s" % e + ) + + url = self.get_attachment_download_url(attachment) + if url is None: + return None + + cookie_handler = None + if self.config.server in url: + # We only need to set the auth cookie for downloads from Shotgun server + cookie_handler = self.get_auth_cookie_handler() + + opener = self._build_opener(cookie_handler) + try: + request = urllib.request.Request(url) + request.add_header("user-agent", "; ".join(self._user_agents)) + req = opener.open(request) + if file_path: + shutil.copyfileobj(req, fp) + else: + attachment = req.read() + # 400 [sg] Attachment id doesn't exist or is a local file + # 403 [s3] link is invalid + except urllib.error.URLError as e: + if file_path: + fp.close() + err = "Failed to open %s\n%s" % (url, e) + if hasattr(e, "code"): + if e.code == 400: + err += "\nAttachment may not exist or is a local file?" + elif e.code == 403: + # Only parse the body if it is an Amazon S3 url. + if ( + url.find("s3.amazonaws.com") != -1 + and e.headers["content-type"] == "application/xml" + ): + body = [sgutils.ensure_text(line) for line in e.readlines()] + if body: + xml = "".join(body) + # Once python 2.4 support is not needed we can think about using + # elementtree. The doc is pretty small so this shouldn't be an issue. + match = re.search("<Message>(.*)</Message>", xml) + if match: + err += " - %s" % (match.group(1)) + elif e.code == 409 or e.code == 410: + # we may be dealing with a file that is pending/failed a malware scan, e.g: + # 409: This file is undergoing a malware scan, please try again in a few minutes + # 410: File scanning has detected malware and the file has been quarantined + lines = e.readlines() + if lines: + err += "\n%s\n" % "".join(lines) + raise ShotgunFileDownloadError(err) + else: + if file_path: + if not fp.closed: + fp.close() + return file_path + else: + return attachment
+ + + +
[docs] def get_attachment_download_url(self, attachment): + """ + Return the URL for downloading provided Attachment. + + :param mixed attachment: Usually a dict representing An Attachment entity in Shotgun to + return the download url for. If the ``url`` key is present, it will be used as-is for + the download url. If the ``url`` key is not present, a url will be constructed pointing + at the current Shotgun server for downloading the Attachment entity using the ``id``. + + If ``None`` is passed in, it is silently ignored in order to avoid raising an error when + results from a :meth:`~shotgun_api3.Shotgun.find` are passed off to + :meth:`~shotgun_api3.Shotgun.download_attachment` + + .. note:: + Support for passing in an int representing the Attachment ``id`` is deprecated + + :returns: the download URL for the Attachment or ``None`` if ``None`` was passed to + ``attachment`` parameter. + :rtype: str + """ + # TODO: Support for a standard entity hash should be removed: #22150 + attachment_id = None + if isinstance(attachment, int): + attachment_id = attachment + elif isinstance(attachment, dict): + try: + url = attachment["url"] + except KeyError: + if ( + "id" in attachment + and "type" in attachment + and attachment["type"] == "Attachment" + ): + attachment_id = attachment["id"] + else: + raise ValueError("Missing 'url' key in Attachment dict") + elif attachment is None: + url = None + else: + raise TypeError( + "Unable to determine download url. Expected " + "dict, int, or NoneType. Instead got %s" % type(attachment) + ) + + if attachment_id: + url = urllib.parse.urlunparse( + ( + self.config.scheme, + self.config.server, + "/file_serve/attachment/%s" + % urllib.parse.quote(str(attachment_id)), + None, + None, + None, + ) + ) + return url
+ +
[docs] def authenticate_human_user(self, user_login, user_password, auth_token=None): + """ + Authenticate Shotgun HumanUser. + + Authenticates a user given the login, password, and optionally, one-time auth token (when + two-factor authentication is required). The user must be a ``HumanUser`` entity and the + account must be active. + + >>> sg.authenticate_human_user("rhendriks", "c0mPre$Hi0n", None) + {"type": "HumanUser", "id": 123, "name": "Richard Hendriks"} + + :param str user_login: Login name of Shotgun HumanUser + :param str user_password: Password for Shotgun HumanUser + :param str auth_token: One-time token required to authenticate Shotgun HumanUser + when two-factor authentication is turned on. + :returns: Standard Shotgun dictionary representing the HumanUser if authentication + succeeded. ``None`` if authentication failed for any reason. + :rtype: dict + """ + if not user_login: + raise ValueError("Please supply a username to authenticate.") + + if not user_password: + raise ValueError("Please supply a password for the user.") + + # Override permissions on Config obj + original_login = self.config.user_login + original_password = self.config.user_password + original_auth_token = self.config.auth_token + + self.config.user_login = user_login + self.config.user_password = user_password + self.config.auth_token = auth_token + + try: + data = self.find_one( + "HumanUser", + [["sg_status_list", "is", "act"], ["login", "is", user_login]], + ["id", "login"], + "", + "all", + ) + # Set back to default - There finally and except cannot be used together in python2.4 + self.config.user_login = original_login + self.config.user_password = original_password + self.config.auth_token = original_auth_token + return data + except Fault: + # Set back to default - There finally and except cannot be used together in python2.4 + self.config.user_login = original_login + self.config.user_password = original_password + self.config.auth_token = original_auth_token + except Exception: + # Set back to default - There finally and except cannot be used together in python2.4 + self.config.user_login = original_login + self.config.user_password = original_password + self.config.auth_token = original_auth_token + raise
+ +
[docs] def update_project_last_accessed(self, project, user=None): + """ + Update a Project's ``last_accessed_by_current_user`` field to the current timestamp. + + This helps keep track of the recent Projects each user has worked on and enables scripts + and apps to use this information to display "Recent Projects" for users as a convenience. + + .. versionadded:: + Requires Shotgun v5.3.20+ + + >>> sg.update_project_last_accessed({"type": "Project", "id": 66}, + ... {"type": "HumanUser", "id": 43}) + + :param dict project: Standard Project entity dictionary + :param dict user: Standard user entity dictionary. This is optional if the current API + instance is using user-based authenitcation, or has specified ``sudo_as_login``. In + these cases, if ``user`` is not provided, the ``sudo_as_login`` value or ``login`` + value from the current instance will be used instead. + """ + if self.server_caps.version and self.server_caps.version < (5, 3, 20): + raise ShotgunError( + "update_project_last_accessed requires server version 5.3.20 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + if not user: + # Try to use sudo as user if present + if self.config.sudo_as_login: + user = self.find_one( + "HumanUser", [["login", "is", self.config.sudo_as_login]] + ) + # Try to use login if present + if self.config.user_login: + user = self.find_one( + "HumanUser", [["login", "is", self.config.user_login]] + ) + + params = { + "project_id": project["id"], + } + if user: + params["user_id"] = user["id"] + + record = self._call_rpc("update_project_last_accessed_by_current_user", params) + self._parse_records(record)[0]
+ +
[docs] def note_thread_read(self, note_id, entity_fields=None): + """ + Return the full conversation for a given note, including Replies and Attachments. + + Returns a complex data structure on the following form:: + + [{'content': 'Please add more awesomeness to the color grading.', + 'created_at': '2015-07-14 21:33:28 UTC', + 'created_by': {'id': 38, + 'name': 'John Pink', + 'status': 'act', + 'type': 'HumanUser', + 'valid': 'valid'}, + 'id': 6013, + 'type': 'Note'}, + {'created_at': '2015-07-14 21:33:32 UTC', + 'created_by': {'id': 38, + 'name': 'John Pink', + 'status': 'act', + 'type': 'HumanUser', + 'valid': 'valid'}, + 'id': 159, + 'type': 'Attachment'}, + {'content': 'More awesomeness added', + 'created_at': '2015-07-14 21:54:51 UTC', + 'id': 5, + 'type': 'Reply', + 'user': {'id': 38, + 'name': 'David Blue', + 'status': 'act', + 'type': 'HumanUser', + 'valid': 'valid'}}] + + The list is returned in descending chronological order. + + If you wish to include additional fields beyond the ones that are + returned by default, you can specify these in an entity_fields + dictionary. This dictionary should be keyed by entity type and each + key should contain a list of fields to retrieve, for example:: + + { "Note": ["created_by.HumanUser.image", + "addressings_to", + "playlist", + "user" ], + "Reply": ["content"], + "Attachment": ["filmstrip_image", + "local_storage", + "this_file", + "image"] + } + + :param int note_id: The id for the note to be retrieved + :param dict entity_fields: Additional fields to retrieve as part of the request. + See above for details. + :returns: A list of dictionaries. See above for example. + :rtype: list + """ + + if self.server_caps.version and self.server_caps.version < (6, 2, 0): + raise ShotgunError( + "note_thread requires server version 6.2.0 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + entity_fields = entity_fields or {} + + if not isinstance(entity_fields, dict): + raise ValueError("entity_fields parameter must be a dictionary") + + params = {"note_id": note_id, "entity_fields": entity_fields} + + record = self._call_rpc("note_thread_contents", params) + result = self._parse_records(record) + return result
+ + + +
[docs] def activity_stream_read( + self, + entity_type, + entity_id, + entity_fields=None, + min_id=None, + max_id=None, + limit=None, + ): + """ + Retrieve activity stream data from Shotgun. + + This data corresponds to the data that is displayed in the + Activity tab for an entity in the Shotgun Web UI. + + A complex data structure on the following form will be + returned from Shotgun:: + + {'earliest_update_id': 50, + 'entity_id': 65, + 'entity_type': 'Project', + 'latest_update_id': 79, + 'updates': [{'created_at': '2015-07-15 11:06:55 UTC', + 'created_by': {'id': 38, + 'image': '6641', + 'name': 'John Smith', + 'status': 'act', + 'type': 'HumanUser'}, + 'id': 79, + 'meta': {'entity_id': 6004, + 'entity_type': 'Version', + 'type': 'new_entity'}, + 'primary_entity': {'id': 6004, + 'name': 'Review_turntable_v2', + 'status': 'rev', + 'type': 'Version'}, + 'read': False, + 'update_type': 'create'}, + {...}, + ] + } + + The main payload of the return data can be found inside the 'updates' + key, containing a list of dictionaries. This list is always returned + in descending date order. Each item may contain different fields + depending on their update type. The primary_entity key represents the + main Shotgun entity that is associated with the update. By default, + this entity is returned with a set of standard fields. By using the + entity_fields parameter, you can extend the returned data to include + additional fields. If for example you wanted to return the asset type + for all assets and the linked sequence for all Shots, pass the + following entity_fields:: + + {"Shot": ["sg_sequence"], "Asset": ["sg_asset_type"]} + + Deep queries can be used in this syntax if you want to + traverse into connected data. + + :param str entity_type: Entity type to retrieve activity stream for + :param int entity_id: Entity id to retrieve activity stream for + :param list entity_fields: List of additional fields to include. + See above for details + :param int max_id: Do not retrieve ids greater than this id. + This is useful when implementing paging. + :param int min_id: Do not retrieve ids lesser than this id. + This is useful when implementing caching of + the event stream data and you want to + "top up" an existing cache. + :param int limit: Limit the number of returned records. If not specified, + the system default will be used. + :returns: A complex activity stream data structure. See above for details. + :rtype: dict + """ + if self.server_caps.version and self.server_caps.version < (6, 2, 0): + raise ShotgunError( + "activity_stream requires server version 6.2.0 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + # set up parameters to send to server. + entity_fields = entity_fields or {} + + if not isinstance(entity_fields, dict): + raise ValueError("entity_fields parameter must be a dictionary") + + params = { + "type": entity_type, + "id": entity_id, + "max_id": max_id, + "min_id": min_id, + "limit": limit, + "entity_fields": entity_fields, + } + + record = self._call_rpc("activity_stream", params) + result = self._parse_records(record)[0] + return result
+ + def nav_expand(self, path, seed_entity_field=None, entity_fields=None): + """ + Expand the navigation hierarchy for the supplied path. + + .. warning:: + + This is an experimental method that is not officially part of the + python-api. Usage of this method is discouraged. This method's name, + arguments, and argument types may change at any point. + + """ + return self._call_rpc( + "nav_expand", + { + "path": path, + "seed_entity_field": seed_entity_field, + "entity_fields": entity_fields, + }, + ) + + def nav_search_string(self, root_path, search_string, seed_entity_field=None): + """ + Search function adapted to work with the navigation hierarchy. + + .. warning:: + + This is an experimental method that is not officially part of the + python-api. Usage of this method is discouraged. This method's name, + arguments, and argument types may change at any point. + """ + return self._call_rpc( + "nav_search", + { + "root_path": root_path, + "seed_entity_field": seed_entity_field, + "search_criteria": {"search_string": search_string}, + }, + ) + + def nav_search_entity(self, root_path, entity, seed_entity_field=None): + """ + Search function adapted to work with the navigation hierarchy. + + .. warning:: + + This is an experimental method that is not officially part of the + python-api. Usage of this method is discouraged. This method's name, + arguments, and argument types may change at any point. + + """ + return self._call_rpc( + "nav_search", + { + "root_path": root_path, + "seed_entity_field": seed_entity_field, + "search_criteria": {"entity": entity}, + }, + ) + +
[docs] def get_session_token(self): + """ + Get the session token associated with the current session. + + If a session token has already been established, this is returned, otherwise a new one is + generated on the server and returned. + + >>> sg.get_session_token() + dd638be7d07c39fa73d935a775558a50 + + :returns: String containing a session token. + :rtype: str + """ + if self.config.session_token: + return self.config.session_token + + rv = self._call_rpc("get_session_token", None) + session_token = (rv or {}).get("session_id") + if not session_token: + raise RuntimeError("Could not extract session_id from %s", rv) + self.config.session_token = session_token + + return session_token
+ +
[docs] def preferences_read(self, prefs=None): + """ + Get a subset of the site preferences. + + >>> sg.preferences_read() + { + "pref_name": "pref value" + } + + :param list prefs: An optional list of preference names to return. + :returns: Dictionary of preferences and their values. + :rtype: dict + """ + if self.server_caps.version and self.server_caps.version < (7, 10, 0): + raise ShotgunError( + "preferences_read requires server version 7.10.0 or " + "higher, server is %s" % (self.server_caps.version,) + ) + + prefs = prefs or [] + + return self._call_rpc("preferences_read", {"prefs": prefs})
+ +
[docs] def user_subscriptions_read(self): + """ + Get the list of user subscriptions. + + :returns: A list of user subscriptions where each subscription is a + dictionary containing the ``humanUserId`` and ``subscription`` + fields. + :rtype: list + """ + + return self._call_rpc("user_subscriptions_read", None)
+ +
[docs] def user_subscriptions_create(self, users): + # type: (list[dict[str, Union[str, list[str], None]) -> bool + """ + Assign subscriptions to users. + + :param list users: list of user subscriptions to assign. + Each subscription must be a dictionary with the ``humanUserId`` and + ``subscription`` fields. + The ``subscription`` is either ``None``, a single string, or an + array of strings with subscription information. + + :returns: ``True`` if the request succedeed, ``False`` if otherwise. + :rtype: bool + """ + + response = self._call_rpc("user_subscriptions_create", {"users": users}) + + if not isinstance(response, dict): + return False + + return response.get("status") == "success"
+ + def _build_opener(self, handler): + """ + Build urllib2 opener with appropriate proxy handler. + """ + handlers = [] + if self.__ca_certs and not NO_SSL_VALIDATION: + handlers.append(CACertsHTTPSHandler(self.__ca_certs)) + + if self.config.proxy_handler: + handlers.append(self.config.proxy_handler) + + if handler is not None: + handlers.append(handler) + return urllib.request.build_opener(*handlers) + + @classmethod + def _get_certs_file(cls, ca_certs): + """ + The following method tells the API where to look for + certificate authorities certificates (we will be referring to these + as CAC from now on). Here's how the Python API interacts with those. + + Auth and CRUD operations + ======================== + These operations are executed with httplib2. httplib2 ships with a + list of CACs instead of asking Python's ssl module for them. + + Upload/Downloads + ================ + These operations are executed using urllib2. urllib2 asks a Python + module called `ssl` for CACs. We have bundled certifi with the API + so that we can be sure the certs are correct at the time of the API + release. This does however mean when the certs change we must update + the API to contain the latest certifi. + This approach is preferable to not using certifi since, on Windows, + ssl searches for CACs in the Windows Certificate Store, on + Linux/macOS, it asks the OpenSSL library linked with Python for CACs. + Depending on how Python was compiled for a given DCC, Python may be + linked against the OpenSSL from the OS or a copy of OpenSSL distributed + with the DCC. This impacts which versions of the certificates are + available to Python, as an OS level OpenSSL will be aware of system + wide certificates that have been added, while an OpenSSL that comes + with a DCC is likely bundling a list of certificates that get update + with each release and may not contain system wide certificates. + + Using custom CACs + ================= + When a user requires a non-standard CAC, the SHOTGUN_API_CACERTS + environment variable allows to provide an alternate location for + the CACs. + + :param ca_certs: A default cert can be provided + :return: The cert file path to use. + """ + if ca_certs is not None: + # certs were provided up front so use these + return ca_certs + elif "SHOTGUN_API_CACERTS" in os.environ: + return os.environ.get("SHOTGUN_API_CACERTS") + else: + # No certs have been specifically provided fallback to using the + # certs shipped with this API. + # We bundle certifi with this API so that we have a higher chance + # of using an uptodate certificate, rather than relying + # on the certs that are bundled with Python or the OS in some cases. + # However we can't use certifi.where() since that searches for the + # cacert.pem file using the sys.path and this means that if another + # copy of certifi can be found first, then it won't use ours. + # So we manually generate the path to the cert, but still use certifi + # to make it easier for updating the bundled cert with the API. + cur_dir = os.path.dirname(os.path.abspath(__file__)) + # Now add the rest of the path to the cert file. + cert_file = os.path.join(cur_dir, "lib", "certifi", "cacert.pem") + return cert_file + + def _turn_off_ssl_validation(self): + """ + Turn off SSL certificate validation. + """ + global NO_SSL_VALIDATION + self.config.no_ssl_validation = True + NO_SSL_VALIDATION = True + # reset ssl-validation in user-agents + self._user_agents = [ + ( + "ssl %s (no-validate)" % self.client_caps.ssl_version + if ua.startswith("ssl ") + else ua + ) + for ua in self._user_agents + ] + + # Deprecated methods from old wrapper +
[docs] def schema(self, entity_type): + """ + .. deprecated:: 3.0.0 + Use :meth:`~shotgun_api3.Shotgun.schema_field_read` instead. + """ + raise ShotgunError( + "Deprecated: use schema_field_read('%s') instead" % entity_type + )
+ +
[docs] def entity_types(self): + """ + .. deprecated:: 3.0.0 + Use :meth:`~shotgun_api3.Shotgun.schema_entity_read` instead. + """ + raise ShotgunError("Deprecated: use schema_entity_read() instead")
+ + # ======================================================================== + # RPC Functions + + def _call_rpc(self, method, params, include_auth_params=True, first=False): + """ + Call the specified method on the Shotgun Server sending the supplied payload. + """ + + LOG.debug("Starting rpc call to %s with params %s" % (method, params)) + + params = self._transform_outbound(params) + payload = self._build_payload( + method, params, include_auth_params=include_auth_params + ) + encoded_payload = self._encode_payload(payload) + + req_headers = { + "content-type": "application/json; charset=utf-8", + "connection": "keep-alive", + } + + if self.config.localized is True: + req_headers["locale"] = "auto" + + attempt = 1 + while attempt <= self.MAX_ATTEMPTS: + http_status, resp_headers, body = self._make_call( + "POST", + self.config.api_path, + encoded_payload, + req_headers, + ) + + LOG.debug("Completed rpc call to %s" % (method)) + + try: + self._parse_http_status(http_status) + except ProtocolError as e: + e.headers = resp_headers + + # We've seen some rare instances of PTR returning 502 for issues that + # appear to be caused by something internal to PTR. We're going to + # allow for limited retries for those specifically. + if attempt != self.MAX_ATTEMPTS and e.errcode in [502, 504]: + LOG.debug("Got a 502 or 504 response. Waiting and retrying...") + time.sleep(float(attempt) * self.BACKOFF) + attempt += 1 + continue + elif e.errcode == 403: + # 403 is returned with custom error page when api access is blocked + e.errmsg += ": %s" % body + raise + else: + break + + response = self._decode_response(resp_headers, body) + self._response_errors(response) + response = self._transform_inbound(response) + + if not isinstance(response, dict) or "results" not in response: + return response + + results = response.get("results") + if first and isinstance(results, list): + return results[0] + return results + + def _auth_params(self): + """ + Return a dictionary of the authentication parameters being used. + """ + # Used to authenticate HumanUser credentials + if self.config.user_login and self.config.user_password: + auth_params = { + "user_login": str(self.config.user_login), + "user_password": str(self.config.user_password), + } + if self.config.auth_token: + auth_params["auth_token"] = str(self.config.auth_token) + + # Use script name instead + elif self.config.script_name and self.config.api_key: + auth_params = { + "script_name": str(self.config.script_name), + "script_key": str(self.config.api_key), + } + + # Authenticate using session_id + elif self.config.session_token: + if self.server_caps.version and self.server_caps.version < (5, 3, 0): + raise ShotgunError( + "Session token based authentication requires server version " + "5.3.0 or higher, server is %s" % (self.server_caps.version,) + ) + + auth_params = {"session_token": str(self.config.session_token)} + + # Request server side to raise exception for expired sessions. + # This was added in as part of Shotgun 5.4.4 + if self.server_caps.version and self.server_caps.version > (5, 4, 3): + auth_params["reject_if_expired"] = True + + else: + raise ValueError("invalid auth params") + + if self.config.session_uuid: + auth_params["session_uuid"] = self.config.session_uuid + + # Make sure sudo_as_login is supported by server version + if self.config.sudo_as_login: + if self.server_caps.version and self.server_caps.version < (5, 3, 12): + raise ShotgunError( + "Option 'sudo_as_login' requires server version 5.3.12 or " + "higher, server is %s" % (self.server_caps.version,) + ) + auth_params["sudo_as_login"] = self.config.sudo_as_login + + if self.config.extra_auth_params: + auth_params.update(self.config.extra_auth_params) + + return auth_params + + def _sanitize_auth_params(self, params): + """ + Given an authentication parameter dictionary, sanitize any sensitive + information and return the sanitized dict copy. + """ + sanitized_params = copy.copy(params) + for k in ["user_password", "script_key", "session_token"]: + if k in sanitized_params: + sanitized_params[k] = "********" + return sanitized_params + + def _build_payload(self, method, params, include_auth_params=True): + """ + Build the payload to be send to the rpc endpoint. + """ + if not method: + raise ValueError("method is empty") + + call_params = [] + + if include_auth_params: + auth_params = self._auth_params() + call_params.append(auth_params) + + if params: + call_params.append(params) + + return {"method_name": method, "params": call_params} + + def _encode_payload(self, payload): + """ + Encode the payload to a string to be passed to the rpc endpoint. + + The payload is json encoded as a unicode string if the content + requires it. The unicode string is then encoded as 'utf-8' as it must + be in a single byte encoding to go over the wire. + """ + + wire = json.dumps(payload, ensure_ascii=False) + return sgutils.ensure_binary(wire) + + def _make_call(self, verb, path, body, headers): + """ + Make an HTTP call to the server. + + Handles retry and failure. + """ + + attempt = 0 + req_headers = {} + req_headers["user-agent"] = "; ".join(self._user_agents) + if self.config.authorization: + req_headers["Authorization"] = self.config.authorization + + req_headers.update(headers or {}) + body = body or None + + max_rpc_attempts = self.config.max_rpc_attempts + rpc_attempt_interval = self.config.rpc_attempt_interval / 1000.0 + + while attempt < max_rpc_attempts: + attempt += 1 + try: + return self._http_request(verb, path, body, req_headers) + except ssl.SSLEOFError as e: + # SG-34910 - EOF occurred in violation of protocol (_ssl.c:2426) + # This issue seems to be related to proxy and keep alive. + # It looks like, sometimes, the proxy drops the connection on + # the TCP/TLS level despites the keep-alive. So we need to close + # the connection and make a new attempt. + LOG.debug("SSLEOFError: {}".format(e)) + self._close_connection() + if attempt == max_rpc_attempts: + LOG.debug("Request failed. Giving up after %d attempts." % attempt) + raise + # This is the exact same block as the "except Exception" bellow. + # We need to do it here because the next except will match it + # otherwise and will not re-attempt. + # When we drop support of Python 2 and we will probably drop the + # next except, we might want to remove this except too. + except ssl_error_classes as e: + # Test whether the exception is due to the fact that this is an older version of + # Python that cannot validate certificates encrypted with SHA-2. If it is, then + # fall back on disabling the certificate validation and try again - unless the + # SHOTGUN_FORCE_CERTIFICATE_VALIDATION environment variable has been set by the + # user. In that case we simply raise the exception. Any other exceptions simply + # get raised as well. + # + # For more info see: + # https://www.shotgridsoftware.com/blog/important-ssl-certificate-renewal-and-sha-2/ + # + # SHA-2 errors look like this: + # [Errno 1] _ssl.c:480: error:0D0C50A1:asn1 encoding routines:ASN1_item_verify: + # unknown message digest algorithm + # + # Any other exceptions simply get raised. + if ( + "unknown message digest algorithm" not in str(e) + or "SHOTGUN_FORCE_CERTIFICATE_VALIDATION" in os.environ + ): + raise + + if self.config.no_ssl_validation is False: + LOG.warning( + "SSL Error: this Python installation is incompatible with " + "certificates signed with SHA-2. Disabling certificate validation. " + "For more information, see https://www.shotgridsoftware.com/blog/" + "important-ssl-certificate-renewal-and-sha-2/" + ) + self._turn_off_ssl_validation() + # reload user agent to reflect that we have turned off ssl validation + req_headers["user-agent"] = "; ".join(self._user_agents) + + self._close_connection() + if attempt == max_rpc_attempts: + LOG.debug("Request failed. Giving up after %d attempts." % attempt) + raise + except Exception: + self._close_connection() + if attempt == max_rpc_attempts: + LOG.debug("Request failed. Giving up after %d attempts." % attempt) + raise + + LOG.debug( + "Request failed, attempt %d of %d. Retrying in %.2f seconds..." + % (attempt, max_rpc_attempts, rpc_attempt_interval) + ) + time.sleep(rpc_attempt_interval) + + def _http_request(self, verb, path, body, headers): + """ + Make the actual HTTP request. + """ + url = urllib.parse.urlunparse( + (self.config.scheme, self.config.server, path, None, None, None) + ) + LOG.debug("Request is %s:%s" % (verb, url)) + LOG.debug("Request headers are %s" % headers) + LOG.debug("Request body is %s" % body) + + conn = self._get_connection() + resp, content = conn.request(url, method=verb, body=body, headers=headers) + # http response code is handled else where + http_status = (resp.status, resp.reason) + resp_headers = dict((k.lower(), v) for k, v in six.iteritems(resp)) + resp_body = content + + LOG.debug("Response status is %s %s" % http_status) + LOG.debug("Response headers are %s" % resp_headers) + LOG.debug("Response body is %s" % resp_body) + + return (http_status, resp_headers, resp_body) + + def _make_upload_request(self, request, opener): + """ + Open the given request object, return the + response, raises URLError on protocol errors. + """ + try: + result = opener.open(request) + + except urllib.error.HTTPError: + raise + return result + + def _parse_http_status(self, status): + """ + Parse the status returned from the http request. + + :param tuple status: Tuple of (code, reason). + :raises: RuntimeError if the http status is non success. + """ + error_code = status[0] + errmsg = status[1] + + if status[0] >= 300: + headers = "HTTP error from server" + if status[0] == 503: + errmsg = "Flow Production Tracking is currently down for maintenance or too busy to reply. Please try again later." + raise ProtocolError(self.config.server, error_code, errmsg, headers) + + return + + def _decode_response(self, headers, body): + """ + Decode the response from the server from the wire format to + a python data structure. + + :param dict headers: Headers from the server. + :param str body: Raw response body from the server. + :returns: If the content-type starts with application/json or + text/javascript the body is json decoded. Otherwise the raw body is + returned. + :rtype: str + """ + if not body: + return body + + ct = (headers.get("content-type") or "application/json").lower() + + if ct.startswith("application/json") or ct.startswith("text/javascript"): + return self._json_loads(body) + return body + + def _json_loads(self, body): + return json.loads(body) + + def _json_loads_ascii(self, body): + """ + See http://stackoverflow.com/questions/956867 + """ + + def _decode_list(lst): + newlist = [] + for i in lst: + if isinstance(i, str): + i = sgutils.ensure_str(i) + elif isinstance(i, list): + i = _decode_list(i) + newlist.append(i) + return newlist + + def _decode_dict(dct): + newdict = {} + for k, v in six.iteritems(dct): + if isinstance(k, str): + k = sgutils.ensure_str(k) + if isinstance(v, str): + v = sgutils.ensure_str(v) + elif isinstance(v, list): + v = _decode_list(v) + newdict[k] = v + return newdict + + return json.loads(body, object_hook=_decode_dict) + + def _response_errors(self, sg_response): + """ + Raise any API errors specified in the response. + + :raises ShotgunError: If the server response contains an exception. + """ + + # error code for authentication related problems + ERR_AUTH = 102 + # error code when 2FA authentication is required but no 2FA token provided. + ERR_2FA = 106 + # error code when SSO is activated on the site, preventing the use of username/password for authentication. + ERR_SSO = 108 + # error code when Oxygen is activated on the site, preventing the use of username/password for authentication. + ERR_OXYG = 110 + + if isinstance(sg_response, dict) and sg_response.get("exception"): + if sg_response.get("error_code") == ERR_AUTH: + raise AuthenticationFault( + sg_response.get("message", "Unknown Authentication Error") + ) + elif sg_response.get("error_code") == ERR_2FA: + raise MissingTwoFactorAuthenticationFault( + sg_response.get("message", "Unknown 2FA Authentication Error") + ) + elif sg_response.get("error_code") == ERR_SSO: + raise UserCredentialsNotAllowedForSSOAuthenticationFault( + sg_response.get( + "message", + "Authentication using username/password is not " + "allowed for an SSO-enabled Flow Production Tracking site", + ) + ) + elif sg_response.get("error_code") == ERR_OXYG: + raise UserCredentialsNotAllowedForOxygenAuthenticationFault( + sg_response.get( + "message", + "Authentication using username/password is not " + "allowed for an Autodesk Identity enabled Flow Production Tracking site", + ) + ) + else: + # raise general Fault + raise Fault(sg_response.get("message", "Unknown Error")) + return + + def _visit_data(self, data, visitor): + """ + Walk the data (simple python types) and call the visitor. + """ + + if not data: + return data + + recursive = self._visit_data + if isinstance(data, list): + return [recursive(i, visitor) for i in data] + + if isinstance(data, tuple): + return tuple(recursive(i, visitor) for i in data) + + if isinstance(data, dict): + return dict((k, recursive(v, visitor)) for k, v in six.iteritems(data)) + + return visitor(data) + + def _transform_outbound(self, data): + """ + Transform data types or values before they are sent by the client. + + - changes timezones + - converts dates and times to strings + """ + + if self.config.convert_datetimes_to_utc: + + def _change_tz(value): + if value.tzinfo is None: + value = value.replace(tzinfo=SG_TIMEZONE.local) + return value.astimezone(SG_TIMEZONE.utc) + + else: + _change_tz = None + + local_now = datetime.datetime.now() + + def _outbound_visitor(value): + + if isinstance(value, datetime.datetime): + if _change_tz: + value = _change_tz(value) + + return value.strftime("%Y-%m-%dT%H:%M:%SZ") + + if isinstance(value, datetime.date): + # existing code did not tz transform dates. + return value.strftime("%Y-%m-%d") + + if isinstance(value, datetime.time): + value = local_now.replace( + hour=value.hour, + minute=value.minute, + second=value.second, + microsecond=value.microsecond, + ) + if _change_tz: + value = _change_tz(value) + return value.strftime("%Y-%m-%dT%H:%M:%SZ") + + # ensure return is six.text_type + if isinstance(value, str): + return sgutils.ensure_text(value) + + return value + + return self._visit_data(data, _outbound_visitor) + + def _transform_inbound(self, data): + """ + Transforms data types or values after they are received from the server. + """ + # NOTE: The time zone is removed from the time after it is transformed + # to the local time, otherwise it will fail to compare to datetimes + # that do not have a time zone. + if self.config.convert_datetimes_to_utc: + + def _change_tz(x): + return x.replace(tzinfo=SG_TIMEZONE.utc).astimezone(SG_TIMEZONE.local) + + else: + _change_tz = None + + def _inbound_visitor(value): + if isinstance(value, str): + if len(value) == 20 and self._DATE_TIME_PATTERN.match(value): + try: + # strptime was not on datetime in python2.4 + value = datetime.datetime( + *time.strptime(value, "%Y-%m-%dT%H:%M:%SZ")[:6] + ) + except ValueError: + return value + if _change_tz: + return _change_tz(value) + return value + + return value + + return self._visit_data(data, _inbound_visitor) + + # ======================================================================== + # Connection Functions + + def _get_connection(self): + """ + Return the current connection or creates a new connection to the current server. + """ + if self._connection is not None: + return self._connection + + if self.config.proxy_server: + pi = ProxyInfo( + socks.PROXY_TYPE_HTTP, + self.config.proxy_server, + self.config.proxy_port, + proxy_user=self.config.proxy_user, + proxy_pass=self.config.proxy_pass, + ) + self._connection = Http( + timeout=self.config.timeout_secs, + ca_certs=self.__ca_certs, + proxy_info=pi, + disable_ssl_certificate_validation=self.config.no_ssl_validation, + ) + else: + self._connection = Http( + timeout=self.config.timeout_secs, + ca_certs=self.__ca_certs, + proxy_info=None, + disable_ssl_certificate_validation=self.config.no_ssl_validation, + ) + + return self._connection + + def _close_connection(self): + """ + Close the current connection. + """ + if self._connection is None: + return + + for conn in self._connection.connections.values(): + try: + conn.close() + except Exception: + pass + self._connection.connections.clear() + self._connection = None + return + + # ======================================================================== + # Utility + + def _parse_records(self, records): + """ + Parse 'records' returned from the api to do local modifications: + + - Insert thumbnail urls + - Insert local file paths. + - Revert &lt; html entities that may be the result of input sanitization + mechanisms back to a litteral < character. + + :param records: List of records (dicts) to process or a single record. + + :returns: A list of the records processed. + """ + + if not records: + return [] + + if not isinstance(records, (list, tuple)): + records = [ + records, + ] + + for rec in records: + # skip results that aren't entity dictionaries + if not isinstance(rec, dict): + continue + + # iterate over each item and check each field for possible injection + for k, v in six.iteritems(rec): + if not v: + continue + + # Check for html entities in strings + if isinstance(v, str): + rec[k] = rec[k].replace("&lt;", "<") + + # check for thumbnail for older version (<3.3.0) of shotgun + if ( + k == "image" + and self.server_caps.version + and self.server_caps.version < (3, 3, 0) + ): + rec["image"] = self._build_thumb_url(rec["type"], rec["id"]) + continue + + if ( + isinstance(v, dict) + and v.get("link_type") == "local" + and self.client_caps.local_path_field in v + ): + local_path = v[self.client_caps.local_path_field] + v["local_path"] = local_path + v["url"] = "file://%s" % (local_path or "",) + + return records + + def _build_thumb_url(self, entity_type, entity_id): + """ + Return the URL for the thumbnail of an entity given the entity type and the entity id. + + Note: This makes a call to the server for every thumbnail. + + :param entity_type: Entity type the id is for. + :param entity_id: id of the entity to get the thumbnail for. + :returns: Fully qualified url to the thumbnail. + """ + # Example response from the end point + # curl "https://foo.com/upload/get_thumbnail_url?entity_type=Version&entity_id=1" + # 1 + # /files/0000/0000/0012/232/shot_thumb.jpg.jpg + entity_info = { + "e_type": urllib.parse.quote(entity_type), + "e_id": urllib.parse.quote(str(entity_id)), + } + url = ( + "/upload/get_thumbnail_url?" + + "entity_type=%(e_type)s&entity_id=%(e_id)s" % entity_info + ) + + body = self._make_call("GET", url, None, None)[2] + + code, thumb_url = body.splitlines() + code = int(code) + + # code of 0 means error, second line is the error code + if code == 0: + raise ShotgunError(thumb_url) + + if code == 1: + return urllib.parse.urlunparse( + ( + self.config.scheme, + self.config.server, + thumb_url.strip(), + None, + None, + None, + ) + ) + + # Comments in prev version said we can get this sometimes. + raise RuntimeError("Unknown code %s %s" % (code, thumb_url)) + + def _dict_to_list( + self, d, key_name="field_name", value_name="value", extra_data=None + ): + """ + Utility function to convert a dict into a list dicts using the key_name and value_name keys. + + e.g. d {'foo' : 'bar'} changed to [{'field_name':'foo', 'value':'bar'}] + + Any dictionary passed in via extra_data will be merged into the resulting dictionary. + e.g. d as above and extra_data of {'foo': {'thing1': 'value1'}} changes into + [{'field_name': 'foo', 'value': 'bar', 'thing1': 'value1'}] + """ + ret = [] + for k, v in six.iteritems((d or {})): + d = {key_name: k, value_name: v} + d.update((extra_data or {}).get(k, {})) + ret.append(d) + return ret + + def _dict_to_extra_data(self, d, key_name="value"): + """ + Utility function to convert a dict into a dict compatible with the extra_data arg + of _dict_to_list. + + e.g. d {'foo' : 'bar'} changed to {'foo': {"value": 'bar'}] + """ + return dict([(k, {key_name: v}) for (k, v) in six.iteritems((d or {}))]) + + def _upload_file_to_storage(self, path, storage_url): + """ + Internal function to upload an entire file to the Cloud storage. + + :param str path: Full path to an existing non-empty file on disk to upload. + :param str storage_url: Target URL for the uploaded file. + """ + filename = os.path.basename(path) + + fd = open(path, "rb") + try: + content_type = mimetypes.guess_type(filename)[0] + content_type = content_type or "application/octet-stream" + file_size = os.fstat(fd.fileno())[stat.ST_SIZE] + self._upload_data_to_storage(fd, content_type, file_size, storage_url) + finally: + fd.close() + + LOG.debug("File uploaded to Cloud storage: %s", filename) + + def _multipart_upload_file_to_storage(self, path, upload_info): + """ + Internal function to upload a file to the Cloud storage in multiple parts. + + :param str path: Full path to an existing non-empty file on disk to upload. + :param dict upload_info: Contains details received from the server, about the upload. + """ + + fd = open(path, "rb") + try: + content_type = mimetypes.guess_type(path)[0] + content_type = content_type or "application/octet-stream" + file_size = os.fstat(fd.fileno())[stat.ST_SIZE] + filename = os.path.basename(path) + + etags = [] + part_number = 1 + bytes_read = 0 + chunk_size = self._MULTIPART_UPLOAD_CHUNK_SIZE + while bytes_read < file_size: + data = fd.read(chunk_size) + data_size = len(data) + # keep data as a stream so that we don't need to worry how it was + # encoded. + data = BytesIO(data) + bytes_read += data_size + part_url = self._get_upload_part_link( + upload_info, filename, part_number + ) + etags.append( + self._upload_data_to_storage( + data, content_type, data_size, part_url + ) + ) + part_number += 1 + + self._complete_multipart_upload(upload_info, filename, etags) + finally: + fd.close() + + LOG.debug("File uploaded in multiple parts to Cloud storage: %s", path) + + def _get_upload_part_link(self, upload_info, filename, part_number): + """ + Internal function to get the url to upload the next part of a file to the + Cloud storage, in a multi-part upload process. + + :param dict upload_info: Contains details received from the server, about the upload. + :param str filename: Name of the file for which we want the link. + :param int part_number: Part number for the link. + :returns: upload url. + :rtype: str + """ + params = { + "upload_type": upload_info["upload_type"], + "filename": filename, + "timestamp": upload_info["timestamp"], + "upload_id": upload_info["upload_id"], + "part_number": part_number, + } + + url = urllib.parse.urlunparse( + ( + self.config.scheme, + self.config.server, + "/upload/api_get_upload_link_for_part", + None, + None, + None, + ) + ) + result = self._send_form(url, params) + + # Response is of the form: 1\n<url> (for success) or 0\n (for failure). + # In case of success, we know we the second line of the response contains the + # requested URL. + if not result.startswith("1"): + raise ShotgunError("Unable get upload part link: %s" % result) + + LOG.debug("Got next upload link from server for multipart upload.") + return result.split("\n", 2)[1] + + def _upload_data_to_storage(self, data, content_type, size, storage_url): + """ + Internal function to upload data to Cloud storage. + + :param stream data: Contains details received from the server, about the upload. + :param str content_type: Content type of the data stream. + :param int size: Number of bytes in the data stream. + :param str storage_url: Target URL for the uploaded file. + :returns: upload url. + :rtype: str + """ + + attempt = 1 + while attempt <= self.MAX_ATTEMPTS: + try: + opener = self._build_opener(urllib.request.HTTPHandler) + + request = urllib.request.Request(storage_url, data=data) + request.add_header("Content-Type", content_type) + request.add_header("Content-Length", size) + request.get_method = lambda: "PUT" + result = self._make_upload_request(request, opener) + + LOG.debug("Completed request to %s" % request.get_method()) + + except urllib.error.HTTPError as e: + if attempt != self.MAX_ATTEMPTS and e.code in [500, 503]: + LOG.debug("Got a %s response. Waiting and retrying..." % e.code) + time.sleep(float(attempt) * self.BACKOFF) + attempt += 1 + continue + elif e.code in [500, 503]: + raise ShotgunError( + "Got a %s response when uploading to %s: %s" + % (e.code, storage_url, e) + ) + else: + raise ShotgunError( + "Unanticipated error occurred uploading to %s: %s" + % (storage_url, e) + ) + except urllib.error.URLError as e: + LOG.debug("Got a '%s' response. Waiting and retrying..." % e) + time.sleep(float(attempt) * self.BACKOFF) + attempt += 1 + continue + else: + break + else: + raise ShotgunError("Max attemps limit reached.") + + etag = result.info()["Etag"] + LOG.debug("Part upload completed successfully.") + return etag + + def _complete_multipart_upload(self, upload_info, filename, etags): + """ + Internal function to complete a multi-part upload to the Cloud storage. + + :param dict upload_info: Contains details received from the server, about the upload. + :param str filename: Name of the file for which we want to complete the upload. + :param tupple etags: Contains the etag of each uploaded file part. + """ + + params = { + "upload_type": upload_info["upload_type"], + "filename": filename, + "timestamp": upload_info["timestamp"], + "upload_id": upload_info["upload_id"], + "etags": ",".join(etags), + } + + url = urllib.parse.urlunparse( + ( + self.config.scheme, + self.config.server, + "/upload/api_complete_multipart_upload", + None, + None, + None, + ) + ) + result = self._send_form(url, params) + + # Response is of the form: 1\n or 0\n to indicate success or failure of the call. + if not result.startswith("1"): + raise ShotgunError("Unable get upload part link: %s" % result) + + def _requires_direct_s3_upload(self, entity_type, field_name): + """ + Internal function that determines if an entity_type + field_name combination + should be uploaded to cloud storage. + + The info endpoint should return `s3_enabled_upload_types` which contains an object like the following: + { + 'Version': ['sg_uploaded_movie'], + 'Attachment': '*', + '*': ['this_file'] + } + + :param str entity_type: The entity type of the file being uploaded. + :param str field_name: The matching field name for the file being uploaded. + + :returns: Whether the field + entity type combination should be uploaded to cloud storage. + :rtype: bool + """ + supported_s3_types = self.server_info.get("s3_enabled_upload_types") or {} + supported_fields = supported_s3_types.get(entity_type) or [] + supported_star_fields = supported_s3_types.get("*") or [] + # If direct uploads are enabled + if self.server_info.get("s3_direct_uploads_enabled", False): + # If field_name is part of a supported entity_type + if field_name in supported_fields or field_name in supported_star_fields: + return True + # If supported_fields is a string or a list with * + if isinstance(supported_fields, list) and "*" in supported_fields: + return True + elif supported_fields == "*": + return True + # If supported_star_fields is a list containing * or * as a string + if isinstance(supported_star_fields, list) and "*" in supported_star_fields: + return True + elif supported_star_fields == "*": + return True + # Support direct upload for old versions of shotgun + return entity_type == "Version" and field_name == "sg_uploaded_movie" + else: + return False + + def _send_form(self, url, params): + """ + Utility function to send a Form to Shotgun and process any HTTP errors that + could occur. + + :param url: endpoint where the form is sent. + :param params: form data + :returns: result from the server. + """ + + params.update(self._auth_params()) + + attempt = 1 + while attempt <= self.MAX_ATTEMPTS: + # Perform the request + try: + opener = self._build_opener(FormPostHandler) + resp = opener.open(url, params) + result = resp.read() + # response headers are in str(resp.info()).splitlines() + except urllib.error.URLError as e: + LOG.debug("Got a %s response. Waiting and retrying..." % e) + time.sleep(float(attempt) * self.BACKOFF) + attempt += 1 + continue + except urllib.error.HTTPError as e: + if e.code == 500: + raise ShotgunError( + "Server encountered an internal error. " + "\n%s\n(%s)\n%s\n\n" + % (url, self._sanitize_auth_params(params), e) + ) + else: + raise ShotgunError("Unanticipated error occurred %s" % (e)) + + return sgutils.ensure_text(result) + else: + raise ShotgunError("Max attemps limit reached.")
+ + +class CACertsHTTPSConnection(http_client.HTTPConnection): + """ " + This class allows to create an HTTPS connection that uses the custom certificates + passed in. + """ + + default_port = http_client.HTTPS_PORT + + def __init__(self, *args, **kwargs): + """ + :param args: Positional arguments passed down to the base class. + :param ca_certs: Path to the custom CA certs file. + :param kwargs: Keyword arguments passed down to the bas class + """ + # Pop that argument, + self.__ca_certs = kwargs.pop("ca_certs") + super().__init__(self, *args, **kwargs) + + def connect(self): + "Connect to a host on a given (SSL) port." + super().connect(self) + # Now that the regular HTTP socket has been created, wrap it with our SSL certs. + if six.PY38: + context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) + context.verify_mode = ssl.CERT_REQUIRED + context.check_hostname = False + if self.__ca_certs: + context.load_verify_locations(self.__ca_certs) + self.sock = context.wrap_socket(self.sock) + else: + self.sock = ssl.wrap_socket( + self.sock, ca_certs=self.__ca_certs, cert_reqs=ssl.CERT_REQUIRED + ) + + +class CACertsHTTPSHandler(urllib.request.HTTPHandler): + """ + Handler that ensures https connections are created with the custom CA certs. + """ + + def __init__(self, cacerts): + super().__init__(self) + self.__ca_certs = cacerts + + def https_open(self, req): + return self.do_open(self.create_https_connection, req) + + def create_https_connection(self, *args, **kwargs): + return CACertsHTTPSConnection(*args, ca_certs=self.__ca_certs, **kwargs) + + +# Helpers from the previous API, left as is. +# Based on http://code.activestate.com/recipes/146306/ +class FormPostHandler(urllib.request.BaseHandler): + """ + Handler for multipart form data + """ + + handler_order = urllib.request.HTTPHandler.handler_order - 10 # needs to run first + + def http_request(self, request): + # get_data was removed in 3.4. since we're testing against 3.6 and + # 3.7, this should be sufficient. + if six.PY3: + data = request.data + else: + data = request.get_data() + if data is not None and not isinstance(data, str): + files = [] + params = [] + for key, value in data.items(): + if isinstance(value, sgsix.file_types): + files.append((key, value)) + else: + params.append((key, value)) + if not files: + data = sgutils.ensure_binary( + urllib.parse.urlencode(params, True) + ) # sequencing on + else: + boundary, data = self.encode(params, files) + content_type = "multipart/form-data; boundary=%s" % boundary + request.add_unredirected_header("Content-Type", content_type) + # add_data was removed in 3.4. since we're testing against 3.6 and + # 3.7, this should be sufficient. + if six.PY3: + request.data = data + else: + request.add_data(data) + return request + + def encode(self, params, files, boundary=None, buffer=None): + if boundary is None: + # Per https://stackoverflow.com/a/27174474 + # use a random string as the boundary if none was provided -- + # use uuid since mimetools no longer exists in Python 3. + # We'll do this across both python 2/3 rather than add more branching. + boundary = uuid.uuid4() + if buffer is None: + buffer = BytesIO() + for key, value in params: + if not isinstance(value, str): + # If value is not a string (e.g. int) cast to text + value = str(value) + value = sgutils.ensure_text(value) + key = sgutils.ensure_text(key) + + buffer.write(sgutils.ensure_binary("--%s\r\n" % boundary)) + buffer.write( + sgutils.ensure_binary('Content-Disposition: form-data; name="%s"' % key) + ) + buffer.write(sgutils.ensure_binary("\r\n\r\n%s\r\n" % value)) + for key, fd in files: + # On Windows, it's possible that we were forced to open a file + # with non-ascii characters as unicode. In that case, we need to + # encode it as a utf-8 string to remove unicode from the equation. + # If we don't, the mix of unicode and strings going into the + # buffer can cause UnicodeEncodeErrors to be raised. + filename = fd.name + filename = sgutils.ensure_text(filename) + filename = filename.split("/")[-1] + key = sgutils.ensure_text(key) + content_type = mimetypes.guess_type(filename)[0] + content_type = content_type or "application/octet-stream" + file_size = os.fstat(fd.fileno())[stat.ST_SIZE] + buffer.write(sgutils.ensure_binary("--%s\r\n" % boundary)) + c_dis = 'Content-Disposition: form-data; name="%s"; filename="%s"%s' + content_disposition = c_dis % (key, filename, "\r\n") + buffer.write(sgutils.ensure_binary(content_disposition)) + buffer.write(sgutils.ensure_binary("Content-Type: %s\r\n" % content_type)) + buffer.write(sgutils.ensure_binary("Content-Length: %s\r\n" % file_size)) + + buffer.write(sgutils.ensure_binary("\r\n")) + fd.seek(0) + shutil.copyfileobj(fd, buffer) + buffer.write(sgutils.ensure_binary("\r\n")) + buffer.write(sgutils.ensure_binary("--%s--\r\n\r\n" % boundary)) + buffer = buffer.getvalue() + return boundary, buffer + + def https_request(self, request): + return self.http_request(request) + + +def _translate_filters(filters, filter_operator): + """ + Translate filters params into data structure expected by rpc call. + """ + wrapped_filters = {"filter_operator": filter_operator or "all", "filters": filters} + + return _translate_filters_dict(wrapped_filters) + + +def _translate_filters_dict(sg_filter): + new_filters = {} + filter_operator = sg_filter.get("filter_operator") + + if filter_operator == "all" or filter_operator == "and": + new_filters["logical_operator"] = "and" + elif filter_operator == "any" or filter_operator == "or": + new_filters["logical_operator"] = "or" + else: + raise ShotgunError("Invalid filter_operator %s" % filter_operator) + + if not isinstance(sg_filter["filters"], (list, tuple)): + raise ShotgunError( + "Invalid filters, expected a list or a tuple, got %s" % sg_filter["filters"] + ) + + new_filters["conditions"] = _translate_filters_list(sg_filter["filters"]) + + return new_filters + + +def _translate_filters_list(filters): + conditions = [] + + for sg_filter in filters: + if isinstance(sg_filter, (list, tuple)): + conditions.append(_translate_filters_simple(sg_filter)) + elif isinstance(sg_filter, dict): + conditions.append(_translate_filters_dict(sg_filter)) + else: + raise ShotgunError( + "Invalid filters, expected a list, tuple or dict, got %s" % sg_filter + ) + + return conditions + + +def _translate_filters_simple(sg_filter): + condition = {"path": sg_filter[0], "relation": sg_filter[1]} + + values = sg_filter[2:] + if len(values) == 1 and isinstance(values[0], (list, tuple)): + values = values[0] + + # Payload optimization: Do not send a full object + # just send the `type` and `id` when combining related queries + global SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION + if ( + not SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION + and condition["path"] != "id" + and condition["relation"] in ["is", "is_not", "in", "not_in"] + and isinstance(values[0], dict) + ): + values = [_get_type_and_id_from_value(v) for v in values] + + condition["values"] = values + + return condition + + +def _version_str(version): + """ + Convert a tuple of int's to a '.' separated str. + """ + return ".".join(map(str, version)) + + +def _get_type_and_id_from_value(value): + """ + For an entity dictionary, returns a new dictionary with only the type and id keys. + If any of these keys are not present, the original dictionary is returned. + """ + try: + if isinstance(value, dict): + return {"type": value["type"], "id": value["id"]} + elif isinstance(value, list): + return [{"type": v["type"], "id": v["id"]} for v in value] + except (KeyError, TypeError): + LOG.debug(f"Could not optimize entity value {value}") + + return value +
+ +
+
+
+ +
+ +
+

© Copyright 2025, Autodesk.

+
+ + + +
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/docs/advanced.rst b/_sources/advanced.rst.txt similarity index 100% rename from docs/advanced.rst rename to _sources/advanced.rst.txt diff --git a/docs/advanced/iron_python.rst b/_sources/advanced/iron_python.rst.txt similarity index 100% rename from docs/advanced/iron_python.rst rename to _sources/advanced/iron_python.rst.txt diff --git a/docs/advanced/packaging.rst b/_sources/advanced/packaging.rst.txt similarity index 100% rename from docs/advanced/packaging.rst rename to _sources/advanced/packaging.rst.txt diff --git a/docs/authentication.rst b/_sources/authentication.rst.txt similarity index 100% rename from docs/authentication.rst rename to _sources/authentication.rst.txt diff --git a/docs/changelog.rst b/_sources/changelog.rst.txt similarity index 100% rename from docs/changelog.rst rename to _sources/changelog.rst.txt diff --git a/docs/cookbook.rst b/_sources/cookbook.rst.txt similarity index 100% rename from docs/cookbook.rst rename to _sources/cookbook.rst.txt diff --git a/docs/cookbook/attachments.rst b/_sources/cookbook/attachments.rst.txt similarity index 100% rename from docs/cookbook/attachments.rst rename to _sources/cookbook/attachments.rst.txt diff --git a/docs/cookbook/examples/ami_handler.rst b/_sources/cookbook/examples/ami_handler.rst.txt similarity index 100% rename from docs/cookbook/examples/ami_handler.rst rename to _sources/cookbook/examples/ami_handler.rst.txt diff --git a/docs/cookbook/examples/ami_version_packager.rst b/_sources/cookbook/examples/ami_version_packager.rst.txt similarity index 100% rename from docs/cookbook/examples/ami_version_packager.rst rename to _sources/cookbook/examples/ami_version_packager.rst.txt diff --git a/docs/cookbook/examples/basic_create_shot.rst b/_sources/cookbook/examples/basic_create_shot.rst.txt similarity index 100% rename from docs/cookbook/examples/basic_create_shot.rst rename to _sources/cookbook/examples/basic_create_shot.rst.txt diff --git a/docs/cookbook/examples/basic_create_shot_task_template.rst b/_sources/cookbook/examples/basic_create_shot_task_template.rst.txt similarity index 100% rename from docs/cookbook/examples/basic_create_shot_task_template.rst rename to _sources/cookbook/examples/basic_create_shot_task_template.rst.txt diff --git a/docs/cookbook/examples/basic_create_version_link_shot.rst b/_sources/cookbook/examples/basic_create_version_link_shot.rst.txt similarity index 100% rename from docs/cookbook/examples/basic_create_version_link_shot.rst rename to _sources/cookbook/examples/basic_create_version_link_shot.rst.txt diff --git a/docs/cookbook/examples/basic_delete_shot.rst b/_sources/cookbook/examples/basic_delete_shot.rst.txt similarity index 100% rename from docs/cookbook/examples/basic_delete_shot.rst rename to _sources/cookbook/examples/basic_delete_shot.rst.txt diff --git a/docs/cookbook/examples/basic_find_shot.rst b/_sources/cookbook/examples/basic_find_shot.rst.txt similarity index 100% rename from docs/cookbook/examples/basic_find_shot.rst rename to _sources/cookbook/examples/basic_find_shot.rst.txt diff --git a/docs/cookbook/examples/basic_sg_instance.rst b/_sources/cookbook/examples/basic_sg_instance.rst.txt similarity index 100% rename from docs/cookbook/examples/basic_sg_instance.rst rename to _sources/cookbook/examples/basic_sg_instance.rst.txt diff --git a/docs/cookbook/examples/basic_update_shot.rst b/_sources/cookbook/examples/basic_update_shot.rst.txt similarity index 100% rename from docs/cookbook/examples/basic_update_shot.rst rename to _sources/cookbook/examples/basic_update_shot.rst.txt diff --git a/docs/cookbook/examples/basic_upload_thumbnail_version.rst b/_sources/cookbook/examples/basic_upload_thumbnail_version.rst.txt similarity index 100% rename from docs/cookbook/examples/basic_upload_thumbnail_version.rst rename to _sources/cookbook/examples/basic_upload_thumbnail_version.rst.txt diff --git a/docs/cookbook/examples/svn_integration.rst b/_sources/cookbook/examples/svn_integration.rst.txt similarity index 100% rename from docs/cookbook/examples/svn_integration.rst rename to _sources/cookbook/examples/svn_integration.rst.txt diff --git a/docs/cookbook/smart_cut_fields.rst b/_sources/cookbook/smart_cut_fields.rst.txt similarity index 100% rename from docs/cookbook/smart_cut_fields.rst rename to _sources/cookbook/smart_cut_fields.rst.txt diff --git a/docs/cookbook/tasks.rst b/_sources/cookbook/tasks.rst.txt similarity index 100% rename from docs/cookbook/tasks.rst rename to _sources/cookbook/tasks.rst.txt diff --git a/docs/cookbook/tasks/split_tasks.rst b/_sources/cookbook/tasks/split_tasks.rst.txt similarity index 100% rename from docs/cookbook/tasks/split_tasks.rst rename to _sources/cookbook/tasks/split_tasks.rst.txt diff --git a/docs/cookbook/tasks/task_dependencies.rst b/_sources/cookbook/tasks/task_dependencies.rst.txt similarity index 100% rename from docs/cookbook/tasks/task_dependencies.rst rename to _sources/cookbook/tasks/task_dependencies.rst.txt diff --git a/docs/cookbook/tasks/updating_tasks.rst b/_sources/cookbook/tasks/updating_tasks.rst.txt similarity index 100% rename from docs/cookbook/tasks/updating_tasks.rst rename to _sources/cookbook/tasks/updating_tasks.rst.txt diff --git a/docs/cookbook/tutorials.rst b/_sources/cookbook/tutorials.rst.txt similarity index 100% rename from docs/cookbook/tutorials.rst rename to _sources/cookbook/tutorials.rst.txt diff --git a/docs/cookbook/usage_tips.rst b/_sources/cookbook/usage_tips.rst.txt similarity index 100% rename from docs/cookbook/usage_tips.rst rename to _sources/cookbook/usage_tips.rst.txt diff --git a/docs/index.rst b/_sources/index.rst.txt similarity index 100% rename from docs/index.rst rename to _sources/index.rst.txt diff --git a/docs/installation.rst b/_sources/installation.rst.txt similarity index 100% rename from docs/installation.rst rename to _sources/installation.rst.txt diff --git a/docs/reference.rst b/_sources/reference.rst.txt similarity index 100% rename from docs/reference.rst rename to _sources/reference.rst.txt diff --git a/_static/_sphinx_javascript_frameworks_compat.js b/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..81415803e --- /dev/null +++ b/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * 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 new file mode 100644 index 000000000..7577acb1a --- /dev/null +++ b/_static/basic.css @@ -0,0 +1,903 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2023 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; +} + +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; +} + +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +nav.contents, +aside.topic, +div.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, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.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; +} + +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; +} + +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 > 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/badge_only.css b/_static/css/badge_only.css new file mode 100644 index 000000000..c718cee44 --- /dev/null +++ b/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff b/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 000000000..6cb600001 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Bold.woff2 b/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 000000000..7059e2314 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff b/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 000000000..f815f63f9 Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/_static/css/fonts/Roboto-Slab-Regular.woff2 b/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 000000000..f2c76e5bd Binary files /dev/null and b/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/_static/css/fonts/fontawesome-webfont.eot b/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 000000000..e9f60ca95 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/_static/css/fonts/fontawesome-webfont.svg b/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 000000000..855c845e5 --- /dev/null +++ b/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/_static/css/fonts/fontawesome-webfont.ttf b/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 000000000..35acda2fa Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/_static/css/fonts/fontawesome-webfont.woff b/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 000000000..400014a4b Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/_static/css/fonts/fontawesome-webfont.woff2 b/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 000000000..4d13fc604 Binary files /dev/null and b/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/_static/css/fonts/lato-bold-italic.woff b/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 000000000..88ad05b9f Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff differ diff --git a/_static/css/fonts/lato-bold-italic.woff2 b/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 000000000..c4e3d804b Binary files /dev/null and b/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/_static/css/fonts/lato-bold.woff b/_static/css/fonts/lato-bold.woff new file mode 100644 index 000000000..c6dff51f0 Binary files /dev/null and b/_static/css/fonts/lato-bold.woff differ diff --git a/_static/css/fonts/lato-bold.woff2 b/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 000000000..bb195043c Binary files /dev/null and b/_static/css/fonts/lato-bold.woff2 differ diff --git a/_static/css/fonts/lato-normal-italic.woff b/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 000000000..76114bc03 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff differ diff --git a/_static/css/fonts/lato-normal-italic.woff2 b/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 000000000..3404f37e2 Binary files /dev/null and b/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/_static/css/fonts/lato-normal.woff b/_static/css/fonts/lato-normal.woff new file mode 100644 index 000000000..ae1307ff5 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff differ diff --git a/_static/css/fonts/lato-normal.woff2 b/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 000000000..3bf984332 Binary files /dev/null and b/_static/css/fonts/lato-normal.woff2 differ diff --git a/_static/css/theme.css b/_static/css/theme.css new file mode 100644 index 000000000..19a446a0e --- /dev/null +++ b/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/_static/doctools.js b/_static/doctools.js new file mode 100644 index 000000000..d06a71d75 --- /dev/null +++ b/_static/doctools.js @@ -0,0 +1,156 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + 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; + }, + + /** + * 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; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + 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; + } + } + + // 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 new file mode 100644 index 000000000..f01f5c470 --- /dev/null +++ b/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'v3.8.3', + 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: true, +}; \ No newline at end of file diff --git a/_static/favicon.ico b/_static/favicon.ico new file mode 100644 index 000000000..e3a79b92d Binary files /dev/null and b/_static/favicon.ico differ diff --git a/_static/file.png b/_static/file.png new file mode 100644 index 000000000..a858a410e Binary files /dev/null and b/_static/file.png differ diff --git a/_static/graphviz.css b/_static/graphviz.css new file mode 100644 index 000000000..8d81c02ed --- /dev/null +++ b/_static/graphviz.css @@ -0,0 +1,19 @@ +/* + * graphviz.css + * ~~~~~~~~~~~~ + * + * Sphinx stylesheet -- graphviz extension. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +img.graphviz { + border: 0; + max-width: 100%; +} + +object.graphviz { + max-width: 100%; +} diff --git a/_static/jquery.js b/_static/jquery.js new file mode 100644 index 000000000..c4c6022f2 --- /dev/null +++ b/_static/jquery.js @@ -0,0 +1,2 @@ +/*! jQuery v3.6.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.0",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/html5shiv.min.js b/_static/js/html5shiv.min.js new file mode 100644 index 000000000..cd1c674f5 --- /dev/null +++ b/_static/js/html5shiv.min.js @@ -0,0 +1,4 @@ +/** +* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed +*/ +!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document); \ No newline at end of file diff --git a/_static/js/theme.js b/_static/js/theme.js new file mode 100644 index 000000000..1fddb6ee4 --- /dev/null +++ b/_static/js/theme.js @@ -0,0 +1 @@ +!function(n){var e={};function t(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return n[i].call(o.exports,o,o.exports,t),o.l=!0,o.exports}t.m=n,t.c=e,t.d=function(n,e,i){t.o(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:i})},t.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},t.t=function(n,e){if(1&e&&(n=t(n)),8&e)return n;if(4&e&&"object"==typeof n&&n&&n.__esModule)return n;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:n}),2&e&&"string"!=typeof n)for(var o in n)t.d(i,o,function(e){return n[e]}.bind(null,o));return i},t.n=function(n){var e=n&&n.__esModule?function(){return n.default}:function(){return n};return t.d(e,"a",e),e},t.o=function(n,e){return Object.prototype.hasOwnProperty.call(n,e)},t.p="",t(t.s=0)}([function(n,e,t){t(1),n.exports=t(3)},function(n,e,t){(function(){var e="undefined"!=typeof window?window.jQuery:t(2);n.exports.ThemeNav={navBar:null,win:null,winScroll:!1,winResize:!1,linkScroll:!1,winPosition:0,winHeight:null,docHeight:null,isRunning:!1,enable:function(n){var t=this;void 0===n&&(n=!0),t.isRunning||(t.isRunning=!0,e((function(e){t.init(e),t.reset(),t.win.on("hashchange",t.reset),n&&t.win.on("scroll",(function(){t.linkScroll||t.winScroll||(t.winScroll=!0,requestAnimationFrame((function(){t.onScroll()})))})),t.win.on("resize",(function(){t.winResize||(t.winResize=!0,requestAnimationFrame((function(){t.onResize()})))})),t.onResize()})))},enableSticky:function(){this.enable(!0)},init:function(n){n(document);var e=this;this.navBar=n("div.wy-side-scroll:first"),this.win=n(window),n(document).on("click","[data-toggle='wy-nav-top']",(function(){n("[data-toggle='wy-nav-shift']").toggleClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift")})).on("click",".wy-menu-vertical .current ul li a",(function(){var t=n(this);n("[data-toggle='wy-nav-shift']").removeClass("shift"),n("[data-toggle='rst-versions']").toggleClass("shift"),e.toggleCurrent(t),e.hashChange()})).on("click","[data-toggle='rst-current-version']",(function(){n("[data-toggle='rst-versions']").toggleClass("shift-up")})),n("table.docutils:not(.field-list,.footnote,.citation)").wrap("
"),n("table.docutils.footnote").wrap("
"),n("table.docutils.citation").wrap("
"),n(".wy-menu-vertical ul").not(".simple").siblings("a").each((function(){var t=n(this);expand=n(''),expand.on("click",(function(n){return e.toggleCurrent(t),n.stopPropagation(),!1})),t.prepend(expand)}))},reset:function(){var n=encodeURI(window.location.hash)||"#";try{var e=$(".wy-menu-vertical"),t=e.find('[href="'+n+'"]');if(0===t.length){var i=$('.document [id="'+n.substring(1)+'"]').closest("div.section");0===(t=e.find('[href="#'+i.attr("id")+'"]')).length&&(t=e.find('[href="#"]'))}if(t.length>0){$(".wy-menu-vertical .current").removeClass("current").attr("aria-expanded","false"),t.addClass("current").attr("aria-expanded","true"),t.closest("li.toctree-l1").parent().addClass("current").attr("aria-expanded","true");for(let n=1;n<=10;n++)t.closest("li.toctree-l"+n).addClass("current").attr("aria-expanded","true");t[0].scrollIntoView()}}catch(n){console.log("Error expanding nav for anchor",n)}},onScroll:function(){this.winScroll=!1;var n=this.win.scrollTop(),e=n+this.winHeight,t=this.navBar.scrollTop()+(n-this.winPosition);n<0||e>this.docHeight||(this.navBar.scrollTop(t),this.winPosition=n)},onResize:function(){this.winResize=!1,this.winHeight=this.win.height(),this.docHeight=$(document).height()},hashChange:function(){this.linkScroll=!0,this.win.one("hashchange",(function(){this.linkScroll=!1}))},toggleCurrent:function(n){var e=n.closest("li");e.siblings("li.current").removeClass("current").attr("aria-expanded","false"),e.siblings().find("li.current").removeClass("current").attr("aria-expanded","false");var t=e.find("> ul li");t.length&&(t.removeClass("current").attr("aria-expanded","false"),e.toggleClass("current").attr("aria-expanded",(function(n,e){return"true"==e?"false":"true"})))}},"undefined"!=typeof window&&(window.SphinxRtdTheme={Navigation:n.exports.ThemeNav,StickyNav:n.exports.ThemeNav}),function(){for(var n=0,e=["ms","moz","webkit","o"],t=0;t0 + var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 + var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 + var s_v = "^(" + C + ")?" + v; // vowel in stem + + this.stemWord = function (w) { + var stem; + var suffix; + var firstch; + var origword = w; + + if (w.length < 3) + return w; + + var re; + var re2; + var re3; + var re4; + + firstch = w.substr(0,1); + if (firstch == "y") + w = firstch.toUpperCase() + w.substr(1); + + // Step 1a + re = /^(.+?)(ss|i)es$/; + re2 = /^(.+?)([^s])s$/; + + if (re.test(w)) + w = w.replace(re,"$1$2"); + else if (re2.test(w)) + w = w.replace(re2,"$1$2"); + + // Step 1b + re = /^(.+?)eed$/; + re2 = /^(.+?)(ed|ing)$/; + if (re.test(w)) { + var fp = re.exec(w); + re = new RegExp(mgr0); + if (re.test(fp[1])) { + re = /.$/; + w = w.replace(re,""); + } + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1]; + re2 = new RegExp(s_v); + if (re2.test(stem)) { + w = stem; + re2 = /(at|bl|iz)$/; + re3 = new RegExp("([^aeiouylsz])\\1$"); + re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re2.test(w)) + w = w + "e"; + else if (re3.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + else if (re4.test(w)) + w = w + "e"; + } + } + + // Step 1c + re = /^(.+?)y$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(s_v); + if (re.test(stem)) + w = stem + "i"; + } + + // Step 2 + re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step2list[suffix]; + } + + // Step 3 + re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + suffix = fp[2]; + re = new RegExp(mgr0); + if (re.test(stem)) + w = stem + step3list[suffix]; + } + + // Step 4 + re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; + re2 = /^(.+?)(s|t)(ion)$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + if (re.test(stem)) + w = stem; + } + else if (re2.test(w)) { + var fp = re2.exec(w); + stem = fp[1] + fp[2]; + re2 = new RegExp(mgr1); + if (re2.test(stem)) + w = stem; + } + + // Step 5 + re = /^(.+?)e$/; + if (re.test(w)) { + var fp = re.exec(w); + stem = fp[1]; + re = new RegExp(mgr1); + re2 = new RegExp(meq1); + re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); + if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) + w = stem; + } + re = /ll$/; + re2 = new RegExp(mgr1); + if (re.test(w) && re2.test(w)) { + re = /.$/; + w = w.replace(re,""); + } + + // and turn initial Y back to y + if (firstch == "y") + w = firstch.toLowerCase() + w.substr(1); + return w; + } +} + diff --git a/_static/logo.png b/_static/logo.png new file mode 100644 index 000000000..41a70b9c8 Binary files /dev/null and b/_static/logo.png differ diff --git a/_static/logo@2x.png b/_static/logo@2x.png new file mode 100644 index 000000000..d7df097ba Binary files /dev/null and b/_static/logo@2x.png differ diff --git a/_static/logo_sg@2x.png b/_static/logo_sg@2x.png new file mode 100644 index 000000000..35225eecf Binary files /dev/null and b/_static/logo_sg@2x.png differ diff --git a/_static/minus.png b/_static/minus.png new file mode 100644 index 000000000..d96755fda Binary files /dev/null and b/_static/minus.png differ diff --git a/_static/plus.png b/_static/plus.png new file mode 100644 index 000000000..7107cec93 Binary files /dev/null and b/_static/plus.png differ diff --git a/_static/pygments.css b/_static/pygments.css new file mode 100644 index 000000000..6f8b210a1 --- /dev/null +++ b/_static/pygments.css @@ -0,0 +1,75 @@ +pre { line-height: 125%; } +td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #3D7B7B; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #F00 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666 } /* Operator */ +.highlight .ch { color: #3D7B7B; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #3D7B7B; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #9C6500 } /* Comment.Preproc */ +.highlight .cpf { color: #3D7B7B; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #3D7B7B; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #3D7B7B; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */ +.highlight .gr { color: #E40000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #008400 } /* Generic.Inserted */ +.highlight .go { color: #717171 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #04D } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #687822 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #00F; font-weight: bold } /* Name.Class */ +.highlight .no { color: #800 } /* Name.Constant */ +.highlight .nd { color: #A2F } /* Name.Decorator */ +.highlight .ni { color: #717171; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #CB3F38; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #00F } /* Name.Function */ +.highlight .nl { color: #767600 } /* Name.Label */ +.highlight .nn { color: #00F; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #A2F; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #BBB } /* Text.Whitespace */ +.highlight .mb { color: #666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666 } /* Literal.Number.Float */ +.highlight .mh { color: #666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666 } /* Literal.Number.Oct */ +.highlight .sa { color: #BA2121 } /* Literal.String.Affix */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .dl { color: #BA2121 } /* Literal.String.Delimiter */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #AA5D1F; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #A45A77; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #A45A77 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .fm { color: #00F } /* Name.Function.Magic */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .vm { color: #19177C } /* Name.Variable.Magic */ +.highlight .il { color: #666 } /* Literal.Number.Integer.Long */ \ No newline at end of file diff --git a/_static/searchtools.js b/_static/searchtools.js new file mode 100644 index 000000000..97d56a74d --- /dev/null +++ b/_static/searchtools.js @@ -0,0 +1,566 @@ +/* + * searchtools.js + * ~~~~~~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for the full-text search. + * + * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +/** + * Simple result scoring code. + */ +if (typeof Scorer === "undefined") { + var Scorer = { + // Implement the following function to further tweak the score for each result + // The function takes a result array [docname, title, anchor, descr, score, filename] + // and returns the new score. + /* + score: result => { + const [docname, title, anchor, descr, score, filename] = result + return score + }, + */ + + // query matches the full name of an object + objNameMatch: 11, + // or matches in the last dotted part of the object name + objPartialMatch: 6, + // Additive scores depending on the priority of the object + objPrio: { + 0: 15, // used to be importantResults + 1: 5, // used to be objectResults + 2: -5, // used to be unimportantResults + }, + // Used when the priority is not in the mapping. + objPrioDefault: 0, + + // query found in title + title: 15, + partialTitle: 7, + // query found in terms + term: 5, + partialTerm: 2, + }; +} + +const _removeChildren = (element) => { + while (element && element.lastChild) element.removeChild(element.lastChild); +}; + +/** + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping + */ +const _escapeRegExp = (string) => + string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string + +const _displayItem = (item, searchTerms) => { + const docBuilder = DOCUMENTATION_OPTIONS.BUILDER; + const docUrlRoot = DOCUMENTATION_OPTIONS.URL_ROOT; + const docFileSuffix = DOCUMENTATION_OPTIONS.FILE_SUFFIX; + const docLinkSuffix = DOCUMENTATION_OPTIONS.LINK_SUFFIX; + const showSearchSummary = DOCUMENTATION_OPTIONS.SHOW_SEARCH_SUMMARY; + + const [docName, title, anchor, descr, score, _filename] = item; + + let listItem = document.createElement("li"); + let requestUrl; + let linkUrl; + if (docBuilder === "dirhtml") { + // dirhtml builder + let dirname = docName + "/"; + if (dirname.match(/\/index\/$/)) + dirname = dirname.substring(0, dirname.length - 6); + else if (dirname === "index/") dirname = ""; + requestUrl = docUrlRoot + dirname; + linkUrl = requestUrl; + } else { + // normal html builders + requestUrl = docUrlRoot + docName + docFileSuffix; + linkUrl = docName + docLinkSuffix; + } + let linkEl = listItem.appendChild(document.createElement("a")); + linkEl.href = linkUrl + anchor; + linkEl.dataset.score = score; + linkEl.innerHTML = title; + if (descr) + listItem.appendChild(document.createElement("span")).innerHTML = + " (" + descr + ")"; + else if (showSearchSummary) + fetch(requestUrl) + .then((responseData) => responseData.text()) + .then((data) => { + if (data) + listItem.appendChild( + Search.makeSearchSummary(data, searchTerms) + ); + }); + Search.output.appendChild(listItem); +}; +const _finishSearch = (resultCount) => { + Search.stopPulse(); + Search.title.innerText = _("Search Results"); + if (!resultCount) + Search.status.innerText = Documentation.gettext( + "Your search did not match any documents. Please make sure that all words are spelled correctly and that you've selected enough categories." + ); + else + Search.status.innerText = _( + `Search finished, found ${resultCount} page(s) matching the search query.` + ); +}; +const _displayNextItem = ( + results, + resultCount, + searchTerms +) => { + // results left, load the summary and display it + // this is intended to be dynamic (don't sub resultsCount) + if (results.length) { + _displayItem(results.pop(), searchTerms); + setTimeout( + () => _displayNextItem(results, resultCount, searchTerms), + 5 + ); + } + // search finished, update title and status message + else _finishSearch(resultCount); +}; + +/** + * Default splitQuery function. Can be overridden in ``sphinx.search`` with a + * custom function per language. + * + * The regular expression works by splitting the string on consecutive characters + * that are not Unicode letters, numbers, underscores, or emoji characters. + * This is the same as ``\W+`` in Python, preserving the surrogate pair area. + */ +if (typeof splitQuery === "undefined") { + var splitQuery = (query) => query + .split(/[^\p{Letter}\p{Number}_\p{Emoji_Presentation}]+/gu) + .filter(term => term) // remove remaining empty strings +} + +/** + * Search Module + */ +const Search = { + _index: null, + _queued_query: null, + _pulse_status: -1, + + htmlToText: (htmlString) => { + const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html'); + htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() }); + const docContent = htmlElement.querySelector('[role="main"]'); + if (docContent !== undefined) return docContent.textContent; + console.warn( + "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you check your theme or template." + ); + return ""; + }, + + init: () => { + const query = new URLSearchParams(window.location.search).get("q"); + document + .querySelectorAll('input[name="q"]') + .forEach((el) => (el.value = query)); + if (query) Search.performSearch(query); + }, + + loadIndex: (url) => + (document.body.appendChild(document.createElement("script")).src = url), + + setIndex: (index) => { + Search._index = index; + if (Search._queued_query !== null) { + const query = Search._queued_query; + Search._queued_query = null; + Search.query(query); + } + }, + + hasIndex: () => Search._index !== null, + + deferQuery: (query) => (Search._queued_query = query), + + stopPulse: () => (Search._pulse_status = -1), + + startPulse: () => { + if (Search._pulse_status >= 0) return; + + const pulse = () => { + Search._pulse_status = (Search._pulse_status + 1) % 4; + Search.dots.innerText = ".".repeat(Search._pulse_status); + if (Search._pulse_status >= 0) window.setTimeout(pulse, 500); + }; + pulse(); + }, + + /** + * perform a search for something (or wait until index is loaded) + */ + performSearch: (query) => { + // create the required interface elements + const searchText = document.createElement("h2"); + searchText.textContent = _("Searching"); + const searchSummary = document.createElement("p"); + searchSummary.classList.add("search-summary"); + searchSummary.innerText = ""; + const searchList = document.createElement("ul"); + searchList.classList.add("search"); + + const out = document.getElementById("search-results"); + Search.title = out.appendChild(searchText); + Search.dots = Search.title.appendChild(document.createElement("span")); + Search.status = out.appendChild(searchSummary); + Search.output = out.appendChild(searchList); + + const searchProgress = document.getElementById("search-progress"); + // Some themes don't use the search progress node + if (searchProgress) { + searchProgress.innerText = _("Preparing search..."); + } + Search.startPulse(); + + // index already loaded, the browser was quick! + if (Search.hasIndex()) Search.query(query); + else Search.deferQuery(query); + }, + + /** + * execute search (requires search index to be loaded) + */ + query: (query) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + const allTitles = Search._index.alltitles; + const indexEntries = Search._index.indexentries; + + // stem the search terms and add them to the correct list + const stemmer = new Stemmer(); + const searchTerms = new Set(); + const excludedTerms = new Set(); + const highlightTerms = new Set(); + const objectTerms = new Set(splitQuery(query.toLowerCase().trim())); + splitQuery(query.trim()).forEach((queryTerm) => { + const queryTermLower = queryTerm.toLowerCase(); + + // maybe skip this "word" + // stopwords array is from language_data.js + if ( + stopwords.indexOf(queryTermLower) !== -1 || + queryTerm.match(/^\d+$/) + ) + return; + + // stem the word + let word = stemmer.stemWord(queryTermLower); + // select the correct list + if (word[0] === "-") excludedTerms.add(word.substr(1)); + else { + searchTerms.add(word); + highlightTerms.add(queryTermLower); + } + }); + + if (SPHINX_HIGHLIGHT_ENABLED) { // set in sphinx_highlight.js + localStorage.setItem("sphinx_highlight_terms", [...highlightTerms].join(" ")) + } + + // console.debug("SEARCH: searching for:"); + // console.info("required: ", [...searchTerms]); + // console.info("excluded: ", [...excludedTerms]); + + // array of [docname, title, anchor, descr, score, filename] + let results = []; + _removeChildren(document.getElementById("search-progress")); + + const queryLower = query.toLowerCase(); + for (const [title, foundTitles] of Object.entries(allTitles)) { + if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) { + for (const [file, id] of foundTitles) { + let score = Math.round(100 * queryLower.length / title.length) + results.push([ + docNames[file], + titles[file] !== title ? `${titles[file]} > ${title}` : title, + id !== null ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // search for explicit entries in index directives + for (const [entry, foundEntries] of Object.entries(indexEntries)) { + if (entry.includes(queryLower) && (queryLower.length >= entry.length/2)) { + for (const [file, id] of foundEntries) { + let score = Math.round(100 * queryLower.length / entry.length) + results.push([ + docNames[file], + titles[file], + id ? "#" + id : "", + null, + score, + filenames[file], + ]); + } + } + } + + // lookup as object + objectTerms.forEach((term) => + results.push(...Search.performObjectSearch(term, objectTerms)) + ); + + // lookup as search terms in fulltext + results.push(...Search.performTermsSearch(searchTerms, excludedTerms)); + + // let the scorer override scores with a custom scoring function + if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item))); + + // now sort the results by score (in opposite order of appearance, since the + // display function below uses pop() to retrieve items) and then + // alphabetically + results.sort((a, b) => { + const leftScore = a[4]; + const rightScore = b[4]; + if (leftScore === rightScore) { + // same score: sort alphabetically + const leftTitle = a[1].toLowerCase(); + const rightTitle = b[1].toLowerCase(); + if (leftTitle === rightTitle) return 0; + return leftTitle > rightTitle ? -1 : 1; // inverted is intentional + } + return leftScore > rightScore ? 1 : -1; + }); + + // remove duplicate search results + // note the reversing of results, so that in the case of duplicates, the highest-scoring entry is kept + let seen = new Set(); + results = results.reverse().reduce((acc, result) => { + let resultStr = result.slice(0, 4).concat([result[5]]).map(v => String(v)).join(','); + if (!seen.has(resultStr)) { + acc.push(result); + seen.add(resultStr); + } + return acc; + }, []); + + results = results.reverse(); + + // for debugging + //Search.lastresults = results.slice(); // a copy + // console.info("search results:", Search.lastresults); + + // print the results + _displayNextItem(results, results.length, searchTerms); + }, + + /** + * search for object names + */ + performObjectSearch: (object, objectTerms) => { + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const objects = Search._index.objects; + const objNames = Search._index.objnames; + const titles = Search._index.titles; + + const results = []; + + const objectSearchCallback = (prefix, match) => { + const name = match[4] + const fullname = (prefix ? prefix + "." : "") + name; + const fullnameLower = fullname.toLowerCase(); + if (fullnameLower.indexOf(object) < 0) return; + + let score = 0; + const parts = fullnameLower.split("."); + + // check for different match types: exact matches of full name or + // "last name" (i.e. last dotted part) + if (fullnameLower === object || parts.slice(-1)[0] === object) + score += Scorer.objNameMatch; + else if (parts.slice(-1)[0].indexOf(object) > -1) + score += Scorer.objPartialMatch; // matches in last name + + const objName = objNames[match[1]][2]; + const title = titles[match[0]]; + + // If more than one term searched for, we require other words to be + // found in the name/title/description + const otherTerms = new Set(objectTerms); + otherTerms.delete(object); + if (otherTerms.size > 0) { + const haystack = `${prefix} ${name} ${objName} ${title}`.toLowerCase(); + if ( + [...otherTerms].some((otherTerm) => haystack.indexOf(otherTerm) < 0) + ) + return; + } + + let anchor = match[3]; + if (anchor === "") anchor = fullname; + else if (anchor === "-") anchor = objNames[match[1]][1] + "-" + fullname; + + const descr = objName + _(", in ") + title; + + // add custom score for some objects according to scorer + if (Scorer.objPrio.hasOwnProperty(match[2])) + score += Scorer.objPrio[match[2]]; + else score += Scorer.objPrioDefault; + + results.push([ + docNames[match[0]], + fullname, + "#" + anchor, + descr, + score, + filenames[match[0]], + ]); + }; + Object.keys(objects).forEach((prefix) => + objects[prefix].forEach((array) => + objectSearchCallback(prefix, array) + ) + ); + return results; + }, + + /** + * search for full-text terms in the index + */ + performTermsSearch: (searchTerms, excludedTerms) => { + // prepare search + const terms = Search._index.terms; + const titleTerms = Search._index.titleterms; + const filenames = Search._index.filenames; + const docNames = Search._index.docnames; + const titles = Search._index.titles; + + const scoreMap = new Map(); + const fileMap = new Map(); + + // perform the search on the required terms + searchTerms.forEach((word) => { + const files = []; + const arr = [ + { files: terms[word], score: Scorer.term }, + { files: titleTerms[word], score: Scorer.title }, + ]; + // add support for partial matches + if (word.length > 2) { + const escapedWord = _escapeRegExp(word); + Object.keys(terms).forEach((term) => { + if (term.match(escapedWord) && !terms[word]) + arr.push({ files: terms[term], score: Scorer.partialTerm }); + }); + Object.keys(titleTerms).forEach((term) => { + if (term.match(escapedWord) && !titleTerms[word]) + arr.push({ files: titleTerms[word], score: Scorer.partialTitle }); + }); + } + + // no match but word was a required one + if (arr.every((record) => record.files === undefined)) return; + + // found search word in contents + arr.forEach((record) => { + if (record.files === undefined) return; + + let recordFiles = record.files; + if (recordFiles.length === undefined) recordFiles = [recordFiles]; + files.push(...recordFiles); + + // set score for the word in each file + recordFiles.forEach((file) => { + if (!scoreMap.has(file)) scoreMap.set(file, {}); + scoreMap.get(file)[word] = record.score; + }); + }); + + // create the mapping + files.forEach((file) => { + if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1) + fileMap.get(file).push(word); + else fileMap.set(file, [word]); + }); + }); + + // now check if the files don't contain excluded terms + const results = []; + for (const [file, wordList] of fileMap) { + // check if all requirements are matched + + // as search terms with length < 3 are discarded + const filteredTermCount = [...searchTerms].filter( + (term) => term.length > 2 + ).length; + if ( + wordList.length !== searchTerms.size && + wordList.length !== filteredTermCount + ) + continue; + + // ensure that none of the excluded terms is in the search result + if ( + [...excludedTerms].some( + (term) => + terms[term] === file || + titleTerms[term] === file || + (terms[term] || []).includes(file) || + (titleTerms[term] || []).includes(file) + ) + ) + break; + + // select one (max) score for the file. + const score = Math.max(...wordList.map((w) => scoreMap.get(file)[w])); + // add result to the result list + results.push([ + docNames[file], + titles[file], + "", + null, + score, + filenames[file], + ]); + } + return results; + }, + + /** + * helper function to return a node containing the + * search summary for a given text. keywords is a list + * of stemmed words. + */ + makeSearchSummary: (htmlText, keywords) => { + const text = Search.htmlToText(htmlText); + if (text === "") return null; + + const textLower = text.toLowerCase(); + const actualStartPosition = [...keywords] + .map((k) => textLower.indexOf(k.toLowerCase())) + .filter((i) => i > -1) + .slice(-1)[0]; + const startWithContext = Math.max(actualStartPosition - 120, 0); + + const top = startWithContext === 0 ? "" : "..."; + const tail = startWithContext + 240 < text.length ? "..." : ""; + + let summary = document.createElement("p"); + summary.classList.add("context"); + summary.textContent = top + text.substr(startWithContext, 240).trim() + tail; + + return summary; + }, +}; + +_ready(Search.init); diff --git a/_static/sphinx_highlight.js b/_static/sphinx_highlight.js new file mode 100644 index 000000000..aae669d7e --- /dev/null +++ b/_static/sphinx_highlight.js @@ -0,0 +1,144 @@ +/* Highlighting utilities for Sphinx HTML documentation. */ +"use strict"; + +const SPHINX_HIGHLIGHT_ENABLED = true + +/** + * 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 SphinxHighlight = { + + /** + * highlight the search words provided in localstorage in the text + */ + highlightSearchWords: () => { + if (!SPHINX_HIGHLIGHT_ENABLED) return; // bail if no highlight + + // get and clear terms from localstorage + const url = new URL(window.location); + const highlight = + localStorage.getItem("sphinx_highlight_terms") + || url.searchParams.get("highlight") + || ""; + localStorage.removeItem("sphinx_highlight_terms") + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + + // get individual terms from highlight string + 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")); + localStorage.removeItem("sphinx_highlight_terms") + }, + + initEscapeListener: () => { + // only install a listener if it is really needed + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return; + if (DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS && (event.key === "Escape")) { + SphinxHighlight.hideSearchWords(); + event.preventDefault(); + } + }); + }, +}; + +_ready(SphinxHighlight.highlightSearchWords); +_ready(SphinxHighlight.initEscapeListener); diff --git a/advanced.html b/advanced.html new file mode 100644 index 000000000..1ffc87f7d --- /dev/null +++ b/advanced.html @@ -0,0 +1,187 @@ + + + + + + + + + Advanced Topics — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +
+

Advanced Topics

+

Below are some more advanced topics regarding usage of the Python API. If you would like to see +something that’s missing here, please feel free to contact support at https://knowledge.autodesk.com/contact-support +with your suggestions and we’ll get it added!

+ +
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/advanced/iron_python.html b/advanced/iron_python.html new file mode 100644 index 000000000..9012fa45d --- /dev/null +++ b/advanced/iron_python.html @@ -0,0 +1,206 @@ + + + + + + + + + IronPython — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

IronPython

+

We do not test against IronPython and cannot be sure that we won’t introduce breaking changes or +that we will be compatible with future releases of IronPython. While we don’t officially support +IronPython, we certainly will do our best to figure out any issues that come up while using it and +how to avoid them.

+

As of July 9, 2015 you can look at this fork of the repo to see what changes were needed as of that +date to make things work. The original fork was as of v3.0.20 of the API. Big thanks to our awesome +clients Pixomondo for making their work public and letting us refer to it:

+

https://github.com/Pixomondo/python-api/tree/v3.0.20.ipy

+

v3.0.20 can be used with IronPython with a little bit of added work:

+
    +
  • The Python API uses the zlib module to handle decompressing the gzipped response from the server. +There’s no built-in zlib module in IronPython, but there’s a potential solution from Jeff Hardy at +https://bitbucket.org/jdhardy/ironpythonzlib/src/. And the blog post about it here +http://blog.jdhardy.ca/2008/12/solving-zlib-problem-ironpythonzlib.html

  • +
  • If you encounter any SSL errors like +unknown field: SERIALNUMBER=0123456789 or :SSL3_GET_SERVER_CERTIFICATE:certificate verify failed. +For now you can workaround this problem by disabling ssl certificate validation which we’ve +encountered some intermittent issues with. Set NO_SSL_VALIDATION = True for either case. +See shotgun_api3.shotgun.NO_SSL_VALIDATION

  • +
  • If you encounter LookupError: unknown encoding: idna, you can force utf-8 by changing +iri2uri.py ~ln 71 from authority = authority.encode('idna') to +authority = authority.encode('utf-8')

  • +
  • If you encounter an SSL error such as SSL3_READ_BYTES:sslv3 alert handshake failure, then the +lower level SSL library backing python’s network infrastructure is attempting to connect to our +servers via SSLv3, which is no longer supported. You can use the code from this gist to force the +SSL connections to use a specific protocol. The forked repo linked above has an example of how to +do that to force the use of TLSv1.

  • +
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/advanced/packaging.html b/advanced/packaging.html new file mode 100644 index 000000000..9830f0fe4 --- /dev/null +++ b/advanced/packaging.html @@ -0,0 +1,213 @@ + + + + + + + + + Packaging an application with py2app (or py2exe) — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +
+

Packaging an application with py2app (or py2exe)

+

You can create standalone applications with Python scripts by using +py2app on OS X or py2exe on +Windows. This is often done to more easily distribute applications that have a GUI based on +toolkits like Tk, Qt or others.

+

There are caveats you need to be aware of when creating such an app.

+
+

HTTPS Validation and cacerts.txt

+

When creating the connection to Flow Production Tracking, a file is used to validate the Flow Production Tracking +certificate. This file is located at shotgun_api3/lib/httplib2/cacerts.txt. Because this file is not a Python +file imported by your application, py2app will not know to include it in your package, it will +need to be explicitly specified in your setup.py file (edit the path based on the location +where your shotgun_api3 package is located):

+
DATA_FILES = [
+    ('shotgun_api3', ['/shotgun/src/python-api/shotgun_api3/lib/httplib2/cacerts.txt'])
+]
+
+
+

Once you create your py2app package its contents should include two files (among others) in the +following structure:

+
./Contents/Resources/shotgun_api3/cacerts.txt
+./Contents/Resources/my_script.py
+
+
+

Where in my_script.py you can access the cacerts.txt file using a relative path to pass it +into the Flow Production Tracking connection’s constructor:

+
ca_certs = os.path.join(os.path.dirname(__file__), 'shotgun_api3', 'cacerts.txt')
+sg = shotgun_api3.Shotgun('https://my-site.shotgrid.autodesk.com', 'script_name', 'script_key',
+                          ca_certs=ca_certs)
+
+
+

The process for py2exe should be similar.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/authentication.html b/authentication.html new file mode 100644 index 000000000..c5a6afba4 --- /dev/null +++ b/authentication.html @@ -0,0 +1,241 @@ + + + + + + + + + Authentication — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +
+

Authentication

+

In order to communicate with your server via the API, you must provide valid authentication credentials. The API allows you to authenticate with user-based, or script-based credentials.

+
+

User-based Authentication

+

When authenticating as a user, you provide your normal login and password when instantiating your shotgun_api3.Shotgun object. The actions performed by this instance will be limited to your permission level just as they are in the web application.

+
sg = shotgun_api3.Shotgun("https://my-site.shotgrid.autodesk.com",
+                          login="rhendriks",
+                          password="c0mPre$Hi0n")
+
+
+
+
+

Script-based Authentication

+

In order to authenticate as a script, your script must be registered with Flow Production Tracking and have a valid API key. When creating your shotgun_api3.Shotgun object, provide the script_name and api_key.:

+
sg = shotgun_api3.Shotgun("https://my-site.shotgrid.autodesk.com",
+                          script_name="compress",
+                          api_key="0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
+
+
+
+

Note

+

When using script-based authentication, we strongly recommend you register each script separately with Flow Production Tracking and have individual API keys for each. This allows you to track down each of your scripts and the actions they are performing much more accurately in the event logs.

+
+
+

Adding Script Users

+

If you’ll be using script-based authentication, you need to create a Script entity in Flow Production Tracking. To create a new key, click the + button on the “Scripts” page in the Admin section and give your script a useful name. It’s a good idea to add any other relevant information that be be helpful to your other friendly Flow Production Tracking users such as a description of what the script does that is using this key, the email address of the maintainer, etc.:

+_images/scripts_page.png +

Once you save your new Script entity, Flow Production Tracking will automatically generate an application key which will act as the script’s password. The key will look something like this: 0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef.

+
+
+

Why have different application keys for different scripts?

+

We recommend you create a new Script entity (and application key) for each script that is using script-based authentication so you can accurately log what scripts are doing what in case one of them causes problems. This will also allow you to better see what scripts are performing what actions in the EventLog. We’ve found that even though you may think you’ll probably never need to know, the extra 2 minutes of setup now can prevent hours of headache in the future.

+
+
+

Event Logging

+

By default, events generated by scripts using an script-based authentication are logged in Flow Production Tracking’s event log. You can turn this off by un-checking the “Generate Events” checkbox either in the script detail page or from the main Scripts admin page in Flow Production Tracking.

+
+

Note

+

Turning off event logging will also prevent any email notifications from being triggered by your scripts since the email notifier relies on the event log to find events to notify for.

+
+

Scripts using user-based authentication will generate events similarly to if you were performing the same actions in the Flow Production Tracking web application, though there is some additional metadata stored in the EventLogEntry that identifies the event as created from a script acting on behalf of the user.

+
+

Why would you want to turn event logging off for scripts?

+

It is an optimization that is not used often, but some users have integration scripts that are pushing data into Flow Production Tracking just for reference, like publishes from their asset management system. This publish data is never changed later, so the data itself has the entire history, and the events would just clutter the event log. The event log can grow very large. So if you have no need to audit the history of what your script does, and it’s generating an large amount of event log entries, you may find it’s not necessary to create these events.

+
+
+
+
+

Permissions

+

Users and scripts are both bound by the restrictions of their permission role in Flow Production Tracking. The permission role is assigned by the Permission Role field for each entity type.

+

For Scripts, the default permission role is “API Admin User” which allows full access to create, update, and delete entities and fields, including editing the “date created” audit field and creating event log entries. If you have other permission roles for ApiUsers, you can set the default role that will be assigned when a new script is created, in your Flow Production Tracking site preferences.

+

When using user-based authentication in your script, it will be bound by the permission role assigned to you in Flow Production Tracking. For example, if you don’t have access to edit the status field on Shots, your script won’t be able to either. Attempting to perform actions that are prohibited by permissions will raise an appropriate exception.

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/azure-pipelines-templates/code_style_validation.yml b/azure-pipelines-templates/code_style_validation.yml deleted file mode 100644 index 69e82b7e0..000000000 --- a/azure-pipelines-templates/code_style_validation.yml +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright (c) 2024, Shotgun Software Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# - Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# - Neither the name of the Shotgun Software Inc nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -jobs: -- job: code_style_validation - displayName: Code Style Validation - pool: - vmImage: 'ubuntu-latest' - - steps: - - task: UsePythonVersion@0 - inputs: - versionSpec: 3.9 - addToPath: True - architecture: 'x64' - - - script: | - pip install --upgrade pip setuptools wheel - pip install --upgrade pre-commit - displayName: Install dependencies - - - bash: pre-commit autoupdate - displayName: Update pre-commit hook versions - - - bash: pre-commit run --all - displayName: Validate code with pre-commit diff --git a/azure-pipelines-templates/run-tests.yml b/azure-pipelines-templates/run-tests.yml deleted file mode 100644 index bc402c42c..000000000 --- a/azure-pipelines-templates/run-tests.yml +++ /dev/null @@ -1,150 +0,0 @@ -# ----------------------------------------------------------------------------- -# Copyright (c) 2009-2021, Shotgun Software Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# - Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# - Neither the name of the Shotgun Software Inc nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# This is the list of parameters for this template and their default values. -parameters: - name: '' - vm_image: '' - -jobs: - # The job will be named after the OS and Azure will suffix the strategy to make it unique - # so we'll have a job name "Windows Python27" for example. What's a strategy? Strategies are the - # name of the keys under the strategy.matrix scope. So for each OS we'll have " Python27" and - # " Python37". -- job: ${{ parameters.name }} - pool: - vmImage: ${{ parameters.vm_image }} - # The strategy is another way of removing repetition. It will create one job per entry in the - # matrix. - strategy: - matrix: - # We support these versions of Python. - Python39: - python.version: '3.9' - Python310: - python.version: '3.10' - Python311: - python.version: '3.11' - - maxParallel: 4 - - variables: - group: sg-credentials - - # These are the steps that will be executed inside each job. - steps: - # Specifies which version of Python we want to use. That's where the strategy comes in. - # Each job will share this set of steps, but each of them will receive a different - # $(python.version) - # TODO: We should provide `githubToken` if we want to download a python release. - # Otherwise we may hit the GitHub anonymous download limit. - - task: UsePythonVersion@0 - inputs: - versionSpec: '$(python.version)' - addToPath: True - - # Install all dependencies needed for running the tests. This command is good for - # Python 2 and 3, but also for all OSes - - script: | - python -m pip install --upgrade pip setuptools wheel - python -m pip install -r tests/ci_requirements.txt - displayName: Install tools - - # The {{}} syntax is meant for the the pre-processor of Azure pipeline. Every statement inside - # a {{}} block will be evaluated and substituted before the file is parsed to create the jobs. - # So here we're inserting an extra step if the template is being invoked for Windows. - - ${{ if eq(parameters.name, 'Windows') }}: - # On Windows, we need to update the certificates, the cert store is missing the newer one - # from Amazon like some clients experienced a while back. Who would have thought Microsoft - # would have been out of date! ;) - - powershell: | - $cert_url = "https://www.amazontrust.com/repository/SFSRootCAG2.cer" - $cert_file = New-TemporaryFile - Invoke-WebRequest -Uri $cert_url -UseBasicParsing -OutFile $cert_file.FullName - Import-Certificate -FilePath $cert_file.FullName -CertStoreLocation Cert:\LocalMachine\Root - displayName: Updating OS Certificates - - # Runs the tests and generates test coverage. The tests results are uploaded to Azure Pipelines in the - # Tests tab of the build and each test run will be named after the --test-run-title argument to pytest, - # for example 'Windows - 2.7' - - bash: | - cp ./tests/example_config ./tests/config - pytest --durations=0 -v --cov shotgun_api3 --cov-report xml --test-run-title="${{parameters.name}}-$(python.version)" - displayName: Running tests - env: - # Pass the values needed to authenticate with the Flow Production Tracking site and create some entities. - # Remember, on a pull request from a client or on forked repos, those variables - # will be empty! - SG_SERVER_URL: $(ci_site) - SG_SCRIPT_NAME: $(ci_site_script_name) - SG_API_KEY: $(ci_site_script_key) - # The unit tests manipulate the user and project during the tests, which can cause collisions, - # so sandbox each build variant. - # Ideally, we would use the agent name here. The problem is that the agent name is in a build - # variable, so we can't edit it's value through a ${{replace(a,b,c)}} expression, which are evaluated before - # build variables are available. Because of this, we need to find another way to generate a - # unique login. So instead, we'll use the the name of the platform and the python version, - # which should make it unique. - SG_HUMAN_LOGIN: $(python_api_human_login)-${{parameters.name}}-$(python.version) - # This will give a user name like 'something macOS 2.7' - SG_HUMAN_NAME: $(python_api_human_name) ${{parameters.name}} $(python.version) - SG_HUMAN_PASSWORD: $(python_api_human_password) - # So, first, we need to make sure that two builds running at the same time do not manipulate - # the same entities, so we're sandboxing build nodes based on their name. - SG_PROJECT_NAME: Python API CI - $(Agent.Name) - # The entities created and then reused between tests assume that the same user is always - # manipulating them. Because different builds will be assigned different agents and therefore - # different projects, it means each project needs to have an entity specific to a given user. - # Again, this would have been a lot simpler if we could simply have had a login based on the - # agent name, but alas, the agent name has a space in it which needs to be replaced to something - # else and string substitution can't be made on build variables, only template parameters. - SG_ASSET_CODE: CI-$(python_api_human_login)-${{parameters.name}}-$(python.version) - SG_VERSION_CODE: CI-$(python_api_human_login)-${{parameters.name}}-$(python.version) - SG_SHOT_CODE: CI-$(python_api_human_login)-${{parameters.name}}-$(python.version) - SG_TASK_CONTENT: CI-$(python_api_human_login)-${{parameters.name}}-$(python.version) - SG_PLAYLIST_CODE: CI-$(python_api_human_login)-${{parameters.name}}-$(python.version) - - # Upload the code coverage result to codecov.io. - - ${{ if eq(parameters.name, 'Windows') }}: - - powershell: | - $ProgressPreference = 'SilentlyContinue' - Invoke-WebRequest -Uri https://uploader.codecov.io/latest/windows/codecov.exe -Outfile codecov.exe - .\codecov.exe -f coverage.xml - displayName: Uploading code coverage - - ${{ elseif eq(parameters.name, 'Linux') }}: - - script: | - curl -Os https://uploader.codecov.io/latest/linux/codecov - chmod +x codecov - ./codecov -f coverage.xml - displayName: Uploading code coverage - - ${{ else }}: - - script: | - curl -Os https://uploader.codecov.io/v0.7.3/macos/codecov - chmod +x codecov - ./codecov -f coverage.xml - displayName: Uploading code coverage diff --git a/azure-pipelines.yml b/azure-pipelines.yml deleted file mode 100644 index 52e6cfa9c..000000000 --- a/azure-pipelines.yml +++ /dev/null @@ -1,72 +0,0 @@ -# ----------------------------------------------------------------------------- -# Copyright (c) 2009-2021, Shotgun Software Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# - Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# - Neither the name of the Shotgun Software Inc nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# We've stored some variables in Azure. They contain credentials -# and are encrypted. They are also not available to clients. -# This statement says which variable groups this repo requires. -# We have two: one that can be shared by all repos that use CI -# and another that is used just by the Python API, which creates -# HumanUser's and as such need a password, which we can't -# hardcode in the .yml files. -variables: - - group: sg-credentials - -# We want builds to trigger for 3 reasons: -# - The master branch sees new commits -# - Each PR should get rebuilt when commits are added to it. -trigger: - branches: - include: - - master -pr: - branches: - include: - - "*" - -# This here is the list of jobs we want to run for our build. -# Jobs run in parallel. -jobs: -- template: azure-pipelines-templates/code_style_validation.yml - -# These are jobs templates, they allow to reduce the redundancy between -# variations of the same build. We pass in the image name -# and a friendly name that then template can then use to create jobs. -- template: azure-pipelines-templates/run-tests.yml - parameters: - name: Linux - vm_image: 'ubuntu-latest' - -- template: azure-pipelines-templates/run-tests.yml - parameters: - name: macOS - vm_image: 'macOS-latest' - -- template: azure-pipelines-templates/run-tests.yml - parameters: - name: Windows - vm_image: 'windows-latest' diff --git a/changelog.html b/changelog.html new file mode 100644 index 000000000..7b6569160 --- /dev/null +++ b/changelog.html @@ -0,0 +1,909 @@ + + + + + + + + + Flow Production Tracking Python API Changelog — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + + +
  • +
  • +
+
+
+
+
+ +
+

Flow Production Tracking Python API Changelog

+

Here you can see the full list of changes between each Python API release.

+
+

v3.8.3 (2025 May 22)

+
    +
  • Add improvements to Mockgun. +Ensure string comparison are case insensitive. +Ignore duplicate entities when multi_entity_update_mode is added. +Support for None in mockgun when using ordering. +Thank you rlessardrodeofx, slingshotsys, and MHendricks for your contributions.

  • +
  • Minor fixes on unit tests and documentation.

  • +
+
+
+

v3.8.2 (2025 Mar 11)

+
    +
  • Prevent flaky disconnection when uploading thumbnails on publish. +There’s a flaky disconnection when the publisher uploads the thumbnail to the server. +The most common errors were: Connection closed by peer and URLopen error EOF occurred in violation of protocol ssl.c:1006.

  • +
+
+
+

v3.8.1 (2025 Feb 25)

+
    +
  • Upgrade certifi to 2024.12.14.

  • +
  • Apply black 25.1.0 formatting to the source code.

  • +
  • Update Software Credits

  • +
+
+
+

v3.8.0 (2025 Feb 7)

+
    +
  • Extend the payload optimizations to the in and not_in filters and +the update method.

  • +
  • The payload optimization is now enabled by default. +It can be disabled with the SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION +environment variable.

  • +
+
+
+

v3.7.0 (2024 Dec 9)

+
    +
  • Remove unnecessary data in the payload when combining related queries before sending it to the server. +This would improve overall performance decreasing network latency and server processing. +See documentation for more information.

  • +
+
+
+

v3.6.2 (2024 Aug 13)

+
    +
  • Remove Ticket entity reference and prepare this to run in CI.

  • +
  • Condition auth for Jenkins environment.

  • +
  • Update certifi to 2024.7.4.

  • +
  • FIRST PHASE Python2 removing.

  • +
+
+
+

v3.6.1 (2024 Jun 6)

+
    +
  • Adds multi_entity_update_modes support to mockgun update() and batch() methods.

  • +
  • Implements a retry strategy only when encountering an URLError or SSLEOFError.

  • +
  • Fixes the issue with deleting prefix and suffix for display_name variable at the moment of upload for a local install.

  • +
  • Clarifies the use of _build_opener in download_attachment().

  • +
+
+
+

v3.6.0 (2024 May 1)

+
    +
  • Drop support for Python 2.7

  • +
  • certifi version changed to 2024.2.2

  • +
  • Documentation update

  • +
+
+
+

v3.5.1 (2024 Apr 3)

+
    +
  • Documentation: Revert to Shotgun in the API Reference headers to keep consistency with the API methods

  • +
  • Mockgun: fix entity data type

  • +
  • Mockgun: add support for add_user_agent and set_session_uuid methods

  • +
+
+
+

v3.5.0 (2024 Mar 26)

+
    +
  • Rebranding component for Flow Production Tracking

  • +
+
+
+

v3.4.2 (2024 Feb 6)

+
    +
  • Add support for Python 3.11

  • +
+
+
+

v3.4.1 (2024 Jan 29)

+
    +
  • Flaky Tests

  • +
  • Documentation: Fix issue regarding “in” filter prototype

  • +
  • Documentation: Travis badge image is no working anymore

  • +
  • Documentation: Add user_subscription_read and user_subscription_create methods

  • +
  • Update Python Certifi license block

  • +
  • Add methods for the user_subscriptions API end points

  • +
  • Retry ShotGrid request also on error 504

  • +
  • Retry S3 uploads on error 500

  • +
  • Comment typing annotation breaks Python 2 compatibility

  • +
  • Add field type entity_type to mockgun

  • +
+
+
+

v3.4.0 (2023 Sep 22)

+
    +
  • Started support for Python 3.10 for CI.

  • +
  • Add documentation for PublishedFiles preset filters.

  • +
  • Upgrade httplib2 to 0.22.0.

  • +
  • Update licensing.

  • +
  • Updates Autodesk URLs.

  • +
  • Fix flaky tests.

  • +
+
+
+

v3.3.6 (2023 Aug 29)

+
    +
  • Update docs for entity fields.

  • +
  • Fix typo.

  • +
  • Fix incorrect hint.

  • +
  • Reformat code examples to prevent text overflow.

  • +
  • Bump certifi from 2020.06.20 to 2022.12.7 in /shotgun_api3/lib.

  • +
  • Skip SG-MIM entities.

  • +
  • Replace shotgunsoftware references.

  • +
  • Deprecation of Python 2.

  • +
  • Security upgrade certifi to latest version 2023.07.22.

  • +
+
+
+

v3.3.5 (2023 Jan 5)

+
    +
  • Add “Setting Up Your Environment with the Python API” to Python Docs (python-api docs).

  • +
  • [Python API Documentation] Update Python version requirements.

  • +
  • Rename Shotgun to Shotgrid in every about text like tk-multi-demo git repository.

  • +
  • Rename Shotgun servers to ShotGrid servers in the documentation.

  • +
+
+
+

v3.3.4 (2022 June 9)

+
    +
  • Adds Retries on 503 Errors when uploading to S3.

  • +
  • Updates AMI Documentation to Support Python 3.

  • +
  • Adds Python 3.9 coverage in Azure Pipeline CI tests.

  • +
  • Fixes git protocol for the installation.

  • +
+
+
+

v3.3.3 (2021 December 1)

+
    +
  • Replaces shotgunsoftware urls with Autodesk Knowledge Network and ShotGrid Developer Documentation pages.

  • +
+
+
+

v3.3.2 (2021 September 27)

+
    +
  • Updates version of httplib2.

  • +
+
+
+

v3.3.1 (2021 July 12)

+
    +
  • Implements retries with incremental backoff on 502 errors.

  • +
+
+
+

v3.3.0 (2021 Jun 7)

+
    +
  • Updates documentation and error messages to mention ShotGrid.

  • +
+
+
+

v3.2.6 (2020 Nov 24)

+
    +
  • Now includes certifi and defaults to using the certificates provided with that module.

  • +
+
+
+

v3.2.4 (2020 May 25)

+
    +
  • Updates httplib2 to v0.18.0.

  • +
+
+
+

v3.2.3 (2020 Apr 21)

+ +
+
+

v3.2.2 (2019 Dec 11)

+
    +
  • Upgrades packaged six module to 1.13.0

  • +
  • Adds platform and normalize_platform to sgsix module to provide unified platform value across Python 2/3

  • +
  • Changes httplib import procedure to emulate direct import of the module

  • +
  • Adds test to ensure httplib2 is importable as expected

  • +
+
+
+

v3.2.1 (2019 Oct 29)

+
    +
  • Returns a specific error from share_thumbnail when the source thumbnail is a ‘transient’ thumbnail.

  • +
+
+
+

v3.2.0 (2019 Sept 23)

+
    +
  • Adds a new project_entity parameter to schema_field_update that allows to modify field visibility for a given project.

  • +
+
+
+

v3.1.2 (2019 Sept 17)

+
    +
  • Adds an optional localized property on the Shotgun object which allows to retrieve localized display names on +methods schema_entity_read(), schema_field_read(), and schema_read().

  • +
+
+
+

v3.1.1 (2019 August 29)

+
    +
  • Fixes a regression on Python 2.7.0-2.7.9 on Windows with the mimetypes module.

  • +
+
+
+

v3.1.0 (2019 July 29)

+
    +
  • Adds support for Python 3.7

  • +
+
+
+

v3.0.41 (2019 June 28)

+
    +
  • Adds an optional sleep between retries specified via the SHOTGUN_API_RETRY_INTERVAL environment variable, or by setting sg.config.rpc_attempt_interval.

  • +
+
+
+

v3.0.40 (2019 March 13)

+
    +
  • Updates encoding method to use shutil when uploading, to avoid memory and overflow errors when reading large files. (contributed by @eestrada)

  • +
+
+
+

v3.0.39 (2019 February 20)

+
    +
  • Ensures the certificates packaged with the API and those specified via the SHOTGUN_API_CACERTS environment variable +are used when uploading a file.

  • +
+
+
+

v3.0.38 (2019 February 7)

+
    +
  • Upgrades the version of httplib2 to 0.12.0, which fixes SNI issues. Note this +version contains a more recent list of certificate authorities. If you are running Shotgun locally and have +signed your https certificate with an outdated certificate authority, the Shotgun connection will be rejected.

  • +
+
+
+

v3.0.37 (2018 July 19)

+
    +
  • Proper support added for unicode and utf-8 string paths given to upload methods, and a sane error is raised when an unusable string encoding is used.

  • +
  • Adds support for querying preferences from Shotgun via the new preferences_read method.

  • +
  • Under-the-hood changes to add support for direct to s3 uploads to Shotgun. This change should be transparent to users.

  • +
+
+
+

v3.0.36 (2018 April 3)

+
    +
  • Fixes an error where connect=False during __init__ would still connect to Shotgun.

  • +
  • Adds support for SHOTGUN_API_CACERTS when uploading and downloading files.

  • +
  • Properly handles failed downloads due to malware scanning.

  • +
+
+
+

v3.0.35 (2017 December 8)

+
    +
  • Add exception UserCredentialsNotAllowedForSSOAuthenticationFault. +Triggered when attempting to initiate a connection with a username/password +pair on an SSO-enabled Shotgun site.

  • +
+
+
+

v3.0.34 (2017 September 18)

+
    +
  • Optimized pagination strategy for Shotgun 7.4+

  • +
  • Switched from a hard-coded value of 500 for “records_per_page” to a server-defined value. We will be experimenting with higher values with the goal of increasing performance for large result sets.

  • +
+
+
+

v3.0.33 (2017 July 18)

+
    +
  • Raise an exception when uploading an empty file using upload(), upload_thumbnail() +or upload_filmstrip_thumbnail() before calling out to the server.

  • +
  • Multiple enhancements and bugfixes to Mockgun

  • +
  • Added nav_search_string() and nav_search_entity() methods as experimental, internal methods for querying SG hierarchy.

  • +
  • Introduces a following() query method, that accepts a user entity and optionally an entity type and/or project.

  • +
+
+
+

v3.0.32 (2016 Sep 22)

+
    +
  • Optimized import speed of the API on Python 2.7.

  • +
  • Integrated the latest fixes to the mimetypes module.

  • +
  • Added nav_expand() method as an experimental, internal method for querying SG hierarchy.

  • +
  • Ported all documentation to sphinx. See http://developer.shotgridsoftware.com/python-api.

  • +
  • Moved Changelog to dedicated HISTORY file.

  • +
+
+
+

v3.0.31 (2016 May 18)

+ +
+
+

v3.0.30 (2016 Apr 25)

+
    +
  • Add option to use add/remove/set modes when updating multi-entity fields.

  • +
  • Add explicit file handler close to download_attachment.

  • +
  • Add basic find() ordering support to mockgun.

  • +
  • Allow for product specific authorization parameters.

  • +
+
+
+

v3.0.29 (2016 Mar 7)

+
    +
  • Reverted the change to the default field names for image uploading.

  • +
+
+
+

v3.0.28 (2016 Mar 3)

+
    +
  • Refactored nested classing of sgtimezone library to allow for serializable timestamps.

  • +
+
+
+

v3.0.27 (2016 Feb 18)

+
    +
  • Make sure HTTP proxy authentication works with the @ character in a password.

  • +
  • Make sure sudo authentication test works with Shotgun versions after v6.3.10.

  • +
  • Smarter uploading of thumbnails and filmstrips with the upload() method.

  • +
  • Improve Travis build integration of the Python-API to run the full suite of +API tests instead of just the unit and client tests.

  • +
+
+
+

v3.0.26 (2016 Feb 1)

+
    +
  • Updating testing framework to use environment variables inconjunction with existing +example_config file so that commits and pull requests are automatically run on travis-ci.

  • +
  • Fix to prevent stripping out case-sensitivity of a URL if the user passes their credentials to +config.server as an authorization header.

  • +
+
+
+

v3.0.25 (2016 Jan 12)

+
    +
  • Add handling for Python versions incompatible with SHA-2 (see this blog post).

  • +
  • Add SHOTGUN_FORCE_CERTIFICATE_VALIDATION environment variable to prevent disabling certficate +validation when SHA-2 validation is not available.

  • +
  • Add SSL info to user-agent header.

  • +
+
+
+

v3.0.24 (2016 Jan 08)

+
    +
  • Not released.

  • +
+
+
+

v3.0.23 (2015 Oct 26)

+
    +
  • Fix for python bug #23371 on Windows loading mimetypes +module (thanks @patrickwolf).

  • +
  • Fix for tests on older versions of python.

  • +
  • Sanitize authentication values before raising error.

  • +
+
+
+

v3.0.22 (2015 Sept 9)

+
    +
  • Added method text_search() which allows an API client to access the Shotgun global search +and auto completer.

  • +
  • Added method activity_stream_read() which allows an API client to access the activity +stream for a given Shotgun entity.

  • +
  • Added method note_thread_read() which allows an API client to download an entire Note +conversation, including Replies and Attachments, using a single API call.

  • +
  • Added an experimental mockgun module which can be used to emulate the Shotgun API, for +example inside unit test rigs.

  • +
  • [minor] Improved docstrings.

  • +
+
+
+

v3.0.21 (2015 Aug 13)

+
    +
  • Update bundled httplib2 module to latest v0.9.1 - fixes some bugs

  • +
+
+
+

v3.0.20 (2015 Jun 10)

+
    +
  • Add authentication support for Shotgun servers with two-factor authentication turned on.

  • +
+
+
+

v3.0.19 (2015 Mar 25)

+
    +
  • Add ability to authenticate with Shotgun using session_token.

  • +
  • Add get_session_token() method for obtaining token to authenticate with.

  • +
  • Add new AuthenticationFault exception type to indicate when server communication has failed +due to authentication reasons.

  • +
  • Add support for SHOTGUN_API_CACERTS environment variable to provide location of external +SSL certificates file.

  • +
  • Fixes and updates to various tests.

  • +
+
+
+

v3.0.18 (2015 Mar 13)

+
    +
  • Add ability to query the per-project visibility status for entities, fields and statuses. +(requires Shotgun server >= v5.4.4)

  • +
+
+
+

v3.0.17 (2014 Jul 10)

+
    +
  • Add ability to update last_accessed_by_current_user on Project.

  • +
  • Add workaround for bug #9291 in Python 2.7 affecting +mimetypes library on Windows.

  • +
  • Add platform and Python version to user-agent (eg. shotgun-json (3.0.17); Python 2.7 (Mac))

  • +
+
+
+

v3.0.16 (2014 May 23)

+
    +
  • Add flag to ignore entities from archived Projects.

  • +
  • Add support for differentiating between zero and None for number fields.

  • +
  • Add ability to act as a different user.

  • +
+
+
+

v3.0.15 (2014 Mar 6)

+
    +
  • Fixed bug which allowed a value of None for password parameter in +authenticate_human_user()

  • +
  • Add follow(), unfollow() and followers() methods.

  • +
  • Add ability to login as HumanUser.

  • +
  • Ensure that webm/mp4 mime types are always available.

  • +
  • Updated link to video tour in README.

  • +
  • Fixes and updates to various tests.

  • +
+
+
+

v3.0.14 (2013 Jun 26)

+
    +
  • added: additional tests for thumbnails.

  • +
  • added: support for downloading from s3 in download_attachment(). Accepts an Attachment +entity dict as a parameter (is still backwards compatible with passing in an Attachment id).

  • +
  • added: optional file_path parameter to download_attachment() to write data directly to +disk instead of loading into memory. (thanks to Adam Goforth @aag)

  • +
+
+
+

v3.0.13 (2013 Apr 11)

+ +
+
+

v3.0.12 (2013 Feb 22)

+

no tag

+
    +
  • added: #18171 New ca_certs argument to the Shotgun constructor to specify the +certificates to use in SSL validation.

  • +
  • added: setup.py doesn’t compress the installed .egg file which makes the +cacerts.txt file accessible.

  • +
+
+
+

v3.0.11 (2013 Jan 31)

+ +
+
+

v3.0.10 (2013 Jan 25)

+
    +
  • added: add_user_agent() and reset_user_agent() methods to allow client code to add +strings to track.

  • +
  • added: Changed default user-agent to include API version.

  • +
  • updated: advanced summarize filter support.

  • +
  • fixed: #19830 share_thumbnail() errors when source has no thumbnail.

  • +
+
+
+

v3.0.9 (2012 Dec 05)

+
    +
  • added: share_thumbnail() method to share the same thumbnail record and media between +entities.

  • +
  • added: proxy handling to methods that transfer binary data (ie. upload(), +upload_thumbnail(), etc.).

  • +
  • updated: default logging level to WARN.

  • +
  • updated: documentation for summarize() method, previously released but without +documentation.

  • +
  • fixed: unicode strings not always being encoded correctly.

  • +
  • fixed: create() generates error when return_fields is None.

  • +
  • fixed: clearing thumbnail by setting image value to None not working as expected.

  • +
  • fixed: some html entities being returned sanitized via API.

  • +
  • improved: simplejson fallback now uses relative imports to match other bundled packages.

  • +
  • improved: various error messages are now clearer and more informative.

  • +
  • installation is now pip compatible.

  • +
+
+
+

v3.0.9.beta2 (2012 Mar 19)

+
    +
  • use relative imports for included libraries when using Python v2.5 or later.

  • +
  • replace sideband request for image (thumbnail) field with native support (requires Shotgun +server >= v3.3.0. Request will still work on older versions but fallback to slow sideband +method).

  • +
  • allow setting image and filmstrip_thumbnail in data dict on create() and +update() (thanks @hughmacdonald).

  • +
  • fixed bug causing Attachment.tag_list to be set to "None" (str) for uploads.

  • +
+
+
+

v3.0.9.beta1 (2012 Feb 23)

+
    +
  • added support for access to WorkDayRules (requires Shotgun server >= v3.2.0).

  • +
  • added support for filmstrip thumbnails (requires Shotgun server >= v3.1.0).

  • +
  • fixed download_attachment() pointing to incorrect url.

  • +
  • fixed some issues with module import paths.

  • +
+
+
+

v3.0.8 (2011 Oct 7)

+
    +
  • now uses JSON as a transport rather than XML-RPC. This provides as much as a 40% speed boost.

  • +
  • added the summarize() method.

  • +
  • refactored single file into package.

  • +
  • tests added (Thanks to Aaron Morton @amorton).

  • +
  • return all strings as ascii for backwards compatibility, added ensure_ascii parameter to +enable returning unicode.

  • +
+
+
+

v3.0.7 (2011 Apr 04)

+
    +
  • fix: update() method should return a dict object not a list.

  • +
+
+
+

v3.0.6 (2010 Jan 25)

+
    +
  • optimization: don’t request paging_info unless required (and server support is available).

  • +
+
+
+

v3.0.5 (2010 Dec 20)

+
    +
  • officially remove support for old api3_preview controller.

  • +
  • find(): allow requesting a specific page of results instead of returning them all at once.

  • +
  • add support for session_uuid parameter for communicating with a web browser session.

  • +
+
+
+

v3.0.4 (2010 Nov 22)

+
    +
  • fix for issue where create() method was returning list type instead of dictionary.

  • +
  • support new style classes (thanks to Alex Schworer @schworer).

  • +
+
+
+

v3.0.3 (2010 Nov 12)

+
    +
  • add support for local files. Injects convenience info into returned hash for local file links.

  • +
  • add support for authentication through http proxy server.

  • +
+
+
+

v3.0.2 (2010 Aug 27)

+
    +
  • add revive() method to revive deleted entities.

  • +
+
+
+

v3.0.1 (2010 May 10)

+ +
+
+

v3.0 (2010 May 5)

+
    +
  • non-beta!

  • +
  • add batch() method to do multiple create(), update(), and delete() +operations in one request to the server (requires Shotgun server to be v1.13.0 or higher).

  • +
+
+
+

v3.0b8 (2010 Feb 19)

+ +
+
+

v3.0b7 (2009 Nov 30)

+
    +
  • add additional retries for connection errors and a catch for broken pipe exceptions.

  • +
+
+
+

v3.0b6 (2009 Oct 20)

+
    +
  • add support for HTTP/1.1 keepalive, which greatly improves performance for multiple +requests.

  • +
  • add more helpful error if server entered is not http or https

  • +
  • add support assigning tags to file uploads (for Shotgun version >= 1.10.6).

  • +
+
+
+

v3.0b5 (2009 Sept 29)

+
    +
  • fixed deprecation warnings to raise Exception class for python 2.5.

  • +
+
+
+

v3.0b4 (2009 July 3)

+ +
+
+

v3.0b3 (2009 June 24)

+
    +
  • fixed upload() and upload_thumbnail() methods.

  • +
  • added download_attachment() method.

  • +
  • added schema_* methods for accessing entities and fields.

  • +
  • added support for http proxy servers.

  • +
  • added __version__ string.

  • +
  • removed RECORDS_PER_PAGE global (can just set records_per_page on the Shotgun object +after initializing it).

  • +
  • removed api_ver from the constructor, as this class is only designed to work with API v3.

  • +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2025, Autodesk.

+
+ + + +
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook.html b/cookbook.html new file mode 100644 index 000000000..e67fb05a2 --- /dev/null +++ b/cookbook.html @@ -0,0 +1,273 @@ + + + + + + + + + API Cookbook — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +
+

API Cookbook

+

Here we have a collection of useful information you can use for reference when writing your API +scripts. From usage tips and gotchas to deeper examples of working with entities like Tasks and +Files, there’s a lot of example code in here for you to play with.

+

Usage Tips

+

These are some best-practices and good guidelines to follow when developing your scripts. +You’ll also find some gotchas you can avoid.

+ +

Examples

+

Some basic example scripts that we walk you through from beginning to end. Feel free to copy +and paste any of these into your own scripts.

+ +

Working With Files

+

You’ll probably be doing some work with files at your studio. This is a deep dive into some of +the inners of how Flow Production Tracking handles files (also called Attachments) and the different ways to link +to them.

+ +

Working With Tasks

+

Scheduling is a complex beast. Flow Production Tracking can handle lots of different types of functionality around +scheduling like split tasks, dependencies, and more. These docs walk you through the details of +how Flow Production Tracking thinks when it’s handling Task changes and how you can make your scripts do what you +need to do.

+ +

Smart Cut Fields

+

Smart Cut Fields are deprecated in favor of the +new cut support added in ShotGrid v7.0. +This documentation remains only to support studios who may not have upgraded to the new cut support +features.

+ +
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/attachments.html b/cookbook/attachments.html new file mode 100644 index 000000000..669fce865 --- /dev/null +++ b/cookbook/attachments.html @@ -0,0 +1,577 @@ + + + + + + + + + Details About Working With Files — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Details About Working With Files

+

The Flow Production Tracking web application stores Files as Attachment entities. You can see these on a Files page, +or a Files tab on a detail page, for example. You can access Attachments via the API to create and +modify uploaded files, url links, and local files, and link them to other entities (Shots, +Versions, etc). This entity works a lot like other entity types within Flow Production Tracking with a few +exceptions which are detailed below.

+
+

Note

+

If you are simply looking for information about how to upload and link things in Flow Production Tracking, this +doc is not for you. Instead look at the upload() and +upload_thumbnail() methods.

+

This doc describes the detailed structure of the Attachment entities that represent files +in Flow Production Tracking and how to interact with them. If that sounds cool too, then read on!

+
+
+

New in version 3.0.3.

+
+
+

Default structure

+

The following is a list of the default fields that Flow Production Tracking creates for Attachments. Your server +instance may look slightly different depending on your own customizations. Many of these fields are +optional and some are automatically filled in. These exceptions are listed below in the +descriptions of each field.

+
    +
  • +
    description (str):

    Optional field to provide descriptive text about the file.

    +
    +
    +
  • +
  • +
    this_file (dict):

    The actual file reference. Within the dictionary is a link_type key which designates the +Attachment as an uploaded file, a url link, or a local file. There are additional keys +returned for Working With Local File Types. You cannot modify this field after you have created an +Attachment. See below for examples of this field.

    +
    +
    +
  • +
  • +
    filename (str):

    For uploaded files only. This is automatically assigned when the file is uploaded and stores +the filename of the file.

    +
    +
    +
  • +
  • +
    file_size (int):

    For uploaded files only. This is automatically assigned when the file is uploaded and stores +the size of the file in bytes.

    +
    +
    +
  • +
  • +
    id (int):

    The internal Flow Production Tracking id for this Attachment entity.

    +
    +
    +
  • +
  • +
    attachment_links (list):

    A list of entity dictionaries used for linking Attachments to multiple entities.

    +
    +
    +
  • +
  • +
    open_notes (list):

    A List of Note entities linked to the current Attachment that have a status that does not +equal ‘clsd’. Read-only

    +
    +
    +
  • +
  • +
    open_notes_count (int):

    An integer count of the list of Note entities linked to the current Attachment that have a +status that does not equal ‘clsd’. (Read-only)

    +
    +
    +
  • +
  • +
    project (dict):

    (Required) The Project entity that this Attachment belongs to. This must be assigned when +creating an Attachment.

    +
    +
    +
  • +
  • +
    attachment_reference_links (list):

    Similar to attachment_links but used specifically for linking files to multiple entities as +reference.

    +
    +
    +
  • +
  • +
    sg_status_list (str):

    Status value returned as the short code.

    +
    +
    +
  • +
  • +
    tag_list (list):

    List of tags (as strings) that are currently assigned to the Attachment.

    +
    +
    +
  • +
  • +
    image (str):

    The url location of the thumbnail image assigned to this Attachment. For uploads, Flow Production Tracking +automatically tries to create a thumbnail from the file. +See Interpreting Image Field Strings. Alternatively, you can assign your +own thumbnail to an Attachment using the upload_thumbnail() method.

    +
    +
    +
  • +
  • +
    sg_type (str):

    An optional field for designating different types of Attachments

    +
    +
    +
  • +
  • +
    processing_status (str):

    Reflects the status of the attachment (File entity). +When processing the thumbnail, this field is set to ‘Thumbnail Pending’.

    +
    +
    +
  • +
+
+

File type structures (this_file)

+

Depending on the type of file the Attachment entity is representing, the value of this_file +will vary.

+
    +
  • +
    Uploads

    Designated by link_type: 'upload', this represents a file that was uploaded to Flow Production Tracking. +Uploading files to Flow Production Tracking can be done using the upload() method. +You cannot create an Attachment with an uploaded file directly.

    +
    {'content_type': 'image/jpeg',
    + 'link_type': 'upload',
    + 'name': 'western1FULL.jpg',
    + 'url': 'https://my-site.shotgrid.autodesk.com/file_serve/attachment/538'}
    +
    +
    +
    +
    +
  • +
  • +
    Web links

    Designated by link_type: 'web', this is represents a url link. Examples include an +http:// link to another server or a custom protocol used to launch a local application +like rvlink:// or cinesync://

    +
    {'content_type': None,
    + 'link_type': 'web',
    + 'name': 'Join GUN12158',
    + 'url': 'cinesync://session/GUN12158'}
    +
    +
    +
    +
    +
  • +
  • +
    Local Files

    Designated by link_type: 'local', this is represents a local file link. Additional keys +are provided in order to give access to the relative path information on other platforms.

    + +
    { 'content_type': 'video/quicktime',
    +  'link_type': 'local',
    +  'name': 'my_test_movie.mov',
    +  'local_path': '/Users/kp/Movies/testing/test_movie_002.mov'
    +  'local_path_linux': '/home/users/macusers/kp/Movies/testing/test_movie_002.mov'
    +  'local_path_mac': '/Users/kp/Movies/testing/test_movie_002.mov'
    +  'local_path_windows': 'M:\\macusers\kp\Movies\testing\test_movie_002.mov'
    +  'local_storage': {'id': 1,
    +                    'name': 'Dailies Directories',
    +                    'type': 'LocalStorage'},
    +  'url': 'file:///Users/kp/Movies/testing/test_movie_002.mov'}
    +
    +
    +
    +
    +
  • +
+
+
+
+

Creating Attachments

+ +
+

Uploads

+

Uploads cannot be created directly on Attachments. Instead, you need to use the +upload() method.

+

Make sure to have retries for file uploads. Failures when uploading will occasionally happen. When +it does, immediately retrying to upload usually works.

+
+
+

Local Files

+

See Creating & Updating Local file Fields.

+
+
+
+

Updating Attachments

+

You cannot modify the this_file field after you create an Attachment. If you need to provide a +different file, you will have to create a new Attachment entity. Otherwise, the process for +updating Attachments is exactly like updating other entity types in Flow Production Tracking and is the same for all +Attachment types. See update() for more info.

+
+
+

Deleting Attachments

+

The process of deleting an Attachment is just like other entities in Flow Production Tracking. See +delete() for more info.

+
+
+

Working With Local File Types

+

We added support for linking to local files in the UI in Flow Production Tracking Server v2.1. This doc covers how +to work with these local file links using the API.

+
+

Requirements

+
    +
  • Python API v3.0.3+

  • +
  • Flow Production Tracking Server v2.1.10+

  • +
+
+
+

Structure of Local File Values

+

There is a key in the dictionary that represents file/link fields called link_type which can be +one of local, upload, web. This is used to determine what type of link the field value +contains. For local files this value is always local and there are additional keys that +are available:

+
    +
  • +
    content_type (str):

    The mime-type of the associated local file. This is assigned +automatically using a best-guess based on the file extension. You can override this by setting +this explicitly.

    +
    +
    +
  • +
  • +
    link_type (str) read-only:

    Always ‘local’ for local files.

    +
    +
    +
  • +
  • +
    name (str):

    the display name of the local file. This is set to the filename by +default but can be overridden by setting this explicitly.

    +
    +
    +
  • +
  • +
    local_path (str):

    The full path to the file on the current platform. The Python API tries to determine the +platform it is currently running on and then copies the value from the corresponding key above +to this field for convenience.

    +
    +
    +
  • +
  • +
    local_path_linux (str) read-only:

    Full path to file on Linux as defined by the LocalStorage (or None if no Linux path is set)

    +
    +
    +
  • +
  • +
    local_path_mac (str) read-only:

    Full path to file on Mac OS X as defined by the LocalStorage (or None if no Mac path is set)

    +
    +
    +
  • +
  • +
    local_path_windows (str) read-only:

    Full path to file on Windows as defined by the LocalStorage (or None if no Windows path +is set)

    +
    +
    +
  • +
  • +
    local_storage (dict) read-only:

    A dictionary representing which LocalStorage entity is applied for this local file link.

    +
    +
    +
  • +
  • +
    url (str) read-only:

    A file:// link provided for convenience pointing to the value in the local_path

    +
    +
    +
  • +
+
+
+

Reading Local File Fields

+
fields = ['sg_uploaded_movie']
+result = sg.find('Version', [['id', 'is', 123]], fields)
+
+
+

Returns:

+
{'id':123,
+ 'sg_uploaded_movie': { 'content_type': None,
+                        'link_type': 'local',
+                        'name': 'my_test_movie.mov',
+                        'local_path': '/Users/kp/Movies/testing/test_movie_001_.mov'
+                        'local_path_linux': '/home/users/macusers/kp/Movies/testing/test_movie_001_.mov'
+                        'local_path_mac': '/Users/kp/Movies/testing/test_movie_001_.mov'
+                        'local_path_windows': 'M:\\macusers\kp\Movies\testing\test_movie_001_.mov'
+                        'local_storage': {'id': 1,
+                                          'name': 'Dailies Directories',
+                                          'type': 'LocalStorage'},
+                        'url': 'file:///Users/kp/Movies/testing/test_movie_001_.mov'},
+ 'type': 'Version'}
+
+
+
+

Note

+

When viewing results that include file/link fields with local file link values, all of the +keys will be returned regardless of whether there are values in them. So in the above example, +if there was no Windows path set for the local storage, local_path_windows would be +None.

+
+
+
+

Creating & Updating Local file Fields

+

When setting a file/link field value to a local file, only the local_path is mandatory. Flow Production Tracking +will automatically select the appropriate matching local storage for your file based on the path. +You can optionally specify the name and content_type fields if you wish to override their +defaults. Any other keys that are provided will be ignored.

+
    +
  • +
    content_type str:

    Optionally set the mime-type of the associated local file. This is assigned automatically +using a best-guess based on the file extension.

    +
    +
    +
  • +
  • +
    name str:

    Optional display name of the local file. This is set to the filename by default.

    +
    +
    +
  • +
  • +
    local_path str:

    The full local path to the file. Flow Production Tracking will find the LocalStorage +that has the most specific match to this path and automatically assign that LocalStorage to +the file.

    +
    +
    +
  • +
+
data = {'sg_uploaded_movie': {'local_path': '/Users/kp/Movies/testing/test_movie_002.mov',
+                              'name': 'Better Movie'}
+result = sg.update('Version', 123, data)
+
+
+

Returns:

+
{'id':123,
+ 'sg_uploaded_movie': { 'content_type': 'video/quicktime',
+                        'link_type': 'local',
+                        'name': 'my_test_movie.mov',
+                        'local_path': '/Users/kp/Movies/testing/test_movie_002.mov'
+                        'local_path_linux': '/home/users/macusers/kp/Movies/testing/test_movie_002.mov'
+                        'local_path_mac': '/Users/kp/Movies/testing/test_movie_002.mov'
+                        'local_path_windows': 'M:\\macusers\kp\Movies\testing\test_movie_002.mov'
+                        'local_storage': {'id': 1,
+                                          'name': 'Dailies Directories',
+                                          'type': 'LocalStorage'},
+                        'url': 'file:///Users/kp/Movies/testing/test_movie_002.mov'},
+ 'type': 'Version'}]
+
+
+

The content_type was assigned a best-guess value based on the file extension. Flow Production Tracking selected +the most appropriate specific LocalStorage match and assigned it to local_storage automatically.

+
+
+

Un-setting local file field values

+

Removing a a local file field value is simple. Just set the value to None:

+
data = {'sg_uploaded_movie': None}
+result = sg.update('Version', 123, data)
+
+
+

Returns:

+
{'id':123,
+ 'sg_uploaded_movie': None,
+ 'type': 'Version'}]
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/ami_handler.html b/cookbook/examples/ami_handler.html new file mode 100644 index 000000000..8970ae670 --- /dev/null +++ b/cookbook/examples/ami_handler.html @@ -0,0 +1,431 @@ + + + + + + + + + Handling Action Menu Item Calls — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Handling Action Menu Item Calls

+

This is an example ActionMenu Python class to handle the GET request sent from an +ActionMenuItem. It doesn’t manage dispatching custom protocols but rather takes the arguments +from any GET data and parses them into the easily accessible and correctly typed instance +variables for your Python scripts.

+

Available as a Gist at https://gist.github.com/3253287

+ +
+

GET vs. POST

+

Action Menu Items that open a url via http or https to another web server send their data +via POST. If you’re using a custom protocol the data is sent via GET.

+
+

Note

+

Browsers limit the length of a GET request. If you exceed this limit by attempting to +select a lot of rows and launch your custom protocol, you may encounter +“Failed to load resource” errors in your console.

+
+ +
#!/usr/bin/env python
+# encoding: utf-8
+
+# ---------------------------------------------------------------------------------------------
+# Description
+# ---------------------------------------------------------------------------------------------
+"""
+The values sent by the Action Menu Item are in the form of a GET request that is similar to the
+format: myCoolProtocol://doSomethingCool?user_id=24&user_login=shotgun&title=All%20Versions&...
+
+In a more human-readable state that would translate to something like this:
+{
+    'project_name': 'Demo Project',
+     'user_id': '24',
+     'title': 'All Versions',
+     'user_login': 'shotgun',
+     'sort_column': 'created_at',
+     'entity_type': 'Version',
+     'cols': 'created_at',
+     'ids': '5,2',
+     'selected_ids': '2,5',
+     'sort_direction': 'desc',
+     'project_id': '4',
+     'session_uuid': 'd8592bd6-fc41-11e1-b2c5-000c297a5f50',
+     'column_display_names':
+    [
+        'Version Name',
+         'Thumbnail',
+         'Link',
+         'Artist',
+         'Description',
+         'Status',
+         'Path to frames',
+         'QT',
+         'Date Created'
+    ]
+}
+
+This simple class parses the url into easy to access types variables from the parameters,
+action, and protocol sections of the url. This example url
+myCoolProtocol://doSomethingCool?user_id=123&user_login=miled&title=All%20Versions&...
+would be parsed like this:
+
+    (string) protocol: myCoolProtocol
+    (string) action: doSomethingCool
+    (dict)   params: user_id=123&user_login=miled&title=All%20Versions&...
+
+The parameters variable will be returned as a dictionary of string key/value pairs. Here's
+how to instantiate:
+
+  sa = ShotgunAction(sys.argv[1]) # sys.argv[1]
+
+  sa.params['user_login'] # returns 'miled'
+  sa.params['user_id'] # returns 123
+  sa.protocol # returns 'myCoolProtocol'
+"""
+
+
+# ---------------------------------------------------------------------------------------------
+# Imports
+# ---------------------------------------------------------------------------------------------
+import sys, os
+import six
+import logging as logger
+
+# ---------------------------------------------------------------------------------------------
+# Variables
+# ---------------------------------------------------------------------------------------------
+# location to write logfile for this script
+# logging is a bit of overkill for this class, but can still be useful.
+logfile = os.path.dirname(sys.argv[0]) + "/shotgun_action.log"
+
+
+# ----------------------------------------------
+# Generic ShotgunAction Exception Class
+# ----------------------------------------------
+class ShotgunActionException(Exception):
+    pass
+
+
+# ----------------------------------------------
+# ShotgunAction Class to manage ActionMenuItem call
+# ----------------------------------------------
+class ShotgunAction:
+    def __init__(self, url):
+        self.logger = self._init_log(logfile)
+        self.url = url
+        self.protocol, self.action, self.params = self._parse_url()
+
+        # entity type that the page was displaying
+        self.entity_type = self.params["entity_type"]
+
+        # Project info (if the ActionMenuItem was launched from a page not belonging
+        # to a Project (Global Page, My Page, etc.), this will be blank
+        if "project_id" in self.params:
+            self.project = {
+                "id": int(self.params["project_id"]),
+                "name": self.params["project_name"],
+            }
+        else:
+            self.project = None
+
+        # Internal column names currently displayed on the page
+        self.columns = self.params["cols"]
+
+        # Human readable names of the columns currently displayed on the page
+        self.column_display_names = self.params["column_display_names"]
+
+        # All ids of the entities returned by the query (not just those visible on the page)
+        self.ids = []
+        if len(self.params["ids"]) > 0:
+            ids = self.params["ids"].split(",")
+            self.ids = [int(id) for id in ids]
+
+        # All ids of the entities returned by the query in filter format ready
+        # to use in a find() query
+        self.ids_filter = self._convert_ids_to_filter(self.ids)
+
+        # ids of entities that were currently selected
+        self.selected_ids = []
+        if len(self.params["selected_ids"]) > 0:
+            sids = self.params["selected_ids"].split(",")
+            self.selected_ids = [int(id) for id in sids]
+
+        # All selected ids of the entities returned by the query in filter format ready
+        # to use in a find() query
+        self.selected_ids_filter = self._convert_ids_to_filter(self.selected_ids)
+
+        # sort values for the page
+        # (we don't allow no sort anymore, but not sure if there's legacy here)
+        if "sort_column" in self.params:
+            self.sort = {
+                "column": self.params["sort_column"],
+                "direction": self.params["sort_direction"],
+            }
+        else:
+            self.sort = None
+
+        # title of the page
+        self.title = self.params["title"]
+
+        # user info who launched the ActionMenuItem
+        self.user = {"id": self.params["user_id"], "login": self.params["user_login"]}
+
+        # session_uuid
+        self.session_uuid = self.params["session_uuid"]
+
+    # ----------------------------------------------
+    # Set up logging
+    # ----------------------------------------------
+    def _init_log(self, filename="shotgun_action.log"):
+        try:
+            logger.basicConfig(
+                level=logger.DEBUG,
+                format="%(asctime)s %(levelname)-8s %(message)s",
+                datefmt="%Y-%b-%d %H:%M:%S",
+                filename=filename,
+                filemode="w+",
+            )
+        except IOError as e:
+            raise ShotgunActionException("Unable to open logfile for writing: %s" % e)
+        logger.info("ShotgunAction logging started.")
+        return logger
+
+        # ----------------------------------------------
+
+    # Parse ActionMenuItem call into protocol, action and params
+    # ----------------------------------------------
+    def _parse_url(self):
+        logger.info("Parsing full url received: %s" % self.url)
+
+        # get the protocol used
+        protocol, path = self.url.split(":", 1)
+        logger.info("protocol: %s" % protocol)
+
+        # extract the action
+        action, params = path.split("?", 1)
+        action = action.strip("/")
+        logger.info("action: %s" % action)
+
+        # extract the parameters
+        # 'column_display_names' and 'cols' occurs once for each column displayed so we store it as a list
+        params = params.split("&")
+        p = {"column_display_names": [], "cols": []}
+        for arg in params:
+            key, value = map(six.moves.urllib.parse.unquote, arg.split("=", 1))
+            if key == "column_display_names" or key == "cols":
+                p[key].append(value)
+            else:
+                p[key] = value
+        params = p
+        logger.info("params: %s" % params)
+        return (protocol, action, params)
+
+    # ----------------------------------------------
+    # Convert IDs to filter format to us in find() queries
+    # ----------------------------------------------
+    def _convert_ids_to_filter(self, ids):
+        filter = []
+        for id in ids:
+            filter.append(["id", "is", id])
+        logger.debug("parsed ids into: %s" % filter)
+        return filter
+
+
+# ----------------------------------------------
+# Main Block
+# ----------------------------------------------
+if __name__ == "__main__":
+    try:
+        sa = ShotgunAction(sys.argv[1])
+        logger.info("ShotgunAction: Firing... %s" % (sys.argv[1]))
+    except IndexError as e:
+        raise ShotgunActionException("Missing GET arguments")
+    logger.info("ShotgunAction process finished.")
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/ami_version_packager.html b/cookbook/examples/ami_version_packager.html new file mode 100644 index 000000000..f6593c860 --- /dev/null +++ b/cookbook/examples/ami_version_packager.html @@ -0,0 +1,439 @@ + + + + + + + + + Using an ActionMenuItem to Package Versions for a Client — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Using an ActionMenuItem to Package Versions for a Client

+

This is an example script to demonstrate how you can use an ActionMenuItem to launch a local +script to package up files for a client. It performs the following:

+
    +
  • Downloads Attachments from a specified field for all selected entities.

  • +
  • Creates an archive.

  • +
  • Copies the archive to a specified directory.

  • +
+

It is intended to be used in conjunction with the script dicussed in Handling Action Menu Item Calls.

+
#!/usr/bin/env python
+# encoding: utf-8
+"""
+version_packager.py
+
+This example script is meant to be run from an ActionMenuItem in Flow Production Tracking. The menu item uses a custom
+protocol in order to launch this script, and is followed by the action 'package4client'. So the full
+url would be something like launchme://package4client?.... See:
+https://developer.shotgridsoftware.com/python-api/cookbook/examples/ami_handler.html
+
+It uses the example ActionMenu Python class also located in our docs for parsing the ActionMenuItem
+POST variables. For more information about it and accessing the variables in the ActionMenuItem POST request,
+See: http://developer.shotgridsoftware.com/python-api/examples/ami_handler
+
+The purpose of this script is to download attachment files from Flow Production Tracking, create an archive of them
+and copy them to a specified directory. You can invoke it with the following minimal example to connect
+to Flow Production Tracking, download any file that exists in the specified field ('sg_qt') for each selected_id passed from the
+ActionMenu. Then it will create a single archive of the files and move it to the specified directory
+('/path/where/i/want/to/put/the/archive/'). The archive is named with the Project Name, timestamp, and user
+login who ran the ActionMenuItem ('Demo_Project_2010-04-29-172210_kp.tar.gz'):
+
+    sa = ShotgunAction(sys.argv[1])
+    sg = shotgun_connect()
+    if sa.action == 'package4client':
+        r = packageFilesForClient('sg_qt','/path/where/i/want/to/put/the/archive/')
+
+"""
+
+# ---------------------------------------------------------------------------------------------
+# Imports
+# ---------------------------------------------------------------------------------------------
+import sys, os
+import logging as logger
+import subprocess
+import re
+from datetime import datetime
+
+from shotgun_api3 import Shotgun
+from shotgun_action import ShotgunAction
+from pprint import pprint
+
+# ---------------------------------------------------------------------------------------------
+# Variables
+# ---------------------------------------------------------------------------------------------
+# Flow Production Tracking server auth info
+shotgun_conf = {
+    'url':'https://my-site.shotgrid.autodesk.com',
+    'name':'YOUR_SCRIPT_NAME_HERE',
+    'key':'YOUR_SCRIPT_KEY_HERE'
+    }
+
+# location to write logfile for this script
+logfile = os.path.dirname(sys.argv[0])+"/version_packager.log"
+
+# temporary directory to download movie files to and create thumbnail files in
+file_dir = os.path.dirname(sys.argv[0])+"/tmp"
+
+# compress command
+# tar czf /home/user/backup_www.tar.gz -C / var/www/html
+compress_cmd = "tar czf %s -C / %s"
+
+
+
+# ----------------------------------------------
+# Generic Flow Production Tracking Exception Class
+# ----------------------------------------------
+class ShotgunException(Exception):
+    pass
+
+
+
+# ----------------------------------------------
+# Set up logging
+# ----------------------------------------------
+def init_log(filename="version_packager.log"):
+    try:
+        logger.basicConfig(level=logger.DEBUG,
+                        format='%(asctime)s %(levelname)-8s %(message)s',
+                        datefmt='%Y-%b-%d %H:%M:%s',
+                        filename=filename,
+                        filemode='w+')
+    except IOError, e:
+        raise ShotgunException ("Unable to open logfile for writing: %s" % e)
+    logger.info("Version Packager logging started.")
+    return logger
+
+
+# ----------------------------------------------
+# Extract Attachment id from entity field
+# ----------------------------------------------
+def extract_attachment_id(attachment):
+    # extract the Attachment id from the url location
+    attachment_id = attachment['url'].rsplit('/',1)[1]
+    try:
+        attachment_id = int(attachment_id)
+    except:
+        # not an integer.
+        return None
+        # raise ShotgunException("invalid Attachment id returned. Expected an integer: %s "% attachment_id)
+
+    return attachment_id
+
+
+# ----------------------------------------------
+# Download Movie to Disk
+# ----------------------------------------------
+def download_attachment_to_disk(attachment,destination_filename):
+    attachment_id = extract_attachment_id(attachment)
+    if type(attachment_id) != int:
+        return None
+    # download the attachment file from Flow Production Tracking and write it to local disk
+    logger.info("Downloading Attachment #%s" % (attachment_id))
+    stream = sg.download_attachment(attachment_id)
+    try:
+        file = open(destination_filename, 'w')
+        file.write(stream)
+        file.close()
+        logger.info("Downloaded attachment %s" % (destination_filename))
+        return True
+    except e:
+        raise ShotgunException("unable to write attachment to disk: %s"% e)
+
+
+# ----------------------------------------------
+# Compress files
+# ----------------------------------------------
+def compress_files(files,destination_filename):
+    destination_filename += ".tar.gz"
+    files = [path.lstrip("/") for path in files]
+    squish_me = compress_cmd % (destination_filename, " ".join(files) )
+    logger.info("Compressing %s files..." % len(files))
+    logger.info("Running command: %s" % squish_me)
+    try:
+        output = subprocess.Popen(squish_me, shell=True, stdout=subprocess.PIPE).stdout.read()
+        logger.info('tar/gzip command returned: %s' % output)
+    except e:
+        raise ShotgunException("unable compress files: %s"% e)
+    logger.info("compressed files to: %s" % destination_filename)
+    return destination_filename
+
+
+# ----------------------------------------------
+# Remove downloaded files
+# ----------------------------------------------
+def remove_downloaded_files(files):
+    remove_me = 'rm %s' % ( " ".join(files) )
+    logger.info("Removing %s files..." % len(files))
+    logger.info("Running command: %s" % remove_me)
+    try:
+        output = subprocess.Popen(remove_me, shell=True, stdout=subprocess.PIPE).stdout.read()
+        logger.info('rm command returned: %s' % output)
+        logger.info("removed downloaded files")
+        return True
+    except e:
+        logger.error("unable remove files: %s"% e)
+        return False
+
+
+# ----------------------------------------------
+# Copy files
+# ----------------------------------------------
+def copy_files(files,destination_directory):
+    if type(files) == list:
+        files = " ".join(files)
+    copy_me_args = "%s %s" % (files, destination_directory)
+    logger.info("Running command: mv %s" % copy_me_args)
+    try:
+        result = subprocess.Popen("mv " + copy_me_args, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        # 0 = success, 1 = recoverable issues
+        if result.returncode > 0:
+            response = result.stderr.read()
+            logger.error("Copy failed: %s"% response)
+            raise ShotgunException("Copy failed: %s"% response)
+    except OSError, e:
+        raise ShotgunException("unable copy files: %s"% e)
+
+    logger.info("copied files to: %s" % destination_directory)
+    return destination_directory
+
+
+
+def packageFilesForClient(file_field,destination_dir):
+
+    # get entities matching the selected ids
+    logger.info("Querying Shotgun for %s %ss" % (len(sa.selected_ids_filter), sa.params['entity_type']))
+    entities = sg.find(sa.params['entity_type'],sa.selected_ids_filter,['id','code',file_field],filter_operator='any')
+
+    # download the attachments for each entity, zip them, and copy to destination directory
+    files = []
+    for e in entities:
+        if not e[file_field]:
+            logger.info("%s #%s: No file exists. Skippinsa." % (sa.params['entity_type'], e['id']))
+        else:
+            logger.info("%s #%s: %s" % (sa.params['entity_type'], e['id'], e[file_field]))
+            path_to_file = file_dir+"/"+re.sub(r"\s+", '_', e[file_field]['name'])
+            result = download_attachment_to_disk(e[file_field], path_to_file )
+
+            # only include attachments. urls won't return true
+            if result:
+                files.append(path_to_file)
+
+    # compress files
+    # create a nice valid destination filename
+    project_name = ''
+    if 'project_name' in sa.params:
+        project_name = re.sub(r"\s+", '_', sa.params['project_name'])+'_'
+    dest_filename = project_name+datetime.today().strftime('%Y-%m-%d-%H%M%S')+"_"+sa.params['user_login']
+    archive = compress_files(files,file_dir+"/"+dest_filename)
+
+    # now that we have the archive, remove the downloads
+    r = remove_downloaded_files(files)
+
+    # copy to directory
+    result = copy_files([archive],destination_dir)
+
+    return True
+
+
+# ----------------------------------------------
+# Main Block
+# ----------------------------------------------
+if __name__ == "__main__":
+    init_log(logfile)
+
+    try:
+        sa = ShotgunAction(sys.argv[1])
+        logger.info("Firing... %s" % (sys.argv[1]) )
+    except IndexError, e:
+        raise ShotgunException("Missing POST arguments")
+
+    sg = Shotgun(shotgun_conf['url'], shotgun_conf['name'], shotgun_conf['key'],convert_datetimes_to_utc=convert_tz)
+
+    if sa.action == 'package4client':
+        result = packageFilesForClient('sg_qt','/Users/kp/Documents/shotgun/dev/api/files/')
+    else:
+        raise ShotgunException("Unknown action... :%s" % sa.action)
+
+
+    print("\nVersion Packager done!")
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/basic_create_shot.html b/cookbook/examples/basic_create_shot.html new file mode 100644 index 000000000..d5cd83e33 --- /dev/null +++ b/cookbook/examples/basic_create_shot.html @@ -0,0 +1,290 @@ + + + + + + + + + Create A Shot — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Create A Shot

+
+

Building the data and calling create()

+

To create a Shot, you need to provide the following values:

+
    +
  • project is a link to the Project the Shot belongs to. It should be a dictionary like +{"type": "Project", "id": 123} where id is the id of the Project.

  • +
  • code (this is the field that stores the name Shot)

  • +
  • optionally any other info you want to provide

  • +
+

Example:

+
data = {
+    'project': {"type":"Project","id": 4},
+    'code': '100_010',
+    'description': 'Open on a beautiful field with fuzzy bunnies',
+    'sg_status_list': 'ip'
+}
+result = sg.create('Shot', data)
+
+
+

This will create a new Shot named “100_010” in the Project “Gunslinger” (which has an id of 4).

+
    +
  • data is a list of key/value pairs where the key is the column name to update and the value +is the the value to set.

  • +
  • sg is the Flow Production Tracking API instance you created in Create a Flow Production Tracking API instance.

  • +
  • create() is the shotgun_api3.Shotgun.create() API method we are calling. We pass in the +entity type we’re searching for and the data we’re setting.

  • +
+

Result

+

The variable result now contains a dictionary hash with the Shot information you created.:

+
{
+    'code': '100_010',
+    'description': 'Open on a beautiful field with fuzzy bunnies',
+    'id': 40435,
+    'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'},
+    'sg_status_list': 'ip',
+    'type': 'Shot'
+}
+
+
+

In addition, Flow Production Tracking has returned the id that it has assigned to the Shot, as well as a +type value. type is provided for convenience simply to help you identify what entity type +this dictionary represents. It does not correspond to any field in Flow Production Tracking.

+

Flow Production Tracking will always return the id and type keys in the dictionary when there are results +representing an entity.

+
+
+

The Complete Example for creating a Shot

+
#!/usr/bin/env python
+
+# --------------------------------------
+# Imports
+# --------------------------------------
+import shotgun_api3
+from pprint import pprint # useful for debugging
+
+# --------------------------------------
+# Globals
+# --------------------------------------
+# make sure to change this to match your Flow Production Tracking server and auth credentials.
+SERVER_PATH = "https://my-site.shotgrid.autodesk.com"
+SCRIPT_NAME = 'my_script'
+SCRIPT_KEY = '27b65d7063f46b82e670fe807bd2b6f3fd1676c1'
+
+# --------------------------------------
+# Main
+# --------------------------------------
+if __name__ == '__main__':
+
+    sg = shotgun_api3.Shotgun(SERVER_PATH, SCRIPT_NAME, SCRIPT_KEY)
+
+    # --------------------------------------
+    # Create a Shot with data
+    # --------------------------------------
+    data = {
+        'project': {"type":"Project","id": 4},
+        'code': '100_010',
+        'description': 'Open on a beautiful field with fuzzy bunnies',
+        'sg_status_list': 'ip'
+    }
+    result = sg.create('Shot', data)
+    pprint(result)
+    print("The id of the {} is {}.".format(result['type'], result['id']))
+
+
+

And here is the output:

+
{'code': '100_010',
+ 'description': 'Open on a beautiful field with fuzzy bunnies',
+ 'id': 40435,
+ 'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'},
+ 'sg_status_list': 'ip',
+ 'type': 'Shot'}
+The id of the Shot is 40435.
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/basic_create_shot_task_template.html b/cookbook/examples/basic_create_shot_task_template.html new file mode 100644 index 000000000..203fa8d7f --- /dev/null +++ b/cookbook/examples/basic_create_shot_task_template.html @@ -0,0 +1,270 @@ + + + + + + + + + Create a Shot with a Task Template — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Create a Shot with a Task Template

+

Creating a new Shot with a Task Template is just like linking it to another entity, but Flow Production Tracking will apply the Task Template in the background and create the appropriate Tasks on the Shot for you.

+
+

Find the Task Template

+

First we need to find the Task Template we’re going to apply. We’ll assume you know the name of the Task Template you want to use.

+
filters = [['code','is', '3D Shot Template' ]]
+template = sg.find_one('TaskTemplate', filters)
+
+
+
+
+

The Resulting Task Template

+

Assuming the task template was found, we will now have something like this in our template +variable:

+
{'type': 'TaskTemplate', 'id': 12}
+
+
+
+
+

Create the Shot

+

Now we can create the Shot with the link to the TaskTemplate to apply.

+
data = {'project': {'type': 'Project','id': 4},
+        'code': '100_010',
+        'description': 'dark shot with wicked cool ninjas',
+        'task_template': template }
+result = sg.create('Shot', data)
+
+
+

This will create a new Shot named “100_010” linked to the TaskTemplate “3D Shot Template” and +Flow Production Tracking will then create the Tasks defined in the template and link them to the Shot you just +created.

+
    +
  • data is a list of key/value pairs where the key is the column name to update and the value is +the value.

  • +
  • project and code are required

  • +
  • description is just a text field that you might want to update as well

  • +
  • task_template is another entity column where we set the Task Template which has the Tasks we +wish to create by default on this Shot. We found the specific template we wanted to assign in the +previous block by searching

  • +
+
+
+

Create Shot Result

+

The variable result now contains the dictionary of the new Shot that was created.

+
{
+    'code': '010_010',
+    'description': 'dark shot with wicked cool ninjas',
+    'id': 2345,
+    'project': {'id': 4, 'name': 'Gunslinger', 'type': 'Project'},
+    'task_template': {'id': 12,
+                   'name': '3D Shot Template',
+                   'type': 'TaskTemplate'},
+    'type': 'Shot'
+}
+
+
+

If we now search for the Tasks linked to the Shot, we’ll find the Tasks that match our +TaskTemplate:

+
tasks = sg.find('Task', filters=[['entity', 'is', result]])
+
+
+
+

Note

+

You can use an entity dictionary that was returned from the API in a filter as we have +done above. Flow Production Tracking will only look at the id and type keys and will ignore the rest. +This is a handy way to pass around entity dictionaries without having to reformat them.

+
+

Now the tasks variable contains the following:

+
[{'id': 3253, 'type': 'Task'},
+ {'id': 3254, 'type': 'Task'},
+ {'id': 3255, 'type': 'Task'},
+ {'id': 3256, 'type': 'Task'},
+ {'id': 3257, 'type': 'Task'}]
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/basic_create_version_link_shot.html b/cookbook/examples/basic_create_version_link_shot.html new file mode 100644 index 000000000..804a9ac0a --- /dev/null +++ b/cookbook/examples/basic_create_version_link_shot.html @@ -0,0 +1,280 @@ + + + + + + + + + Create a Version Linked to a Shot — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Create a Version Linked to a Shot

+

You’ve just created a sweet new Version of your shot. Now you want to update Flow Production Tracking and create a +new Version entity linked to the Shot.

+
+

Find the Shot

+

First we need to find the Shot since we’ll need to know know its id in order to link our Version +to it.

+
filters = [ ['project', 'is', {'type': 'Project', 'id': 4}],
+            ['code', 'is', '100_010'] ]
+shot = sg.find_one('Shot', filters)
+
+
+
+
+

Find the Task

+

Now we find the Task that the Version relates to, again so we can use the id to link it to the +Version we’re creating. For this search we’ll use the Shot id (which we have now in the shot +variable from the previous search) and the Task Name, which maps to the content field.

+
filters = [ ['project', 'is', {'type': 'Project', 'id': 4}],
+            ['entity', 'is',{'type':'Shot', 'id': shot['id']}],
+            ['content', 'is', 'Animation'] ]
+task = sg.find_one('Task', filters)
+
+
+
+

Note

+

Linking a Task to the Version is good practice. By doing so it is easy for users to see +at what stage a particular Version was created, and opens up other possibilities for tracking +in Flow Production Tracking. We highly recommend doing this whenever possible.

+
+
+
+

Create the Version

+

Now we can create the Version with the link to the Shot and the Task:

+
data = { 'project': {'type': 'Project','id': 4},
+         'code': '100_010_anim_v1',
+         'description': 'first pass at opening shot with bunnies',
+         'sg_path_to_frames': '/v1/gun/s100/010/frames/anim/100_010_animv1_jack.#.jpg',
+         'sg_status_list': 'rev',
+         'entity': {'type': 'Shot', 'id': shot['id']},
+         'sg_task': {'type': 'Task', 'id': task['id']},
+         'user': {'type': 'HumanUser', 'id': 165} }
+result = sg.create('Version', data)
+
+
+

This will create a new Version named ‘100_010_anim_v1’ linked to the ‘Animation’ Task for Shot +‘100_010’ in the Project ‘Gunslinger’.

+
    +
  • data is a list of key/value pairs where the key is the column name to update and the value is +the value to set.

  • +
  • project and code are required

  • +
  • description and sg_path_to_frames are just text fields that you might want to update as +well

  • +
  • sg_status_list is the status column for the Version. Here we are setting it to “rev” (Pending +Review) so that it will get reviewed in the next dailies session and people will “ooh” and “aaah”.

  • +
  • entity is where we link this version to the Shot. Entity columns are always handled with this +format. You must provide the entity type and its id.

  • +
  • sg_task is another entity link field specifically for the Version’s Task link. This uses the +same entity format as the Shot link, but pointing to the Task entity this time.

  • +
  • user is another entity column where we set the artist responsible for this masterpiece. In +this example, I know the ‘id’ that corresponds to this user, but if you don’t know the id you can +look it up by searching on any of the fields, similar to what we did for the Shot above, like:

    +
    filters = [['login', 'is', 'jschmoe']]
    +user = sg.find('HumanUser', filters)
    +
    +
    +
  • +
+

The result variable now contains the id of the new Version that was created:

+
214
+
+
+
+
+

Upload a movie for review in Screening Room

+

If Screening Room’s transcoding feature is enabled on your site (hosted sites have this by +default), then you can use the upload() method to upload a QuickTime +movie, PDF, still image, etc. to the sg_uploaded_movie field on a Version. Once the movie is +uploaded, it will automatically be queued for transcoding. When transcoding is complete, the +Version will be playable in the Screening Room app, or in the Overlay player by clicking on the +Play button that will appear on the Version’s thumbnail.

+
+

Note

+

Transcoding also generates a thumbnail and filmstrip thumbnail automatically.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/basic_delete_shot.html b/cookbook/examples/basic_delete_shot.html new file mode 100644 index 000000000..54185a8d5 --- /dev/null +++ b/cookbook/examples/basic_delete_shot.html @@ -0,0 +1,246 @@ + + + + + + + + + Delete A Shot — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Delete A Shot

+
+

Calling delete()

+

Deleting an entity in Flow Production Tracking is pretty straight-forward. No extraneous steps required.:

+
result = sg.delete("Shot", 40435)
+
+
+
+
+

Delete Shot Result

+

If the Shot was deleted successfully result will contain:

+
True
+
+
+
+
+

The Complete Example for deleting a Shot

+
#!/usr/bin/env python
+
+# --------------------------------------
+# Imports
+# --------------------------------------
+import shotgun_api3
+from pprint import pprint # useful for debugging
+
+# --------------------------------------
+# Globals
+# --------------------------------------
+# make sure to change this to match your Flow Production Tracking server and auth credentials.
+SERVER_PATH = "https://my-site.shotgrid.autodesk.com"
+SCRIPT_NAME = 'my_script'
+SCRIPT_KEY = '27b65d7063f46b82e670fe807bd2b6f3fd1676c1'
+
+# --------------------------------------
+# Main
+# --------------------------------------
+if __name__ == '__main__':
+
+    sg = shotgun_api3.Shotgun(SERVER_PATH, SCRIPT_NAME, SCRIPT_KEY)
+
+    # --------------------------------------
+    # Delete a Shot by id
+    # --------------------------------------
+    result = sg.delete("Shot", 40435)
+    pprint(result)
+
+
+

And here is the output:

+
True
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/basic_find_shot.html b/cookbook/examples/basic_find_shot.html new file mode 100644 index 000000000..164467b7b --- /dev/null +++ b/cookbook/examples/basic_find_shot.html @@ -0,0 +1,267 @@ + + + + + + + + + Find a Shot — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Find a Shot

+
+

Building the Query

+

We are going to assume we know the ‘id’ of the Shot we’re looking for in this example.:

+
filters = [['id', 'is', 40435]]
+result = sg.find_one('Shot', filters)
+
+
+

Pretty simple right? Well here’s a little more insight into what’s going on.

+
    +
  • filters is an list of filter conditions. In this example we are filtering for Shots where +the id column is 40435.

  • +
  • sg is the Flow Production Tracking API instance.

  • +
  • find_one() is the find_one() API method we are calling. We +provide it with the entity type we’re searching for and our filters.

  • +
+
+
+

Seeing the Result

+

So what does this return? The variable result now contains:

+
{'type': 'Shot','id': 40435}
+
+
+

By default, find_one() returns a single dictionary object with +the type and id fields. So in this example, we found a Shot matching that id, and Flow Production Tracking +returned it as a dictionary object with type and id keys .

+

How do we know that result contains the Shot dictionary object? You can trust us… but just to be +sure, the pprint (PrettyPrint) module from the Python standard library is a really good tool +to help with debugging. It will print out objects in a nicely formatted way that makes things +easier to read. So we’ll add that to the import section of our script.:

+
import shotgun_api3
+from pprint import pprint # useful for debugging
+
+
+
+
+

The Complete Example for finding a Shot

+
#!/usr/bin/env python
+
+# --------------------------------------
+# Imports
+# --------------------------------------
+import shotgun_api3
+from pprint import pprint # useful for debugging
+
+# --------------------------------------
+# Globals
+# --------------------------------------
+# make sure to change this to match your Flow Production Tracking server and auth credentials.
+SERVER_PATH = "https://my-site.shotgrid.autodesk.com"
+SCRIPT_NAME = 'my_script'
+SCRIPT_KEY = '27b65d7063f46b82e670fe807bd2b6f3fd1676c1'
+
+# --------------------------------------
+# Main
+# --------------------------------------
+if __name__ == '__main__':
+
+    sg = shotgun_api3.Shotgun(SERVER_PATH, SCRIPT_NAME, SCRIPT_KEY)
+
+    # --------------------------------------
+    # Find a Shot by id
+    # --------------------------------------
+    filters = [['id', 'is', 40435]]
+    result = sg.find_one('Shot', filters)
+    pprint(result)
+
+
+

And here is the output:

+
{'type': 'Shot','id': 40435}
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/basic_sg_instance.html b/cookbook/examples/basic_sg_instance.html new file mode 100644 index 000000000..d69f8a6c9 --- /dev/null +++ b/cookbook/examples/basic_sg_instance.html @@ -0,0 +1,215 @@ + + + + + + + + + Create a Flow Production Tracking API instance — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Create a Flow Production Tracking API instance

+

This example shows you how to establish your initial connection to Flow Production Tracking using script-based +authentication. sg represents your Flow Production Tracking API instance. Be sure you’ve read +Setting Up Flow Production Tracking for API Access.

+
import pprint # Useful for debugging
+
+import shotgun_api3
+
+SERVER_PATH = "https://my-site.shotgrid.autodesk.com"
+SCRIPT_NAME = 'my_script'
+SCRIPT_KEY = '27b65d7063f46b82e670fe807bd2b6f3fd1676c1'
+
+sg = shotgun_api3.Shotgun(SERVER_PATH, SCRIPT_NAME, SCRIPT_KEY)
+
+# Just for demo purposes, this will print out property and method names available on the
+# sg connection object
+pprint.pprint([symbol for symbol in sorted(dir(sg)) if not symbol.startswith('_')])
+
+
+

For further information on what you can do with this Flow Production Tracking object you can read the +API reference.

+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/basic_update_shot.html b/cookbook/examples/basic_update_shot.html new file mode 100644 index 000000000..6aa1b933c --- /dev/null +++ b/cookbook/examples/basic_update_shot.html @@ -0,0 +1,278 @@ + + + + + + + + + Update A Shot — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Update A Shot

+
+

Building the data and calling update()

+

To update a Shot, you need to provide the id of the Shot and a list of fields you want to +update.:

+
data = {
+    'description': 'Open on a beautiful field with fuzzy bunnies',
+    'sg_status_list': 'ip'
+    }
+result = sg.update('Shot', 40435, data)
+
+
+

This will update the description and the sg_status_list fields for the Shot with id of +40435.

+
    +
  • data is a list of key/value pairs where the key is the field name to update and the value to +update it to.

  • +
  • sg is the Flow Production Tracking API instance.

  • +
  • update() is the shotgun_api3.Shotgun.update() API method we are calling. We provide it +with the entity type we’re updating, the id of the entity, and the data we’re updating it +with.

  • +
+
+
+

Result

+

The variable result now contains the Shot object that with the updated values.:

+
{
+    'description': 'Opening establishing shot with titles and fuzzy bunnies',
+    'sg_status_list': 'ip',
+    'type': 'Shot',
+    'id': 40435
+}
+
+
+

In addition, Flow Production Tracking has returned the id for the Shot, as well as a type value. type +is provided for convenience simply to help you identify what entity type this dictionary represents. +It does not correspond to any field in Flow Production Tracking.

+

Flow Production Tracking will always return the id and type keys in the dictionary when there are results +representing an entity.

+
+
+

The Complete Example for updating a Shot

+
#!/usr/bin/env python
+
+# --------------------------------------
+# Imports
+# --------------------------------------
+import shotgun_api3
+from pprint import pprint # useful for debugging
+
+# --------------------------------------
+# Globals
+# --------------------------------------
+# make sure to change this to match your Flow Production Tracking server and auth credentials.
+SERVER_PATH = "https://my-site.shotgrid.autodesk.com"
+SCRIPT_NAME = 'my_script'
+SCRIPT_KEY = '27b65d7063f46b82e670fe807bd2b6f3fd1676c1'
+
+# --------------------------------------
+# Main
+# --------------------------------------
+if __name__ == '__main__':
+
+    sg = shotgun_api3.Shotgun(SERVER_PATH, SCRIPT_NAME, SCRIPT_KEY)
+
+    # --------------------------------------
+    # Update Shot with data
+    # --------------------------------------
+    data = {
+        'description': 'Open on a beautiful field with fuzzy bunnies',
+        'sg_status_list': 'ip'
+        }
+    result = sg.update('Shot', 40435, data)
+    pprint(result)
+
+
+

And here is the output:

+
{'description': 'Opening establishing shot with titles and fuzzy bunnies',
+ 'id': 40435,
+ 'sg_status_list': 'ip',
+ 'type': 'Shot'}
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/basic_upload_thumbnail_version.html b/cookbook/examples/basic_upload_thumbnail_version.html new file mode 100644 index 000000000..795382d3b --- /dev/null +++ b/cookbook/examples/basic_upload_thumbnail_version.html @@ -0,0 +1,220 @@ + + + + + + + + + Upload a Thumbnail for a Version — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Upload a Thumbnail for a Version

+

So you’ve created a new Version of a Shot, and you’ve updated Flow Production Tracking, but now you want to upload a +beauty frame to display as the thumbnail for your Version. We’ll assume you already have the image +made (located on your machine at /v1/gun/s100/010/beauties/anim/100_010_animv1.jpg) . And since +you’ve just created your Version in Flow Production Tracking, you know its id is 214.

+
+

Note

+

If you upload a movie file or image to the sg_uploaded_movie field and you have +transcoding enabled on your server (the default for hosted sites), a thumbnail will be +generated automatically as well as a filmstrip thumbnail (if possible). +This is a basic example of how to manually provide or replace a thumbnail image.

+
+
+

Upload the Image using upload_thumbnail()

+
sg.upload_thumbnail("Version", 214, "/v1/gun/s100/010/beauties/anim/100_010_animv1.jpg")
+
+
+

Flow Production Tracking will take care of resizing the thumbnail for you. If something does go wrong, an exception +will be thrown and you’ll see the error details.

+
+

Note

+

The result returned by upload_thumbnail() is an integer +representing the id of a special Attachment entity in Flow Production Tracking. Working with Attachments +is beyond the scope of this example. :)

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/examples/svn_integration.html b/cookbook/examples/svn_integration.html new file mode 100644 index 000000000..e167ab515 --- /dev/null +++ b/cookbook/examples/svn_integration.html @@ -0,0 +1,341 @@ + + + + + + + + + Subversion (SVN) Integration — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Subversion (SVN) Integration

+

Integrating Flow Production Tracking with Subversion consists of two basic parts:

+
    +
  • Setup a post-commit hook in Subversion.

  • +
  • Create a Flow Production Tracking API script to create the Revision in Flow Production Tracking. This script will be called by +the post-commit hook.

  • +
+
+

Post-Commit Hook

+

To setup the post-commit hook:

+
    +
  • Locate the post-commit.tmpl file, which is found inside the hooks folder in your +repository directory. This is a template script that has lots of useful comments and can serve +as a starting point for the real thing.

  • +
  • Create your very own executable script, and save it in the same hooks folder, name it +post-commit, and give it executable permission.

  • +
  • In your post-commit script, invoke your Flow Production Tracking API script.

  • +
+

If this is entirely new to you, we highly suggest reading up on the topic. O’Reilly has a free +online guide for Subversion 1.5 and 1.6

+

Here’s an example of a post-commit hook that we’ve made for Subversion 1.6 using an executable +Unix shell script. The last line invokes “shotgun_api_script.py” which is our Python script that +will do all the heavy lifting. Lines 4 thru 8 queue up some objects that we’ll use later on.

+
 1 #!/bin/sh
+ 2 # POST-COMMIT HOOK
+ 3
+ 4 REPOS="$1"
+ 5 REV="$2"
+ 6
+ 7 export AUTHOR="$(svnlook author $REPOS --revision $REV)"
+ 8 export COMMENT="$(svnlook log $REPOS --revision $REV)"
+ 9
+10 /Absolute/path/to/shotgun_api_script.py
+
+
+
+

Explanation of selected lines

+
    +
  • lines 4-5: After the commit, Subversion leaves us two string objects in the environment: +REPOS and REV (the repository path and the revision number, respectively).

  • +
  • lines 7-8: Here we use the shell command export to create two more string objects in the +environment: AUTHOR and COMMENT. To get each value, we use the svnlook command with +our REPOS and REV values, first with the author, and then with log subcommand. +These are actually the first two original lines of code - everything else to this point was +pre-written already in the post-commit.tmpl file. nice :)

  • +
  • line 10: This is the absolute path to our Flow Production Tracking API Script.

  • +
+
+
+
+

Flow Production Tracking API Script

+

This script will create the Revision and populate it with some metadata using the Flow Production Tracking Python +API. It will create our Revision in Flow Production Tracking along with the author, comment, and because we use +Trac (a web-based interface for Subversion), it will also populate a URL field with a clickable +link to the Revision.

+
 1 #!/usr/bin/env python
+ 2 # ---------------------------------------------------------------------------------------------
+ 3
+ 4 # ---------------------------------------------------------------------------------------------
+ 5 # Imports
+ 6 # ---------------------------------------------------------------------------------------------
+ 7 import sys
+ 8 from shotgun_api3_preview import Shotgun
+ 9 import os
+10
+11 # ---------------------------------------------------------------------------------------------
+12 # Globals - update all of these values to those of your studio
+13 # ---------------------------------------------------------------------------------------------
+14 SERVER_PATH = 'https ://my-site.shotgrid.autodesk.com' # or http:
+15 SCRIPT_USER = 'script_name'
+16 SCRIPT_KEY = '3333333333333333333333333333333333333333'
+17 REVISIONS_PATH = 'https ://serveraddress/trac/changeset/' # or other web-based UI
+18 PROJECT = {'type':'Project', 'id':27}
+19
+20 # ---------------------------------------------------------------------------------------------
+21 # Main
+22 # ---------------------------------------------------------------------------------------------
+23 if __name__ == '__main__':
+24
+25    sg = Shotgun(SERVER_PATH, SCRIPT_USER, SCRIPT_KEY)
+26
+27    # Set Python variables from the environment objects
+28    revision_code = os.environ['REV']
+29    repository = os.environ['REPOS']
+30    description = os.environ['COMMENT']
+31    author = os.environ['AUTHOR']
+32
+33    # Set the Trac path for this specific revision
+34    revision_url = REVISIONS_PATH + revision_code
+35
+36    # Validate that author is a valid Flow Production Tracking HumanUser
+37    result = sg.find_one("HumanUser", [['login', 'is', author]])
+38    if result:
+39        # Create Revision
+40        url = {'content_type':'http_url', 'url':revision_url, 'name':'Trac'}
+41        parameters = {'project':PROJECT,
+42                        'code':str(revision_code),
+43                        'description':description,
+44                        'attachment':url,
+45                        'created_by':{"type":"HumanUser", "id":result['id']}
+46                        }
+47        revision = sg.create("Revision", parameters)
+48        print("created Revision #"+str(revision_code))
+49
+50    # Send error message if valid HumanUser is not found
+51    else:
+52        print("Unable to find a valid Flow Production Tracking User with login: {}, Revision not created in Flow Production Tracking.".format(author))
+
+
+
+

Explanation of selected lines:

+
    +
  • line 14: This should be the URL to your instance of Flow Production Tracking.

  • +
  • lines 15-16: Make sure you get these values from the “Scripts” page in the Admin section of +the Flow Production Tracking web application. If you’re not sure how to do this, check out Authentication.

  • +
  • line 17: This is the address of Trac, our web-based interface that we use with Subversion. +You may use a different interface, or none at all, so feel free to adjust this line or ignore it +as your case may be.

  • +
  • line 18: Every Revision in Flow Production Tracking must have a Project, which is passed to the API as a +dictionary with two keys, the type and the id. Of course the type value will always +remain Project (case sensitive), but the id will change by Project. To find out the +id of your Project, go to the Projects page in the Flow Production Tracking web application, locate the +Project where you want your Revisions created, and then locate its id field (which you may +need to display - if you don’t see it, right click on any column header then select +“Insert Column” > “Id”). Note that for this example we assume that all Revisions in this +Subversion repository will belong to the same Project.

  • +
  • lines 28-31: Grab the values from the objects that were left for us in the environment.

  • +
  • line 34: Add the Revision number to complete the path of our Trac url.

  • +
  • line 37: Make sure that a valid User exists in Flow Production Tracking. In our example, we assume that our +Users’ Flow Production Tracking logins match their Subversion names. If the user exists in Flow Production Tracking, that +user’s id will be returned as result['id'], which we will need later on in line 46.

  • +
  • lines 40-48: Use all the meta data we’ve gathered to create a Revision in Flow Production Tracking. If none +of these lines make any sense, check out more on the create() method +here. Line 41 deserves special mention: notice that we define a dictionary called url that +has three important keys: content_type, url, and name, and we then pass this in as +the value for the attachment field when we create the Revision. If you’re even in doubt, +double check the syntax and requirements for the different field types here.

  • +
+
+
+
+

Troubleshooting

+
+

My post-commit script is simply not running. I can run it manually, but commits are not triggering it.

+

Make sure that the script is has explicitly been made executable and that all users who will +invoke it have appropriate permissions for the script and that folders going back to root.

+
+
+

My Flow Production Tracking API script is not getting called by the post-commit hook.

+

Make sure that the script is called using its absolute path.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/smart_cut_fields.html b/cookbook/smart_cut_fields.html new file mode 100644 index 000000000..0db574941 --- /dev/null +++ b/cookbook/smart_cut_fields.html @@ -0,0 +1,232 @@ + + + + + + + + + Smart Cut Fields — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Smart Cut Fields

+
+

Warning

+

Smart Cut Fields should be considered deprecated. ShotGrid v7.0, introduced a new version of +cut support. Read the Cut Support Documentation here.

+
+

If you want to work with ‘smart’ cut fields through the API, your script should use a corresponding +‘raw’ fields for all updates. The ‘smart_cut_fields’ are primarily for display in the UI, the real +data is stored in a set of ‘raw’ fields that have different names.

+
+

Smart Fields

+

In the UI these fields attempt to calculate values based on data entered into the various fields. +These fields can be queried via the API using the find() method, but not updated. Note that we are +deprecating this feature and recommend creating your own cut fields from scratch, which will not +contain any calculations which have proven to be too magical at times.

+
    +
  • smart_cut_duration

  • +
  • smart_cut_in

  • +
  • smart_cut_out

  • +
  • smart_cut_summary_display *

  • +
  • smart_cut_duration_display *

  • +
  • smart_head_duration

  • +
  • smart_head_in

  • +
  • smart_head_out

  • +
  • smart_tail_duration

  • +
  • smart_tail_in

  • +
  • smart_tail_out

  • +
  • smart_working_duration *

  • +
+
+

Note

+

* these are special summary fields that have no corresponding “raw” field.

+
+
+
+

Raw Fields

+

These are the “raw” fields that can be queried and updated through the API:

+
    +
  • cut_duration

  • +
  • cut_in

  • +
  • cut_out

  • +
  • head_duration

  • +
  • head_in

  • +
  • head_out

  • +
  • tail_duration

  • +
  • tail_in

  • +
  • tail_out

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/tasks.html b/cookbook/tasks.html new file mode 100644 index 000000000..0ee82b3cb --- /dev/null +++ b/cookbook/tasks.html @@ -0,0 +1,214 @@ + + + + + + + + + Working With Tasks — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ + +
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/tasks/split_tasks.html b/cookbook/tasks/split_tasks.html new file mode 100644 index 000000000..d3c826135 --- /dev/null +++ b/cookbook/tasks/split_tasks.html @@ -0,0 +1,405 @@ + + + + + + + + + Split Tasks — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Split Tasks

+

Split tasks can be created and edited via the API but must comply to some rules. Before going +further, a good understanding of how Flow Production Tracking handles task dates is useful.

+
+

Overview

+

The Task entity has a field called splits which is a list of dictionaries. Each dictionary +in the list has two string keys, start and end, who’s values are strings representing dates +in the YYYY-mm-dd format.

+
[{'start': '2012-12-11', 'end': '2012-12-12'}, {'start': '2012-12-18', 'end': '2012-12-19'}]
+
+
+
    +
  • Splits should be ordered from eldest to newest.

  • +
  • There should be gaps between each split.

    +
      +
    • Gaps are defined as at least one working day. Non-workdays such as weekends and holidays +are not gaps.

    • +
    +
  • +
+

If there are multiple splits but there between two or more splits there is no gap, an error will be +raised. For example:

+
>>> sg.update('Task', 2088, {'splits':[{'start':'2012-12-10', 'end':'2012-12-11'}, {'start':'2012-12-12', 'end':'2012-12-14'}, {'start':'2012-12-19', 'end':'2012-12-20'}]})
+Traceback (most recent call last):
+  File "<stdin>", line 1, in <module>
+  File "/shotgun/src/python-api/shotgun_api3/shotgun.py", line 600, in update
+    record = self._call_rpc("update", params)
+  File "/shotgun/src/python-api/shotgun_api3/shotgun.py", line 1239, in _call_rpc
+    self._response_errors(response)
+  File "/shotgun/src/python-api/shotgun_api3/shotgun.py", line 1435, in _response_errors
+    "Unknown Error"))
+    shotgun_api3.shotgun.Fault: API update() CRUD ERROR #5: Update failed for [Task.splits]: (task.rb) The start date in split segment 2 is only one calendar day away from  the end date of the previous segment. There must be calendar days between split segments.
+
+
+

Alternately, a split value can be set to None to remove splits (you can also use an empty list). +This will preserve the start_date and due_date values but recalculate the duration value +while appropriately considering all workday rules in effect.

+
+
+

How Do Splits Influence Dates And Dates Influence Splits

+
    +
  • If splits are specified the supplied start_date, due_date and duration fields will be ignored.

  • +
  • The start_date will be inferred from the earliest split.

  • +
  • The due_date will be inferred from the last split.

  • +
  • If the start_date is changed on a task that has splits the first split will be moved to start +on the new start_date and all further splits will be moved while maintaining gap lengths +between splits and respecting workday rules.

  • +
  • If the due_date is changed on a task that has splits the last split will be moved to end on +the new due_date and all prior splits will be moved while maintaining gap lengths between +splits and respecting workday rules.

  • +
  • If the duration is changed two scenarios are possible

    +
    +
      +
    • In the case of a longer duration, additional days will be added to the end of the last split

    • +
    • In the case of a shorter duration splits, starting with the latest ones, will be either +removed or shortened until the new duration is met.

    • +
    +
    +
  • +
+
+

Examples for splitting Tasks

+

Throughout the following examples, each successive one will build on the previous.

+
+

start_date, due_date and duration being ignored

+
sg.update('Task', 2088, {
+    'start_date': '2012-12-06',
+    'due_date': '2012-12-23',
+    'duration': 3600,
+    'splits': [
+        {'start': '2012-12-11', 'end': '2012-12-12'},
+        {'start': '2012-12-18', 'end': '2012-12-19'}
+    ]
+})
+
+# Task = {
+#     'start_date': '2012-12-11',
+#     'due_date': '2012-12-19',
+#     'duration': 2400,
+#     'splits': [
+#         {'start': '2012-12-11', 'end': '2012-12-12'},
+#         {'start': '2012-12-18', 'end': '2012-12-19'}
+#     ]
+# }
+
+
+

Result:

+../../_images/split_tasks_1.png +
+
+

Moving the start_date of a split task

+
sg.update('Task', 2088, {
+    'start_date': '2012-12-10'
+})
+
+# Task = {
+#     'start_date': '2012-12-10',
+#     'due_date': '2012-12-18',
+#     'splits': [
+#         {'start': '2012-12-10', 'end': '2012-12-11'},
+#         {'start': '2012-12-14', 'end': '2012-12-18'}
+#     ]
+# }
+
+
+

Result:

+../../_images/split_tasks_2.png +
+
+

Moving the due_date of a split task

+
sg.update('Task', 2088, {
+    'due_date': '2012-12-19'
+})
+
+# Task = {
+#     'start_date': '2012-12-10',
+#     'due_date': '2012-12-19',
+#     'splits': [
+#         {'start': '2012-12-10', 'end': '2012-12-11'},
+#         {'start': '2012-12-14', 'end': '2012-12-19'}
+#     ]
+# }
+
+
+

Result:

+../../_images/split_tasks_3.png +
+
+

Setting a longer duration

+
sg.update('Task', 2088, {
+    'duration': 4200
+})
+
+# Task = {
+#     'start_date': '2012-12-10',
+#     'due_date': '2012-12-21',
+#     'duration': 4200,
+#     'splits': [
+#         {'start': '2012-12-10', 'end': '2012-12-11'},
+#         {'start': '2012-12-14', 'end': '2012-12-21'}
+#     ]
+# }
+
+
+

Result:

+../../_images/split_tasks_4.png +
+
+

Setting a shorter duration

+
sg.update('Task', 2088, {
+    'duration': 2400
+})
+
+# Task = {
+#     'start_date': '2012-12-10',
+#     'due_date': '2012-12-18',
+#     'duration': 2400,
+#     'splits': [
+#         {'start': '2012-12-10', 'end': '2012-12-11'},
+#         {'start': '2012-12-14', 'end': '2012-12-18'}
+#     ]
+# }
+
+
+

Result:

+../../_images/split_tasks_5.png +
+
+

Another example of shorter duration

+

We won’t be using the previous result for this example but rather, the following:

+../../_images/split_tasks_6.png +

who’s duration we will shorten past the last split.

+
sg.update('Task', 2088, {
+    'duration': 1800
+})
+
+# Task = {
+#     'start_date': '2012-12-10',
+#     'due_date': '2012-12-18',
+#     'duration': 2400,
+#     'splits': [
+#         {'start': '2012-12-10', 'end': '2012-12-11'},
+#         {'start': '2012-12-14', 'end': '2012-12-18'}
+#     ]
+# }
+
+
+

Result:

+../../_images/split_tasks_7.png +
+
+

Setting the due_date in a gap

+

When a due date is set in a gap later splits are removed and the day of the due date is considered +a day when work will be done.

+

For this example let’s assume as a starting point the result of the 5th example:

+../../_images/split_tasks_8.png +
sg.update('Task', 2088, {
+    'due_date': '2012-12-13'
+})
+
+# Task = {
+#     'start_date': '2012-12-10',
+#     'due_date': '2012-12-13',
+#     'duration': 1800,
+#     'splits': [
+#         {'start': '2012-12-10', 'end': '2012-12-11'},
+#         {'start': '2012-12-13', 'end': '2012-12-13'}
+#     ]
+# }
+
+
+

Result:

+../../_images/split_tasks_9.png +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/tasks/task_dependencies.html b/cookbook/tasks/task_dependencies.html new file mode 100644 index 000000000..0d2a0fa0d --- /dev/null +++ b/cookbook/tasks/task_dependencies.html @@ -0,0 +1,540 @@ + + + + + + + + + Task Dependencies — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Task Dependencies

+

Task dependencies work the same way in the API as they do in the UI. You can filter and sort on +any of the fields. For information about Task Dependencies in Flow Production Tracking, check out the main +documentation page on our support site

+
+

Create Tasks

+

Let’s create a couple of Tasks and create dependencies between them. First we’ll create a “Layout” +Task for our Shot:

+
data = {
+    'project': {'type':'Project', 'id':65},
+    'content': 'Layout',
+    'start_date': '2010-04-28',
+    'due_date': '2010-05-05',
+    'entity': {'type':'Shot', 'id':860}
+    }
+result = sg.create(Task, data)
+
+
+

Returns:

+
{'content': 'Layout',
+ 'due_date': '2010-05-05',
+ 'entity': {'id': 860, 'name': 'bunny_010_0010', 'type': 'Shot'},
+ 'id': 556,
+ 'project': {'id': 65, 'name': 'Demo Animation Project', 'type': 'Project'},
+ 'start_date': '2010-04-28',
+ 'type': 'Task'}
+
+
+

Now let’s create an “Anm” Task for our Shot:

+
data = {
+    'project': {'type':'Project', 'id':65},
+    'content': 'Anm',
+    'start_date': '2010-05-06',
+    'due_date': '2010-05-12',
+    'entity': {'type':'Shot', 'id':860}
+    }
+result = sg.create(Task, data)
+
+
+

Returns:

+
{'content': 'Anm',
+ 'due_date': '2010-05-12',
+ 'entity': {'id': 860, 'name': 'bunny_010_0010', 'type': 'Shot'},
+ 'id': 557,
+ 'project': {'id': 65, 'name': 'Demo Animation Project', 'type': 'Project'},
+ 'start_date': '2010-05-06,
+ 'type': 'Task'}
+
+
+
+
+

Create A Dependency

+

Tasks each have an upstream_tasks field and a downstream_tasks field. Each field is a +list [] type and can contain zero, one, or multiple Task entity dictionaries representing the +dependent Tasks. +There are four dependency types from which you can choose: finish-to-start-next-day, start-to-finish-next-day, start-to-start, finish-to-finish. +If no dependency type is provided the default finish-to-start-next-day will be used. +Here is how to create a dependency between our “Layout” and “Anm” Tasks:

+
# make 'Layout' an upstream Task to 'Anm'. (aka, make 'Anm' dependent on 'Layout') with finish-to-start-next-day dependency type
+data = {
+    'upstream_tasks':[{'type':'Task','id':556, 'dependency_type': 'finish-to-start-next-day'}]
+}
+result = sg.update('Task', 557, data)
+
+
+

Returns:

+
[{'id': 557,
+  'type': 'Task',
+  'upstream_tasks': [{'id': 556, 'name': 'Layout', 'type': 'Task'}]}]
+
+
+

This will also automatically update the downstream_tasks field on ‘Layout’ to include the ‘Anm’ Task.

+
+
+

Query Task Dependencies

+

Task Dependencies each have a dependent_task_id and a task_id fields. +They correspond to upstream_task and downstream_task ids of the dependency accordingly. +Here is how to get a TaskDependency using a dependent_task_id and a task_id fields:

+
filters = [["dependent_task_id", "is", 72], ["task_id", "is", 75]]
+result = sg.find_one('TaskDependency', filters)
+
+
+

Returns:

+
{'type': 'TaskDependency', 'id': 128}
+
+
+
+
+

Updating the Dependency type

+

When updating the dependency type for the existing dependencies, +update the dependency_type field of the TaskDependency directly:

+
result = sg.update('TaskDependency', 128, {'dependency_type': 'start-to-start'})
+
+
+

Returns:

+
{'dependency_type': 'start-to-start', 'type': 'TaskDependency', 'id': 128}
+
+
+
+
+

Query Tasks with Dependency Fields

+

So now lets look at the Tasks we’ve created and their dependency-related fields:

+
filters = [
+    ['entity', 'is', {'type':'Shot', 'id':860}]
+]
+fields = [
+    'content',
+    'start_date',
+    'due_date',
+    'upstream_tasks',
+    'downstream_tasks',
+    'dependency_violation',
+    'pinned'
+    ]
+result = sg.find("Task", filters, fields)
+
+
+

Returns:

+
[{'content': 'Layout',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'Anm', 'id': 557}],
+  'due_date': '2010-05-05',
+  'id': 556,
+  'pinned': False,
+  'start_date': '2010-04-28',
+  'type': 'Task',
+  'upstream_tasks': []},
+ {'content': 'Anm',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'FX', 'id': 558}],
+  'due_date': '2010-05-12',
+  'id': 557,
+  'pinned': False,
+  'start_date': '2010-05-06',
+  'type': 'Task',
+  'upstream_tasks': [{'type': 'Task', 'name': 'Layout', 'id': 556}]},
+...
+
+
+

Note that we have also created additional Tasks for this Shot but we’re going to focus on these +first two for simplicity.

+
+
+

Updating the End Date on a Task with Downstream Task Dependencies

+

If we update the due_date field on our “Layout” Task, we’ll see that the “Anm” Task dates +will automatically get pushed back to keep the dependency satisfied:

+
result = sg.update('Task', 556, {'due_date': '2010-05-07'})
+
+
+

Returns:

+
[{'due_date': '2010-05-07', 'type': 'Task', 'id': 556}]
+
+
+

Our Tasks now look like this (notice the new dates on the “Anm” Task):

+
[{'content': 'Layout',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'Anm', 'id': 557}],
+  'due_date': '2010-05-07',
+  'id': 556,
+  'pinned': False,
+  'start_date': '2010-04-28',
+  'type': 'Task',
+  'upstream_tasks': []},
+ {'content': 'Anm',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'FX', 'id': 558}],
+  'due_date': '2010-05-14',
+  'id': 557,
+  'pinned': False,
+  'start_date': '2010-05-10',
+  'type': 'Task',
+  'upstream_tasks': [{'type': 'Task', 'name': 'Layout', 'id': 556}]},
+...
+
+
+
+
+

Creating a Dependency Violation by pushing up a Start Date

+

Task Dependencies can work nicely if you are pushing out an end date for a Task as it will just +recalculate the dates for all of the dependent Tasks. But what if we push up the Start Date of our +“Anm” Task to start before our “Layout” Task is scheduled to end?

+
result = sg.update('Task', 557, {'start_date': '2010-05-06'})
+
+
+

Returns:

+
[{'type': 'Task', 'start_date': '2010-05-06', 'id': 557}]
+
+
+

Our Tasks now look like this:

+
[{'content': 'Layout',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'Anm', 'id': 557}],
+  'due_date': '2010-05-07',
+  'id': 556,
+  'pinned': False,
+  'start_date': '2010-04-28',
+  'type': 'Task',
+  'upstream_tasks': []},
+ {'content': 'Anm',
+  'dependency_violation': True,
+  'downstream_tasks': [{'type': 'Task', 'name': 'FX', 'id': 558}],
+  'due_date': '2010-05-12',
+  'id': 557,
+  'pinned': True,
+  'start_date': '2010-05-06',
+  'type': 'Task',
+  'upstream_tasks': [{'type': 'Task', 'name': 'Layout', 'id': 556}]},
+ ...
+
+
+

Because the “Anm” Task start_date depends on the due_date of the “Layout” Task, this +change creates a dependency violation. The update succeeds, but Flow Production Tracking has also set the +dependency_violation field to True and has also updated the pinned field to True.

+

The pinned field simply means that if the upstream Task(s) are moved, the “Anm” Task will no +longer get moved with it. The dependency is still there (in upstream_tasks) but the Task is +now “pinned” to those dates until the Dependency Violation is resolved.

+
+
+

Resolving a Dependency Violation by updating the Start Date

+

We don’t want that violation there. Let’s revert that change so the Start Date for “Anm” is after +the End Date of “Layout”:

+
result = sg.update('Task', 557, {'start_date': '2010-05-10'})
+
+
+

Returns:

+
[{'type': 'Task', 'start_date': '2010-05-10', 'id': 557}]
+
+
+

Our Tasks now look like this:

+
[{'content': 'Layout',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'Anm', 'id': 557}],
+  'due_date': '2010-05-07',
+  'id': 556,
+  'pinned': False,
+  'start_date': '2010-04-28',
+  'type': 'Task',
+  'upstream_tasks': []},
+ {'content': 'Anm',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'FX', 'id': 558}],
+  'due_date': '2010-05-14',
+  'id': 557,
+  'pinned': True,
+  'start_date': '2010-05-10',
+  'type': 'Task',
+  'upstream_tasks': [{'type': 'Task', 'name': 'Layout', 'id': 556}]},
+ ...
+
+
+

The dependency_violation field has now been set back to False since there is no longer +a violation. But notice that the pinned field is still True. We will have to manually +update that if we want the Task to travel with its dependencies again:

+
result = sg.update('Task', 557, {'pinned': False})
+
+
+

Returns:

+
[{'pinned': False, 'type': 'Task', 'id': 557}]
+
+
+

Our Tasks now look like this:

+
[{'content': 'Layout',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'Anm', 'id': 557}],
+  'due_date': '2010-05-07',
+  'id': 556,
+  'pinned': False,
+  'start_date': '2010-04-28',
+  'type': 'Task',
+  'upstream_tasks': []},
+ {'content': 'Anm',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'FX', 'id': 558}],
+  'due_date': '2010-05-14',
+  'id': 557,
+  'pinned': False,
+  'start_date': '2010-05-10',
+  'type': 'Task',
+  'upstream_tasks': [{'type': 'Task', 'name': 'Layout', 'id': 556}]},
+ ...
+
+
+

Looks great. But that’s an annoying manual process. What if we want to just reset a Task so that +it automatically gets updated so that the Start Date is after its dependent Tasks?

+
+
+

Updating the pinned field on a Task with a Dependency Violation

+

Let’s go back a couple of steps to where our “Anm” Task had a Dependency Violation because we had +moved the Start Date up before the “Layout” Task End Date. Remember that the pinned field +was also True. If we simply update the pinned field to be False, Flow Production Tracking will also +automatically update the Task dates to satisfy the upstream dependencies and reset the +dependency_violation value to False:

+
result = sg.update('Task', 557, {'pinned': False})
+
+
+

Returns:

+
[{'pinned': False, 'type': 'Task', 'id': 557}]
+
+
+

Our Tasks now look like this:

+
[{'content': 'Layout',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'Anm', 'id': 557}],
+  'due_date': '2010-05-07',
+  'id': 556,
+  'pinned': False,
+  'start_date': '2010-04-28',
+  'type': 'Task',
+  'upstream_tasks': []},
+ {'content': 'Anm',
+  'dependency_violation': False,
+  'downstream_tasks': [{'type': 'Task', 'name': 'FX', 'id': 558}],
+  'due_date': '2010-05-14',
+  'id': 557,
+  'pinned': False,
+  'start_date': '2010-05-10',
+  'type': 'Task',
+  'upstream_tasks': [{'type': 'Task', 'name': 'Layout', 'id': 556}]},
+...
+
+
+

Notice by updating pinned to False, Flow Production Tracking also updated the start_date and +due_date fields of our “Anm” Task so it will satisfy the upstream Task dependencies. And since +that succeeded, the dependency_violation field has also been set to False

+
+
+

dependency_violation field is read-only

+

The dependency_violation field is the only dependency-related field that is read-only. Trying +to modify it will generate a Fault:

+
result = sg.update('Task', 557, {'dependency_violation': False})
+
+
+

Returns:

+
# --------------------------------------------------------------------------------
+# XMLRPC Fault 103:
+# API update() Task.dependency_violation is read only:
+# {"value"=>false, "field_name"=>"dependency_violation"}
+# --------------------------------------------------------------------------------
+# Traceback (most recent call last):
+# ...
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/tasks/updating_tasks.html b/cookbook/tasks/updating_tasks.html new file mode 100644 index 000000000..0b2b68286 --- /dev/null +++ b/cookbook/tasks/updating_tasks.html @@ -0,0 +1,510 @@ + + + + + + + + + Updating Task Dates: How Flow Production Tracking Thinks — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Updating Task Dates: How Flow Production Tracking Thinks

+

When updating Task dates in an API update() request, there is no specified order to the values that +are passed in. Flow Production Tracking also does automatic calculation of the``start_date``,``due_date``, and duration fields for convenience. In order to clarify how updates are handled by Flow Production Tracking we are +providing some general rules below and examples of what will happen when you make updates to your +Tasks.

+
+

General Rules

+
    +
  • Updating the start_date automatically updates the due_date (duration remains constant)

  • +
  • Updating the due_date automatically updates the duration (start_date remains constant)

  • +
  • Updating the duration automatically updates the due_date (start_date remains constant)

  • +
  • When updating Task values, Flow Production Tracking sets schedule fields (milestone, duration, +start_date, due_date) after all other fields, because the Project and Task Assignees +affect schedule calculations.

  • +
  • If start_date and due_date are both set, duration is ignored (duration can often +be wrong since it’s easy to calculate scheduling incorrectly).

  • +
  • If both start_date and due_date are provided, Flow Production Tracking sets start_date before +due_date.

  • +
  • Set milestone before other schedule fields (because start_date, due_date, and +duration get lost if milestone is not set to False first)

  • +
  • If milestone is being set to True, duration is ignored.

  • +
  • If milestone is set to True and start_date and due_date are also being set to +conflicting values, an Exception is raised.

  • +
  • If due_date and duration are set together (without start_date), duration is set +first, then due_date (otherwise setting duration will change due_date after it is +set).

  • +
+
+
+

Examples for updating Tasks

+

The following examples show what the resulting Task object will look like after being run on the +initial Task object listed under the header of each section.

+

The duration values in the following examples assume your Flow Production Tracking instance is set to +10-hour work days. If your server is configured with a different setting, the duration values +will vary.

+
+

Note

+

The duration field stores duration values in minutes

+
+
+

Universal

+

Regardless of current values on the Task, this behavior rules:

+
Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+

Update start_date and due_date

+

duration is ignored if also provided. It is instead set automatically as (due_date - +start_date)

+
sg.update ('Task', 123, {'start_date':'2011-05-25', 'due_date':'2011-05-30', 'duration':1200})
+# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
+
+
+
    +
  • start_date is updated.

  • +
  • due_date is updated.

  • +
  • duration is calculated as (due_date - start_date)

  • +
+
+

Note

+

The value provided in the update() is ignored (and in this case was also incorrect).

+
+

Update start_date and duration

+
sg.update ('Task', 123, {'start_date':'2011-05-25', 'duration':3600})
+# Task = {'start_date': '2011-05-25', 'due_date': '2011-06-01', 'duration': 3600, 'id':123}
+
+
+
    +
  • start_date is updated.

  • +
  • duration is updated.

  • +
  • due_date is updated to (start_date + duration).

  • +
+

Update due_date and duration

+
sg.update ('Task', 123, {'due_date': '2011-05-20', 'duration':3600})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-20', 'duration': 600, 'id':123}
+
+
+
    +
  • duration is updated.

  • +
  • due_date is updated.

  • +
  • duration is calculated as (due_date - start_date)

  • +
+
+

Note

+

This means the duration provided is overwritten.

+
+
+

Task has start_date only

+

If the Task only has a start_date value and has no other date values, this is how updates +will behave.

+
Task = {'start_date': '2011-05-20', 'due_date': None, 'duration': None, 'id':123}
+
+
+

Update start_date

+
sg.update ('Task', 123, {'start_date':'2011-05-25'})
+# Task = {'start_date': '2011-05-25', 'due_date': None, 'duration': None, 'id':123}
+
+
+
    +
  • Only start_date is updated.

  • +
+

Update due_date

+
sg.update ('Task', 123, {'due_date':'2011-05-25'})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+
    +
  • due_date is updated.

  • +
  • duration is updated to (due_date - start_date).

  • +
+

Update duration

+
sg.update ('Task', 123, {'duration':2400})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+
    +
  • duration is updated.

  • +
  • due_date is set to (start_date + duration)

  • +
+
+

Task has due_date only

+

If the Task only has a due_date value and has no other date values, this is how updates +will behave.

+
# Task = {'start_date': None, 'due_date': '2011-05-25', 'duration': None, 'id':123}
+
+
+

Update start_date

+
sg.update ('Task', 123, {'start_date':'2011-05-20'})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+
    +
  • start_date is updated.

  • +
  • duration is updated to (due_date - start_date).

  • +
+

Update due_date

+
sg.update ('Task', 123, {'due_date':'2011-05-20'})
+# Task = {'start_date': None, 'due_date': '2011-05-20', 'duration': None, 'id':123}
+
+
+
    +
  • only due_date is updated.

  • +
+

Update duration

+
sg.update ('Task', 123, {'duration':2400})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+
    +
  • duration is updated.

  • +
  • start_date is set to (due_date - duration)

  • +
+
+

Task has duration only

+

If the Task only has a duration value and has no other date values, this is how updates +will behave.

+
# Task = {'start_date': None, 'due_date': None, 'duration': 2400, 'id':123}
+
+
+

Update start_date

+
sg.update ('Task', 123, {'start_date':'2011-05-20'})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+
    +
  • start_date is updated.

  • +
  • due_date is updated to (start_date + duration).

  • +
+

Update due_date

+
sg.update ('Task', 123, {'due_date':'2011-05-25'})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+
    +
  • due_date is updated.

  • +
  • start_date is updated to (due_date - duration)

  • +
+

Update duration

+
sg.update ('Task', 123, {'duration':3600})
+# Task = {'start_date': None, 'due_date': None, 'duration': 3600, 'id':123}
+
+
+
    +
  • only duration is updated.

  • +
+
+

Task has start_date and due_date

+

If the Task has start_date and due_date values but has no duration, this is how updates +will behave.

+
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': None, 'id':123}
+
+
+

Update start_date

+
sg.update ('Task', 123, {'start_date':'2011-05-25'})
+# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-25', 'duration': 600, 'id':123}
+
+
+
    +
  • start_date is updated.

  • +
  • duration is updated to (due_date - start_date).

  • +
+

Update due_date

+
sg.update ('Task', 123, {'due_date':'2011-05-30'})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-30', 'duration': 4200, 'id':123}
+
+
+
    +
  • due_date is updated.

  • +
  • duration is updated to (due_date - start_date)

  • +
+

Update duration

+
sg.update ('Task', 123, {'duration':3600})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-27', 'duration': 3600, 'id':123}
+
+
+
    +
  • duration is updated.

  • +
  • due_date is updated to (start_date + duration)

  • +
+
+

Task has start_date and duration

+

If the Task has start_date and duration values but has no due_date, this is how updates +will behave.

+
# Task = {'start_date': '2011-05-20', 'due_date': None, 'duration': 2400, 'id':123}
+
+
+

Update start_date

+
sg.update ('Task', 123, {'start_date':'2011-05-25'})
+# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
+
+
+
    +
  • start_date is updated.

  • +
  • due_date is updated to (start_date +``duration``).

  • +
+

Update due_date

+
sg.update ('Task', 123, {'due_date':'2011-05-30'})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-30', 'duration': 4200, 'id':123}
+
+
+
    +
  • due_date is updated.

  • +
  • duration is updated to (due_date - start_date).

  • +
+

Update duration

+
sg.update ('Task', 123, {'duration':3600})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-27', 'duration': 3600, 'id':123}
+
+
+
    +
  • duration is updated.

  • +
  • due_date is updated to (start_date + duration)

  • +
+
+

Task has due_date and duration

+

If the Task has due_date and duration values but has no start_date, this is how updates +will behave.

+
# Task = {'start_date': None, 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+

Update start_date

+
sg.update ('Task', 123, {'start_date':'2011-05-25'})
+# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
+
+
+
    +
  • start_date is updated.

  • +
  • due_date is updated to (start_date + duration).

  • +
+

Update due_date

+
sg.update ('Task', 123, {'due_date':'2011-05-30'})
+# Task = {'start_date': '2011-05-25', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
+
+
+
    +
  • due_date is updated.

  • +
  • start_date is updated to (due_date - duration).

  • +
+

Update duration

+
sg.update ('Task', 123, {'duration':3600})
+# Task = {'start_date': '2011-05-18', 'due_date': '2011-05-25', 'duration': 3600, 'id':123}
+
+
+
    +
  • duration is updated.

  • +
  • start_date is updated to (due_date - duration)

  • +
+
+

Task has start_date ,due_date, and duration

+

If the Task has start_date, due_date, and duration, this is how updates +will behave.

+
# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-25', 'duration': 2400, 'id':123}
+
+
+

Update start_date

+
sg.update ('Task', 123, {'start_date':'2011-05-25'})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-30', 'duration': 2400, 'id':123}
+
+
+
    +
  • start_date is updated.

  • +
  • due_date is updated to (start_date + duration).

  • +
+

Update due_date

+
sg.update ('Task', 123, {'due_date':'2011-05-30'})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-30', 'duration': 4200, 'id':123}
+
+
+
    +
  • due_date is updated.

  • +
  • duration is updated to (due_date - start_date)

  • +
+

Update duration

+
sg.update ('Task', 123, {'duration':3600})
+# Task = {'start_date': '2011-05-20', 'due_date': '2011-05-27', 'duration': 3600, 'id':123}
+
+
+
    +
  • duration is updated.

  • +
  • due_date is updated to (start_date + duration)

  • +
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/tutorials.html b/cookbook/tutorials.html new file mode 100644 index 000000000..ff1875f5a --- /dev/null +++ b/cookbook/tutorials.html @@ -0,0 +1,226 @@ + + + + + + + + + Examples — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Examples

+

Here’s a list of various simple tutorials to walk through that should provide you with a good base +understanding of how to use the Flow Production Tracking API and what you can do with it.

+
+

Basic

+ +
+
+

Advanced

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/cookbook/usage_tips.html b/cookbook/usage_tips.html new file mode 100644 index 000000000..46d1b8b91 --- /dev/null +++ b/cookbook/usage_tips.html @@ -0,0 +1,476 @@ + + + + + + + + + API Usage Tips — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

API Usage Tips

+

Below is a list of helpful tips when using the Flow Production Tracking API3. We have tried to make the API very +simple to use with predictable results while remaining a powerful tool to integrate with your +pipeline. However, there’s always a couple of things that crop up that our users might not be +aware of. Those are the types of things you’ll find below. We’ll be adding to this document over +time as new questions come up from our users that exhibit these types of cases.

+
+

Importing

+

We strongly recommend you import the entire shotgun_api3 module instead of just importing the +shotgun_api3.Shotgun class from the module. There is other important functionality that +is managed at the module level which may not work as expected if you only import the +shotgun_api3.Shotgun object.

+

Do:

+
import shotgun_api3
+
+
+

Don’t:

+
from shotgun_api3 import Shotgun
+
+
+
+
+

Multi-threading

+

The Flow Production Tracking API is not thread-safe. If you want to do threading we strongly suggest that you use +one connection object per thread and not share the connection.

+
+
+

Entity Fields

+

When you do a find() or a create() call +that returns a field of type entity or multi-entity (for example the ‘Assets’ column on Shot), +the entities are returned in a standard dictionary:

+
{'type': 'Asset', 'name': 'redBall', 'id': 1}
+
+
+

For each entity returned, you will get a type, name, and id key. This does not mean +there are fields named type and name on the Asset. These are only used to provide a +consistent way to represent entities returned via the API.

+
    +
  • type: the entity type (CamelCase)

  • +
  • name: the display name of the entity. For most entity types this is the value of the code +field but not always. For example, on the Ticket and Delivery entities the name key would +contain the value of the title field.

  • +
+
+
+

CustomEntities

+

Entity types are always referenced by their original names. So if you enable CustomEntity01 and +call it Widget. When you access it via the API, you’ll still use CustomEntity01 as the +entity_type.

+

If you want to be able to remember what all of your CustomEntities represent in a way where you +don’t need to go look it up all the time when you’re writing a new script, we’d suggest creating +a mapping table or something similar and dumping it in a shared module that your studio uses. +Something like the following:

+
# studio_globals.py
+
+entity_type_map = {
+  'Widget': 'CustomEntity01',
+  'Foobar': 'CustomEntity02',
+  'Baz': 'CustomNonProjectEntity01,
+}
+
+# or even simpler, you could use a global like this
+ENTITY_WIDGET = 'CustomEntity01'
+ENTITY_FOOBAR = 'CustomEntity02'
+ENTITY_BAZ = 'CustomNonProjectEntity01'
+
+
+

Then when you’re writing scripts, you don’t need to worry about remembering which Custom Entity +“Foobars” are, you just use your global:

+
import shotgun_api3
+import studio_globals
+
+sg = shotgun_api3.Shotgun('https://my-site.shotgrid.autodesk.com', 'script_name', '0123456789abcdef0123456789abcdef0123456')
+result = sg.find(studio_globals.ENTITY_WIDGET,
+                 filters=[['sg_status_list', 'is', 'ip']],
+                 fields=['code', 'sg_shot'])
+
+
+
+
+

ConnectionEntities

+

Connection entities exist behind the scenes for any many-to-many relationship. Most of the time +you won’t need to pay any attention to them. But in some cases, you may need to track information +on the instance of one entity’s relationship to another.

+

For example, when viewing a list of Versions on a Playlist, the Sort Order (sg_sort_order) field is an +example of a field that resides on the connection entity between Playlists and Versions. This +connection entity is appropriately called PlaylistVersionConnection. Because any Version can +exist in multiple Playlists, the sort order isn’t specific to the Version, it’s specific to +each _instance_ of the Version in a Playlist. These instances are tracked using connection +entities in Shtogun and are accessible just like any other entity type in Flow Production Tracking.

+

To find information about your Versions in the Playlist “Director Review” (let’s say it has an +id of 4). We’d run a query like so:

+
filters = [['playlist', 'is', {'type':'Playlist', 'id':4}]]
+fields = ['playlist.Playlist.code', 'sg_sort_order', 'version.Version.code', 'version.Version.user', 'version.Version.entity']
+order=[{'column':'sg_sort_order','direction':'asc'}]
+result = sg.find('PlaylistVersionConnection', filters, fields, order)
+
+
+

Which returns the following:

+
[{'id': 28,
+  'playlist.Playlist.code': 'Director Review',
+  'sg_sort_order': 1.0,
+  'type': 'PlaylistVersionConnection',
+  'version.Version.code': 'bunny_020_0010_comp_v003',
+  'version.Version.entity': {'id': 880,
+                             'name': 'bunny_020_0010',
+                             'type': 'Shot'},
+  'version.Version.user': {'id': 19, 'name': 'Artist 1', 'type': 'HumanUser'}},
+ {'id': 29,
+  'playlist.Playlist.code': 'Director Review',
+  'sg_sort_order': 2.0,
+  'type': 'PlaylistVersionConnection',
+  'version.Version.code': 'bunny_020_0020_comp_v003',
+  'version.Version.entity': {'id': 881,
+                             'name': 'bunny_020_0020',
+                             'type': 'Shot'},
+  'version.Version.user': {'id': 12, 'name': 'Artist 8', 'type': 'HumanUser'}},
+ {'id': 30,
+  'playlist.Playlist.code': 'Director Review',
+  'sg_sort_order': 3.0,
+  'type': 'PlaylistVersionConnection',
+  'version.Version.code': 'bunny_020_0030_comp_v003',
+  'version.Version.entity': {'id': 882,
+                             'name': 'bunny_020_0030',
+                             'type': 'Shot'},
+  'version.Version.user': {'id': 33, 'name': 'Admin 5', 'type': 'HumanUser'}},
+ {'id': 31,
+  'playlist.Playlist.code': 'Director Review',
+  'sg_sort_order': 4.0,
+  'type': 'PlaylistVersionConnection',
+  'version.Version.code': 'bunny_020_0040_comp_v003',
+  'version.Version.entity': {'id': 883,
+                             'name': 'bunny_020_0040',
+                             'type': 'Shot'},
+  'version.Version.user': {'id': 18, 'name': 'Artist 2', 'type': 'HumanUser'}},
+ {'id': 32,
+  'playlist.Playlist.code': 'Director Review',
+  'sg_sort_order': 5.0,
+  'type': 'PlaylistVersionConnection',
+  'version.Version.code': 'bunny_020_0050_comp_v003',
+  'version.Version.entity': {'id': 884,
+                             'name': 'bunny_020_0050',
+                             'type': 'Shot'},
+  'version.Version.user': {'id': 15, 'name': 'Artist 5', 'type': 'HumanUser'}}]
+
+
+
    +
  • version is the Version record for this connection instance.

  • +
  • playlist is the Playlist record for this connection instance.

  • +
  • sg_sort_order is the sort order field on the connection instance.

  • +
+

We can pull in field values from the linked Playlist and Version entities using dot notation like +version.Version.code. The syntax is fieldname.EntityType.fieldname. In this example, +PlaylistVersionConnection has a field named version. That field contains a Version +entity. The field we are interested on the Version is code. Put those together with our f +riend the dot and we have version.Version.code.

+
+
+

Flow Production Tracking UI fields not available via the API

+

Summary type fields like Query Fields and Pipeline Step summary fields are currently only available +via the UI. Some other fields may not work as expected through the API because they are “display +only” fields made available for convenience and are only available in the browser UI.

+
+

HumanUser

+
    +
  • name: This is a UI-only field that is a combination of the firstname + ' ' + +lastname.

  • +
+
+
+

Shot

+

Smart Cut Fields: These fields are available only in the browser UI. You can read more about +smart cut fields and the API in the Smart Cut Fields doc:

+
smart_cut_in
+smart_cut_out
+smart_cut_duration
+smart_cut_summary_display
+smart_duration_summary_display
+smart_head_in
+smart_head_out
+smart_head_duration
+smart_tail_in
+smart_tail_out
+smart_tail_duration
+smart_working_duration
+
+
+
+
+

Pipeline Step summary fields on entities

+

The Pipeline Step summary fields on entities that have Tasks aren’t currently available via the API +and are calculated on the client side in the UI. These fields are like step_0, or step_13. +Note that the Pipeline Step entity itself is available via the API as the entity type Step.

+
+
+

Query Fields

+

Query fields are also summary fields like Pipeline Steps, the query is run from the client side UI +and therefore is not currently supported in the API.

+
+
+
+

Audit Fields

+

You can set the created_by and created_at fields via the API at creation time. This is +often useful for when you’re importing or migrating data from another source and want to keep the +history in tact. However, you cannot set the updated_by and updated_at fields. These are +automatically set whenever an entity is created or updated.

+
+
+

Logging Messages from the API

+

The API uses standard python logging but does not define a handler.

+

To see the logging output in stdout, define a streamhandler in your script:

+
import logging
+import shotgun_api3 as shotgun
+logging.basicConfig(level=logging.DEBUG)
+
+
+

To write logging output from the Flow Production Tracking API to a file, define a file handler in your script:

+
import logging
+import shotgun_api3 as shotgun
+logging.basicConfig(level=logging.DEBUG, filename='/path/to/your/log')
+
+
+

To suppress the logging output from the API in a script which uses logging, set the level of the +Flow Production Tracking logger to a higher level:

+
import logging
+import shotgun_api3 as shotgun
+sg_log = logging.getLogger('shotgun_api3')
+sg_log.setLevel(logging.ERROR)
+
+
+
+
+

Optimizations

+ +
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/genindex.html b/genindex.html new file mode 100644 index 000000000..4ea7344ac --- /dev/null +++ b/genindex.html @@ -0,0 +1,440 @@ + + + + + + + + Index — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ A + | B + | C + | D + | E + | F + | G + | I + | L + | M + | N + | P + | R + | S + | T + | U + | W + +
+

A

+ + + +
+ +

B

+ + +
+ +

C

+ + + +
+ +

D

+ + + +
+ +

E

+ + +
+ +

F

+ + + +
+ +

G

+ + + +
+ +

I

+ + +
+ +

L

+ + +
+ +

M

+ + + +
+ +

N

+ + + +
+ +

P

+ + +
+ +

R

+ + + +
+ +

S

+ + + +
+ +

T

+ + +
+ +

U

+ + + +
+ +

W

+ + + +
+ + + +
+
+
+ +
+ +
+

© Copyright 2025, Autodesk.

+
+ + + +
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 000000000..d57d503ed --- /dev/null +++ b/index.html @@ -0,0 +1,265 @@ + + + + + + + + + Flow Production Tracking Python API library — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +
+

Flow Production Tracking Python API library

+

Release v3.8.3. (Installation)

+https://img.shields.io/badge/shotgun-api-blue.svg

Flow Production Tracking (FPTR) provides a simple Python-based API for accessing FPTR and integrating with other tools. +The Flow Production Tracking API3, also known as “Python API”, allows users to integrate their tools with Flow Production Tracking very easily. Using this simple +but powerful python module, you can quickly get your scripts integrated with Flow Production Tracking’s CRUD-based +API.

+

Because the needs of every studio can prove to be very different, we don’t include a lot of +“automation” or “smarts” in our API. We have kept it pretty low-level and leave most of those +decisions to you. The API is powerful enough you can write your own “smarts” in a wrapper on top +of the of the FPTR API3.

+
+

Overview Video of Setting Up Your Environment with the Python API

+

In addition to basic metadata, the API contains methods for managing media including thumbnails, +filmstrip thumbnails, images, uploaded, and both locally and remotely linked media like +Quicktimes, etc.

+

Example:

+
sg = shotgun_api3.Shotgun("https://my-site.shotgrid.autodesk.com",
+                          login="rhendriks",
+                          password="c0mPre$Hi0n")
+sg.find("Shot", filters=[["sg_status_list", "is", "ip"]], fields=["code", "sg_status_list"])
+
+
+

Output:

+
[{'code': 'bunny_020_0170',
+  'id': 896,
+  'sg_sequence': {'id': 5, 'name': 'bunny_020', 'type': 'Sequence'},
+  'sg_status_list': 'ip',
+  'type': 'Shot'},
+ {'code': 'bunny_020_0200',
+  'id': 899,
+  'sg_sequence': {'id': 5, 'name': 'bunny_020', 'type': 'Sequence'},
+  'sg_status_list': 'ip',
+  'type': 'Shot'},
+ {'code': 'bunny_030_0080',
+  'id': 907,
+  'sg_sequence': {'id': 6, 'name': 'bunny_030', 'type': 'Sequence'},
+  'sg_status_list': 'ip',
+  'type': 'Shot'}]
+
+
+
+

User Guide

+ +
+
+
+

Indices and tables

+ +
+
+ + +
+
+
+ +
+ +
+

© Copyright 2025, Autodesk.

+
+ + + +
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/installation.html b/installation.html new file mode 100644 index 000000000..7d0f4aa39 --- /dev/null +++ b/installation.html @@ -0,0 +1,248 @@ + + + + + + + + + Installation — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +
+

Installation

+
+

Minimum Requirements

+
    +
  • Python 3.7

  • +
+
+

Note

+

Some features of the API are only supported by more recent versions of the Flow Production Tracking server. +These features are added to the Python API in a backwards compatible way so that existing +scripts will continue to function as expected. Accessing a method that is not supported for +your version of Flow Production Tracking will raise an appropriate exception. In general, we attempt to +document these where possible.

+
+
+
+

Installing into PYTHONPATH

+

You can download the latest release from Github +or clone the repo to your local filesystem. +You’ll need to save it somewhere your local Python installation can find it.

+
+

See also

+

For more information on PYTHONPATH and using modules in Python, see +http://docs.python.org/tutorial/modules.html

+
+
+

Note

+

Visit the introduction to the Python API to see an overview video of Setting Up Your Environment with the Python API.

+
+
+
+

Installing with pip

+
+

Installing the Master Branch From Github

+

If you wish to install the current master, use the following command:

+
pip install git+https://github.com/shotgunsoftware/python-api.git
+
+
+
+

Note

+

The master branch contains the latest revisions and while largely considered “stable” it +is not an official packaged release.

+
+
+
+

Installing A specific Version From Github

+

To install a specific version of the package from Github, run the following command. This example +installs the v3.0.26 tag, replace the version tag with the one you want:

+
pip install git+https://github.com/shotgunsoftware/python-api.git@v3.0.26
+
+
+
+

requirements.txt

+

If you’re using pip with requirements.txt, add the following line:

+
git+https://github.com/shotgunsoftware/python-api.git
+
+
+
+
+
+
+

Installing with setup.py

+

From a local copy of the repository, you can run python setup.py install to copy the package inside your python site-packages. Note that while setuptools will complain about syntax errors when installing the library, the library is fully functional. However, it ships with both Python 2 and Python 3 copies of httplib2, which will generate syntax errors when byte-compiling the Python modules.

+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/nose.cfg b/nose.cfg deleted file mode 100644 index 22c0e11cd..000000000 --- a/nose.cfg +++ /dev/null @@ -1,12 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -[nosetests] -exclude-dir=shotgun_api3/lib diff --git a/objects.inv b/objects.inv new file mode 100644 index 000000000..556abd52b Binary files /dev/null and b/objects.inv differ diff --git a/reference.html b/reference.html new file mode 100644 index 000000000..625c256a9 --- /dev/null +++ b/reference.html @@ -0,0 +1,3451 @@ + + + + + + + + + API Reference — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ +
+

API Reference

+
+

shotgun Module Attributes

+

The shotgun module is a container for the Shotgun +class. There are a couple of useful attributes to note.

+
+
+shotgun_api3.shotgun.LOG = <Logger shotgun_api3 (WARNING)>
+

Logging instance for shotgun_api3

+

Provides a logging instance where log messages are sent during execution. This instance has no +handler associated with it.

+ +
+ +
+
+shotgun_api3.shotgun.NO_SSL_VALIDATION = False
+

Turns off hostname matching validation for SSL certificates

+

Sometimes there are cases where certificate validation should be disabled. For example, if you +have a self-signed internal certificate that isn’t included in our certificate bundle, you may +not require the added security provided by enforcing this.

+
+ +
+
+

Shotgun()

+
+
+class shotgun_api3.shotgun.Shotgun(base_url, script_name=None, api_key=None, convert_datetimes_to_utc=True, http_proxy=None, ensure_ascii=True, connect=True, ca_certs=None, login=None, password=None, sudo_as_login=None, session_token=None, auth_token=None)[source]
+

Bases: object

+

Shotgun Client connection.

+

Initializes a new instance of the Shotgun client.

+
+
Parameters:
+
    +
  • base_url (str) –

    http or https url of the Shotgun server. Do not include the trailing +slash:

    +
    https://example.shotgunstudio.com
    +
    +
    +

  • +
  • script_name (str) –

    name of the Script entity used to authenticate to the server. +If provided, then api_key must be as well, and neither login nor password +can be provided.

    +
    +

    See also

    +

    Authentication

    +
    +

  • +
  • api_key (str) –

    API key for the provided script_name. Used to authenticate to the +server. If provided, then script_name must be as well, and neither login nor +password can be provided.

    +
    +

    See also

    +

    Authentication

    +
    +

  • +
  • convert_datetimes_to_utc (bool) – (optional) When True, datetime values are converted +from local time to UTC time before being sent to the server. Datetimes received from +the server are then converted back to local time. When False the client should use +UTC date time values. Default is True.

  • +
  • http_proxy (str) –

    (optional) URL for a proxy server to use for all connections. The +expected str format is [username:password@]111.222.333.444[:8080]. Examples:

    +
    192.168.0.1
    +192.168.0.1:8888
    +joe:user@192.168.0.1:8888
    +
    +
    +

  • +
  • connect (bool) – (optional) When True, as soon as the Shotgun +instance is created, a connection will be made to the Shotgun server to determine the +server capabilities and confirm this version of the client is compatible with the server +version. This is mostly used for testing. Default is True.

  • +
  • ca_certs (str) – (optional) path to an external SSL certificates file. By default, the +Shotgun API will use its own built-in certificates file which stores root certificates +for the most common Certificate Authorities (CAs). If you are using a corporate or +internal CA, or are packaging an application into an executable, it may be necessary to +point to your own certificates file. You can do this by passing in the full path to the +file via this parameter or by setting the environment variable SHOTGUN_API_CACERTS. +In the case both are set, this parameter will take precedence.

  • +
  • login (str) –

    The user login str to use to authenticate to the server when using user-based +authentication. If provided, then password must be as well, and neither +script_name nor api_key can be provided.

    +
    +

    See also

    +

    Authentication

    +
    +

  • +
  • password (str) –

    The password str to use to authenticate to the server when using user-based +authentication. If provided, then login must be as well and neither script_name +nor api_key can be provided.

    +

    See Authentication for more info.

    +

  • +
  • sudo_as_login (str) – A user login string for the user whose permissions will be applied +to all actions. Event log entries will be generated showing this user performing all +actions with an additional extra meta-data parameter sudo_actual_user indicating the +script or user that is actually authenticated.

  • +
  • session_token (str) –

    The session token to use to authenticate to the server. This +can be used as an alternative to authenticating with a script user or regular user. +You can retrieve the session token by running the +get_session_token() method.

    +

  • +
  • auth_token (str) –

    The authentication token required to authenticate to a server with +two-factor authentication turned on. If provided, then login and password must +be provided as well, and neither script_name nor api_key can be provided.

    +
    +

    Note

    +

    These tokens can be short lived so a session is established right away if an +auth_token is provided. A +MissingTwoFactorAuthenticationFault will be raised if the +auth_token is invalid.

    +
    +

  • +
+
+
+
+

Note

+

A note about proxy connections: If you are using Python <= v2.6.2, HTTPS +connections through a proxy server will not work due to a bug in the urllib2 +library (see http://bugs.python.org/issue1424152). This will affect upload and +download-related methods in the Shotgun API (eg. upload(), +upload_thumbnail(), +upload_filmstrip_thumbnail(), +download_attachment(). Normal CRUD methods for passing JSON +data should still work fine. If you cannot upgrade your Python installation, you can see +the patch merged into Python v2.6.3 (http://hg.python.org/cpython/rev/0f57b30a152f/) and +try and hack it into your installation but YMMV. For older versions of Python there +are other patches that were proposed in the bug report that may help you as well.

+
+
+ +
+
+

Shotgun Methods

+

The majority of functionality is contained within the Shotgun class. +The documentation for all of the methods you’ll need in your scripts lives in here.

+

Connection & Authentication

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Shotgun.connect

Connect client to the server if it is not already connected.

Shotgun.close

Close the current connection to the server.

Shotgun.authenticate_human_user

Authenticate Shotgun HumanUser.

Shotgun.get_session_token

Get the session token associated with the current session.

Shotgun.add_user_agent

Add agent to the user-agent header.

Shotgun.reset_user_agent

Reset user agent to the default value.

Shotgun.set_session_uuid

Set the browser session_uuid in the current Shotgun API instance.

Shotgun.info

Get API-related metadata from the Shotgun server.

+

CRUD Methods

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Shotgun.create

Create a new entity of the specified entity_type.

Shotgun.find

Find entities matching the given filters.

Shotgun.find_one

Shortcut for find() with limit=1 so it returns a single result.

Shotgun.update

Update the specified entity with the supplied data.

Shotgun.delete

Retire the specified entity.

Shotgun.revive

Revive an entity that has previously been deleted.

Shotgun.batch

Make a batch request of several create(), update(), and delete() calls.

Shotgun.summarize

Summarize field data returned by a query.

Shotgun.note_thread_read

Return the full conversation for a given note, including Replies and Attachments.

Shotgun.text_search

Search across the specified entity types for the given text.

Shotgun.update_project_last_accessed

Update a Project's last_accessed_by_current_user field to the current timestamp.

Shotgun.work_schedule_read

Return the work day rules for a given date range.

Shotgun.work_schedule_update

Update the work schedule for a given date.

Shotgun.preferences_read

Get a subset of the site preferences.

+

Working With Files

+ + + + + + + + + + + + + + + + + + + + + +

Shotgun.upload

Upload a file to the specified entity.

Shotgun.upload_thumbnail

Upload a file from a local path and assign it as the thumbnail for the specified entity.

Shotgun.upload_filmstrip_thumbnail

Upload filmstrip thumbnail to specified entity.

Shotgun.download_attachment

Download the file associated with a Shotgun Attachment.

Shotgun.get_attachment_download_url

Return the URL for downloading provided Attachment.

Shotgun.share_thumbnail

Associate a thumbnail with more than one Shotgun entity.

+

Activity Stream

+ + + + + + + + + + + + + + + + + + +

Shotgun.activity_stream_read

Retrieve activity stream data from Shotgun.

Shotgun.follow

Add the entity to the user's followed entities.

Shotgun.unfollow

Remove entity from the user's followed entities.

Shotgun.followers

Return all followers for an entity.

Shotgun.following

Return all entity instances a user is following.

+

Working with the Shotgun Schema and Preferences

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Shotgun.schema_entity_read

Return all active entity types, their display names, and their visibility.

Shotgun.schema_field_read

Get schema for all fields on the specified entity type or just the field name specified if provided.

Shotgun.schema_field_create

Create a field for the specified entity type.

Shotgun.schema_field_update

Update the properties for the specified field on an entity.

Shotgun.schema_field_delete

Delete the specified field from the entity type.

Shotgun.schema_read

Get the schema for all fields on all entities.

Shotgun.schema

+

Deprecated since version 3.0.0.

+
+

Shotgun.entity_types

+

Deprecated since version 3.0.0.

+
+

+
+

Connection & Authentication

+

These methods are used for connecting and authenticating with your Flow Production Tracking server. Most of +this is done automatically when you instantiate your instance. But if you need finer-grain +control, these methods are available.

+
+
+Shotgun.connect()[source]
+

Connect client to the server if it is not already connected.

+
+

Note

+

The client will automatically connect to the server on demand. You only need to +call this function if you wish to confirm the client can connect.

+
+
+ +
+
+Shotgun.close()[source]
+

Close the current connection to the server.

+

If the client needs to connect again it will do so automatically.

+
+ +
+
+Shotgun.authenticate_human_user(user_login, user_password, auth_token=None)[source]
+

Authenticate Shotgun HumanUser.

+

Authenticates a user given the login, password, and optionally, one-time auth token (when +two-factor authentication is required). The user must be a HumanUser entity and the +account must be active.

+
>>> sg.authenticate_human_user("rhendriks", "c0mPre$Hi0n", None)
+{"type": "HumanUser", "id": 123, "name": "Richard Hendriks"}
+
+
+
+
Parameters:
+
    +
  • user_login (str) – Login name of Shotgun HumanUser

  • +
  • user_password (str) – Password for Shotgun HumanUser

  • +
  • auth_token (str) – One-time token required to authenticate Shotgun HumanUser +when two-factor authentication is turned on.

  • +
+
+
Returns:
+

Standard Shotgun dictionary representing the HumanUser if authentication +succeeded. None if authentication failed for any reason.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.get_session_token()[source]
+

Get the session token associated with the current session.

+

If a session token has already been established, this is returned, otherwise a new one is +generated on the server and returned.

+
>>> sg.get_session_token()
+dd638be7d07c39fa73d935a775558a50
+
+
+
+
Returns:
+

String containing a session token.

+
+
Return type:
+

str

+
+
+
+ +
+ +

Return an urllib cookie handler containing a cookie for FPTR +authentication.

+

Looks up session token and sets that in a cookie in the urllib2 +handler. +This is used internally for downloading attachments from FPTR.

+
+ +
+
+Shotgun.add_user_agent(agent)[source]
+

Add agent to the user-agent header.

+

Appends agent to the user-agent string sent with every API request.

+
>>> sg.add_user_agent("my_tool 1.0")
+
+
+
+
Parameters:
+

agent (str) – string to append to user-agent.

+
+
+
+ +
+
+Shotgun.reset_user_agent()[source]
+

Reset user agent to the default value.

+

Example default user-agent:

+
shotgun-json (3.0.17); Python 2.6 (Mac); ssl OpenSSL 1.0.2d 9 Jul 2015 (validate)
+
+
+
+ +
+
+Shotgun.set_session_uuid(session_uuid)[source]
+

Set the browser session_uuid in the current Shotgun API instance.

+

When this is set, any events generated by the API will include the session_uuid value +on the corresponding EventLogEntries. If there is a current browser session open with +this session_uuid, the browser will display updates for these events.

+
>>> sg.set_session_uuid("5a1d49b0-0c69-11e0-a24c-003048d17544")
+
+
+
+
Parameters:
+

session_uuid (str) – The uuid of the browser session to be updated.

+
+
+
+ +
+
+Shotgun.info()[source]
+

Get API-related metadata from the Shotgun server.

+
>>> sg.info()
+{'full_version': [8, 2, 1, 0], 'version': [8, 2, 1], 'user_authentication_method': 'default', ...}
+
+
+
Token                       Value
+--------                    ---------
+full_version                An ordered array of the full Shotgun version.
+                            [major, minor, patch, hotfix]
+version                     An ordered array of the Shotgun version.
+                            [major, minor, patch]
+user_authentication_method  Indicates the authentication method used by Shotgun.
+                            Will be one of the following values:
+                                default: regular username/password.
+                                ldap:    username/password from the company's LDAP.
+                                saml2:   SSO used, over SAML2.
+
+
+
+

Note

+

Beyond the documented tokens, you should expect +the other values to be unsupported and for internal use only.

+
+
+
Returns:
+

dict of the server metadata.

+
+
Return type:
+

dict

+
+
+
+ +
+
+

Subscription Management

+

These methods are used for reading and assigning user subscriptions.

+
+
+Shotgun.user_subscriptions_read()[source]
+

Get the list of user subscriptions.

+
+
Returns:
+

A list of user subscriptions where each subscription is a +dictionary containing the humanUserId and subscription +fields.

+
+
Return type:
+

list

+
+
+
+ +
+
+Shotgun.user_subscriptions_create(users)[source]
+

Assign subscriptions to users.

+
+
Parameters:
+

users (list) – list of user subscriptions to assign. +Each subscription must be a dictionary with the humanUserId and +subscription fields. +The subscription is either None, a single string, or an +array of strings with subscription information.

+
+
Returns:
+

True if the request succedeed, False if otherwise.

+
+
Return type:
+

bool

+
+
+
+ +
+
+

CRUD Methods

+

These are the main methods for creating, reading, updating, and deleting information. There are +also some specialized convenience methods for accessing particular types of information.

+
+
+Shotgun.create(entity_type, data, return_fields=None)[source]
+

Create a new entity of the specified entity_type.

+
>>> data = {
+...     "project": {"type": "Project", "id": 161},
+...     "sg_sequence": {"type": "Sequence", "id": 109},
+...     "code": "001_100",
+...     'sg_status_list': "ip"
+... }
+>>> sg.create('Shot', data)
+{'code': '001_100',
+ 'id': 2557,
+ 'project': {'id': 161, 'name': 'Pied Piper', 'type': 'Project'},
+ 'sg_sequence': {'id': 109, 'name': 'Sequence 001', 'type': 'Sequence'},
+ 'sg_status_list': 'ip',
+ 'type': 'Shot'}
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Shotgun entity type to create.

  • +
  • data (dict) – Dictionary of fields and corresponding values to set on the new entity. If +image or filmstrip_image fields are provided, the file path will be uploaded +to the server automatically.

  • +
  • return_fields (list) –

    Optional list of additional field values to return from the new +entity. Defaults to id field.

    + +

  • +
+
+
Returns:
+

Shotgun entity dictionary containing the field/value pairs of all of the fields +set from the data parameter as well as the defaults type and id. If any +additional fields were provided using the return_fields parameter, these would be +included as well.

+
+

See also

+

Entity Fields

+
+

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.find(entity_type, filters, fields=None, order=None, filter_operator=None, limit=0, retired_only=False, page=0, include_archived_projects=True, additional_filter_presets=None)[source]
+

Find entities matching the given filters.

+
>>> # Find Character Assets in Sequence 100_FOO
+>>> # -------------
+>>> fields = ['id', 'code', 'sg_asset_type']
+>>> sequence_id = 2 # Sequence "100_FOO"
+>>> project_id = 4 # Demo Project
+>>> filters = [
+...     ['project', 'is', {'type': 'Project', 'id': project_id}],
+...     ['sg_asset_type', 'is', 'Character'],
+...     ['sequences', 'is', {'type': 'Sequence', 'id': sequence_id}]
+... ]
+>>> assets= sg.find("Asset",filters,fields)
+[{'code': 'Gopher', 'id': 32, 'sg_asset_type': 'Character', 'type': 'Asset'},
+ {'code': 'Cow', 'id': 33, 'sg_asset_type': 'Character', 'type': 'Asset'},
+ {'code': 'Bird_1', 'id': 35, 'sg_asset_type': 'Character', 'type': 'Asset'},
+ {'code': 'Bird_2', 'id': 36, 'sg_asset_type': 'Character', 'type': 'Asset'},
+ {'code': 'Bird_3', 'id': 37, 'sg_asset_type': 'Character', 'type': 'Asset'},
+ {'code': 'Raccoon', 'id': 45, 'sg_asset_type': 'Character', 'type': 'Asset'},
+ {'code': 'Wet Gopher', 'id': 149, 'sg_asset_type': 'Character', 'type': 'Asset'}]
+
+
+

You can drill through single entity links to filter on fields or display linked fields. +This is often called “deep linking” or using “dot notation”.

+
+
+

See also

+

Filter Syntax

+
+
>>> # Find Versions created by Tasks in the Animation Pipeline Step
+>>> # -------------
+>>> fields = ['id', 'code']
+>>> pipeline_step_id = 2 # Animation Step ID
+>>> project_id = 4 # Demo Project
+>>> # you can drill through single-entity link fields
+>>> filters = [
+...     ['project','is', {'type': 'Project','id': project_id}],
+...     ['sg_task.Task.step.Step.id', 'is', pipeline_step_id]
+>>> ]
+>>> sg.find("Version", filters, fields)
+[{'code': 'scene_010_anim_v001', 'id': 42, 'type': 'Version'},
+ {'code': 'scene_010_anim_v002', 'id': 134, 'type': 'Version'},
+ {'code': 'bird_v001', 'id': 137, 'type': 'Version'},
+ {'code': 'birdAltBlue_v002', 'id': 236, 'type': 'Version'}]
+
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Shotgun entity type to find.

  • +
  • filters (list) –

    list of filters to apply to the query.

    + +

  • +
  • fields (list) –

    Optional list of fields to include in each entity record returned. +Defaults to ["id"].

    + +

  • +
  • order (list) –

    Optional list of dictionaries defining how to order the results of the +query. Each dictionary contains the field_name to order by and the direction +to sort:

    +
    [
    +    {'field_name':'foo', 'direction':'asc'},
    +    {'field_name':'bar', 'direction':'desc'}
    +]
    +
    +
    +

    Defaults to sorting by id in ascending order.

    +

  • +
  • filter_operator (str) – Operator to apply to the filters. Supported values are "all" +and "any". These are just another way of defining if the query is an AND or OR +query. Defaults to "all".

  • +
  • limit (int) – Optional limit to the number of entities to return. Defaults to 0 which +returns all entities that match.

  • +
  • page (int) – Optional page of results to return. Use this together with the limit +parameter to control how your query results are paged. Defaults to 0 which returns +all entities that match.

  • +
  • retired_only (bool) – Optional boolean when True will return only entities that have +been retired. Defaults to False which returns only entities which have not been +retired. There is no option to return both retired and non-retired entities in the +same query.

  • +
  • include_archived_projects (bool) – Optional boolean flag to include entities whose projects +have been archived. Defaults to True.

  • +
  • additional_filter_presets

    Optional list of presets to further filter the result +set, list has the form:

    +
    [{
    +    "preset_name": <preset_name>,
    +    <optional_param1>: <optional_value1>,
    +    ...
    +}]
    +
    +
    +

    Note that these filters are ANDed together and ANDed with the ‘filter’ +argument.

    +

    For details on supported presets and the format of this parameter see +Additional Filter Presets

    +

  • +
+
+
Returns:
+

list of dictionaries representing each entity with the requested fields, and the +defaults "id" and "type" which are always included.

+
+

See also

+

Entity Fields

+
+

+
+
Return type:
+

list

+
+
+
+ +
+
+Shotgun.find_one(entity_type, filters, fields=None, order=None, filter_operator=None, retired_only=False, include_archived_projects=True, additional_filter_presets=None)[source]
+

Shortcut for find() with limit=1 so it returns a single +result.

+
>>> sg.find_one("Asset", [["id", "is", 32]], ["id", "code", "sg_status_list"])
+{'code': 'Gopher', 'id': 32, 'sg_status_list': 'ip', 'type': 'Asset'}
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Shotgun entity type as a string to find.

  • +
  • filters (list) –

    list of filters to apply to the query.

    +
    +

    See also

    +

    Filter Syntax

    +
    +

  • +
  • fields (list) – Optional list of fields to include in each entity record returned. +Defaults to ["id"].

  • +
  • order (int) –

    Optional list of fields to order the results by. List has the format:

    +
    [
    +    {'field_name':'foo', 'direction':'asc'},
    +    {'field_name':'bar', 'direction':'desc'}
    +]
    +
    +
    +

    Defaults to sorting by id in ascending order.

    +

  • +
  • filter_operator (str) – Operator to apply to the filters. Supported values are "all" +and "any". These are just another way of defining if the query is an AND or OR +query. Defaults to "all".

  • +
  • retired_only (bool) – Optional boolean when True will return only entities that have +been retired. Defaults to False which returns only entities which have not been +retired. There is no option to return both retired and non-retired entities in the +same query.

  • +
  • include_archived_projects (bool) – Optional boolean flag to include entities whose projects +have been archived. Defaults to True.

  • +
  • additional_filter_presets

    Optional list of presets to further filter the result +set, list has the form:

    +
    [{
    +    "preset_name": <preset_name>,
    +    <optional_param1>: <optional_value1>,
    +    ...
    +}]
    +
    +
    +

    Note that these filters are ANDed together and ANDed with the ‘filter’ +argument.

    +

    For details on supported presets and the format of this parameter see +Additional Filter Presets

    +

  • +
+
+
Returns:
+

Dictionary representing a single matching entity with the requested fields, +and the defaults "id" and "type" which are always included.

+
+

See also

+

Entity Fields

+
+

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.update(entity_type, entity_id, data, multi_entity_update_modes=None)[source]
+

Update the specified entity with the supplied data.

+
>>> shots = [
+...    {'type':'Shot', 'id':'40435'},
+...    {'type':'Shot', 'id':'40438'},
+...    {'type':'Shot', 'id':'40441'}]
+>>> data = {
+...    'shots': shots_asset_is_in,
+...    'sg_status_list':'rev'}
+>>> sg.update("Asset", 55, data)
+{'type': 'Shot',
+ 'id': 55,
+ 'sg_status_`list`': 'rev',
+ 'shots': [{'id': 40435, 'name': '100_010', 'type': 'Shot', 'valid': 'valid'},
+           {'id': 40438, 'name': '100_040', 'type': 'Shot', 'valid': 'valid'},
+           {'id': 40441, 'name': '100_070', 'type': 'Shot', 'valid': 'valid'}]
+}
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Entity type to update.

  • +
  • entity_id (id) – id of the entity to update.

  • +
  • data (dict) – key/value pairs where key is the field name and value is the value to set +for that field. This method does not restrict the updating of fields hidden in the web +UI via the Project Tracking Settings panel.

  • +
  • multi_entity_update_modes (dict) –

    Optional dict indicating what update mode to use +when updating a multi-entity link field. The keys in the dict are the fields to set +the mode for, and the values from the dict are one of set, add, or remove. +Defaults to set.

    +
    multi_entity_update_modes={"shots": "add", "assets": "remove"}
    +
    +
    +

  • +
+
+
Returns:
+

Dictionary of the fields updated, with the default keys type and id added as well.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.delete(entity_type, entity_id)[source]
+

Retire the specified entity.

+

Entities in Shotgun are not “deleted” destructively, they are instead, “retired”. This +means they are placed in the trash where they are no longer accessible to users.

+

The entity can be brought back to life using revive().

+
>>> sg.delete("Shot", 2557)
+True
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Shotgun entity type to delete.

  • +
  • entity_id (id) – id of the entity to delete.

  • +
+
+
Returns:
+

True if the entity was deleted, False otherwise (for example, if the +entity was already deleted).

+
+
Return type:
+

bool

+
+
Raises:
+

Fault if entity does not exist (deleted or not).

+
+
+
+ +
+
+Shotgun.revive(entity_type, entity_id)[source]
+

Revive an entity that has previously been deleted.

+
>>> sg.revive("Shot", 860)
+True
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Shotgun entity type to revive.

  • +
  • entity_id (int) – id of the entity to revive.

  • +
+
+
Returns:
+

True if the entity was revived, False otherwise (e.g. if the +entity is not currently retired).

+
+
Return type:
+

bool

+
+
+
+ +
+
+Shotgun.batch(requests)[source]
+

Make a batch request of several create(), +update(), and delete() calls.

+

All requests are performed within a transaction, so either all will complete or none will.

+

Ex. Make a bunch of shots:

+
batch_data = []
+for i in range(1,100):
+    data = {
+        "code": "shot_%04d" % i,
+        "project": project
+    }
+    batch_data.append({"request_type": "create", "entity_type": "Shot", "data": data})
+sg.batch(batch_data)
+
+
+

Example output:

+
[{'code': 'shot_0001',
+  'type': 'Shot',
+  'id': 3624,
+  'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}},
+ ...
+ ... and a bunch more ...
+ ...
+ {'code': 'shot_0099',
+  'type': 'Shot',
+  'id': 3722,
+  'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}}]
+
+
+

Ex. All three types of requests in one batch:

+
batch_data = [
+  {"request_type": "create", "entity_type": "Shot", "data": {"code": "New Shot 1", "project": project}},
+  {"request_type": "update", "entity_type": "Shot", "entity_id": 3624, "data": {"code": "Changed 1"}},
+  {"request_type": "delete", "entity_type": "Shot", "entity_id": 3624}
+]
+sg.batch(batch_data)
+
+
+

Example output:

+
[{'code': 'New Shot 1', 'type': 'Shot', 'id': 3723,
+  'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}},
+ {'code': 'Changed 1', 'type': 'Shot', 'id': 3624},
+ True]
+
+
+
+
Parameters:
+

requests (list) –

A list of dict’s of the form which have a request_type key and also +specifies:

+
    +
  • create: entity_type, data dict of fields to set

  • +
  • +
    update: entity_type, entity_id, data dict of fields to set,

    and optionally multi_entity_update_modes

    +
    +
    +
  • +
  • delete: entity_type and entity_id

  • +
+

+
+
Returns:
+

A list of values for each operation. Create and update requests return a dict of +the fields updated. Delete requests return True if the entity was deleted.

+
+
Return type:
+

list

+
+
+
+ +
+
+Shotgun.summarize(entity_type, filters, summary_fields, filter_operator=None, grouping=None, include_archived_projects=True)[source]
+

Summarize field data returned by a query.

+

This provides the same functionality as the summaries in the UI. You can specify one or +more fields to summarize, choose the summary type for each, and optionally group the +results which will return summary information for each group as well as the total for +the query.

+

Example: Count all Assets for a Project

+
>>> sg.summarize(entity_type='Asset',
+...              filters = [['project', 'is', {'type':'Project', 'id':4}]],
+...              summary_fields=[{'field':'id', 'type':'count'}])
+{'groups': [], 'summaries': {'id': 15}}
+
+
+

summaries contains the total summary for the query. Each key is the field summarized +and the value is the result of the summary operation for the entire result set.

+
+

Note

+

You cannot perform more than one summary on a field at a time, but you can summarize +several different fields in the same call.

+
+

Example: Count all Assets for a Project, grouped by sg_asset_type

+
>>> sg.summarize(entity_type='Asset',
+...              filters=[['project', 'is', {'type': 'Project', 'id': 4}]],
+...              summary_fields=[{'field': 'id', 'type': 'count'}],
+...              grouping=[{'field': 'sg_asset_type', 'type': 'exact', 'direction': 'asc'}])
+{'groups': [{'group_name': 'Character','group_value': 'Character', 'summaries': {'id': 3}},
+            {'group_name': 'Environment','group_value': 'Environment', 'summaries': {'id': 3}},
+            {'group_name': 'Matte Painting', 'group_value': 'Matte Painting', 'summaries': {'id': 1}},
+            {'group_name': 'Prop', 'group_value': 'Prop', 'summaries': {'id': 4}},
+            {'group_name': 'Vehicle', 'group_value': 'Vehicle', 'summaries': {'id': 4}}],
+ 'summaries': {'id': 15}}
+
+
+
    +
  • summaries contains the total summary for the query.

  • +
  • groups contains the summary for each group.

    +
    +
      +
    • group_name is the display name for the group.

    • +
    • group_value is the actual value of the grouping value. This is often the same as +group_name but in the case when grouping by entity, the group_name may be +PuppyA and the group_value would be +{'type':'Asset','id':922,'name':'PuppyA'}.

    • +
    • summaries contains the summary calculation dict for each field requested.

    • +
    +
    +
  • +
+

Example: Count all Tasks for a Sequence and find the latest due_date

+
>>> sg.summarize(entity_type='Task',
+...              filters = [
+...                 ['entity.Shot.sg_sequence', 'is', {'type':'Sequence', 'id':2}],
+...                 ['sg_status_list', 'is_not', 'na']],
+...              summary_fields=[{'field':'id', 'type':'count'},
+...                              {'field':'due_date','type':'latest'}])
+{'groups': [], 'summaries': {'due_date': '2013-07-05', 'id': 30}}
+
+
+

This shows that the there are 30 Tasks for Shots in the Sequence and the latest due_date +of any Task is 2013-07-05.

+

Example: Count all Tasks for a Sequence, find the latest due_date and group by Shot

+
>>> sg.summarize(entity_type='Task',
+...              filters = [
+...                 ['entity.Shot.sg_sequence', 'is', {'type': 'Sequence', 'id': 2}],
+...                 ['sg_status_list', 'is_not', 'na']],
+...              summary_fields=[{'field': 'id', 'type': 'count'}, {'field': 'due_date', 'type': 'latest'}],
+...              grouping=[{'field': 'entity', 'type': 'exact', 'direction': 'asc'}]))
+{'groups': [{'group_name': 'shot_010',
+             'group_value': {'id': 2, 'name': 'shot_010', 'type': 'Shot', 'valid': 'valid'},
+             'summaries': {'due_date': '2013-06-18', 'id': 10}},
+            {'group_name': 'shot_020',
+             'group_value': {'id': 3, 'name': 'shot_020', 'type': 'Shot', 'valid': 'valid'},
+             'summaries': {'due_date': '2013-06-28', 'id': 10}},
+            {'group_name': 'shot_030',
+             'group_value': {'id': 4, 'name': 'shot_030', 'type': 'Shot', 'valid': 'valid'},
+             'summaries': {'due_date': '2013-07-05', 'id': 10}}],
+ 'summaries': {'due_date': '2013-07-05', 'id': 30}}
+
+
+

This shows that the there are 30 Tasks for Shots in the Sequence and the latest due_date +of any Task is 2013-07-05. Because the summary is grouped by entity, we can also +see the summaries for each Shot returned. Each Shot has 10 Tasks and the latest due_date +for each Shot. The difference between group_name and group_value is highlighted in +this example as the name of the Shot is different from its value.

+

Example: Count all Tasks for a Sequence, find the latest due_date, group by Shot and +Pipeline Step

+
>>> sg.summarize(entity_type='Task',
+...                 filters = [
+...                    ['entity.Shot.sg_sequence', 'is', {'type': 'Sequence', 'id': 2}],
+...                    ['sg_status_list', 'is_not', 'na']],
+...                 summary_fields=[{'field': 'id', 'type': 'count'},
+...                                 {'field': 'due_date', 'type': 'latest'}],
+...                 grouping=[{'field': 'entity', 'type': 'exact', 'direction': 'asc'},
+...                           {'field': 'step', 'type': 'exact', 'direction': 'asc'}])
+{'groups': [{'group_name': 'shot_010',
+             'group_value': {'id': 2, 'name': 'shot_010', 'type': 'Shot', 'valid': 'valid'},
+             'groups': [{'group_name': 'Client',
+                         'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-05-04', 'id': 1}},
+                        {'group_name': 'Online',
+                         'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-05-05', 'id': 1}},
+                        ...
+                        ... truncated for brevity
+                        ...
+                        {'group_name': 'Comp',
+                         'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-06-18', 'id': 1}}],
+             'summaries': {'due_date': '2013-06-18', 'id': 10}},
+            {'group_name': 'shot_020',
+             'group_value': {'id': 3, 'name': 'shot_020', 'type': 'Shot', 'valid': 'valid'},
+             'groups': [{'group_name': 'Client',
+                         'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-05-15', 'id': 1}},
+                        {'group_name': 'Online',
+                         'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-05-16', 'id': 1}},
+                        ...
+                        ... truncated for brevity
+                        ...
+                        {'group_name': 'Comp',
+                         'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-06-28', 'id': 1}}],
+             'summaries': {'due_date': '2013-06-28', 'id': 10}},
+            {'group_name': 'shot_030',
+             'group_value': {'id': 4, 'name': 'shot_030', 'type': 'Shot', 'valid': 'valid'},
+             'groups': [{'group_name': 'Client',
+                         'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-05-20', 'id': 1}},
+                        {'group_name': 'Online',
+                         'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-05-21', 'id': 1}},
+                        ...
+                        ... truncated for brevity
+                        ...
+                        {'group_name': 'Comp',
+                         'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'},
+                         'summaries': {'due_date': '2013-07-05', 'id': 1}}],
+             'summaries': {'due_date': '2013-07-05', 'id': 10}}],
+'summaries': {'due_date': '2013-07-05', 'id': 30}}
+
+
+

When grouping my more than one field, the grouping structure is repeated for each sub-group +and summary values are returned for each group on each level.

+
+
Parameters:
+
    +
  • entity_type (str) – The entity type to summarize

  • +
  • filters (list) – A list of conditions used to filter the find query. Uses the same +syntax as find() method.

  • +
  • summary_fields (list) –

    A list of dictionaries with the following keys:

    +
    +
    field:
    +

    The internal Shotgun field name you are summarizing.

    +
    +
    type:
    +

    The type of summary you are performing on the field. Summary types can be any of +record_count, count, sum, maximum, minimum, average, +earliest, latest, percentage, status_percentage, status_list, +checked, unchecked depending on the type of field you’re summarizing.

    +
    +
    +

  • +
  • filter_operator (str) – Operator to apply to the filters. Supported values are "all" +and "any". These are just another way of defining if the query is an AND or OR +query. Defaults to "all".

  • +
  • grouping (list) –

    Optional list of dicts with the following keys:

    +
    +
    field:
    +

    a string indicating the internal Shotgun field name on entity_type to +group results by.

    +
    +
    type:
    +

    A string indicating the type of grouping to perform for each group. +Valid types depend on the type of field you are grouping on and can be one of +exact, tens, hundreds, thousands, tensofthousands, +hundredsofthousands, millions, day, week, month, +quarter,``year``, clustered_date, oneday, fivedays, +entitytype, firstletter.

    +
    +
    direction:
    +

    A string that sets the order to display the grouped results. Valid +options are asc and desc. Defaults to asc.

    +
    +
    +

  • +
+
+
Returns:
+

dictionary containing grouping and summaries keys.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.note_thread_read(note_id, entity_fields=None)[source]
+

Return the full conversation for a given note, including Replies and Attachments.

+

Returns a complex data structure on the following form:

+
[{'content': 'Please add more awesomeness to the color grading.',
+  'created_at': '2015-07-14 21:33:28 UTC',
+  'created_by': {'id': 38,
+                 'name': 'John Pink',
+                 'status': 'act',
+                 'type': 'HumanUser',
+                 'valid': 'valid'},
+  'id': 6013,
+  'type': 'Note'},
+ {'created_at': '2015-07-14 21:33:32 UTC',
+  'created_by': {'id': 38,
+                 'name': 'John Pink',
+                 'status': 'act',
+                 'type': 'HumanUser',
+                 'valid': 'valid'},
+  'id': 159,
+  'type': 'Attachment'},
+ {'content': 'More awesomeness added',
+  'created_at': '2015-07-14 21:54:51 UTC',
+  'id': 5,
+  'type': 'Reply',
+  'user': {'id': 38,
+           'name': 'David Blue',
+           'status': 'act',
+           'type': 'HumanUser',
+           'valid': 'valid'}}]
+
+
+

The list is returned in descending chronological order.

+

If you wish to include additional fields beyond the ones that are +returned by default, you can specify these in an entity_fields +dictionary. This dictionary should be keyed by entity type and each +key should contain a list of fields to retrieve, for example:

+
{ "Note":       ["created_by.HumanUser.image",
+                 "addressings_to",
+                 "playlist",
+                 "user" ],
+  "Reply":      ["content"],
+  "Attachment": ["filmstrip_image",
+                "local_storage",
+                "this_file",
+                "image"]
+}
+
+
+
+
Parameters:
+
    +
  • note_id (int) – The id for the note to be retrieved

  • +
  • entity_fields (dict) – Additional fields to retrieve as part of the request. +See above for details.

  • +
+
+
Returns:
+

A list of dictionaries. See above for example.

+
+
Return type:
+

list

+
+
+
+ +
+ +

Search across the specified entity types for the given text.

+

This method can be used to implement auto completion or a Shotgun global search. The method +requires a text input phrase that is at least three characters long, or an exception will +be raised.

+

Several ways to limit the results of the query are available:

+
    +
  • Using the project_ids parameter, you can provide a list of Project ids to search +across. Leaving this at its default value of None will search across all Shotgun data.

  • +
  • You need to define which subset of entity types to search using the entity_types +parameter. Each of these entity types can be associated with a filter query to further +reduce the list of matches. The filter list is using the standard filter syntax used by +for example the find() method.

  • +
+

Example: Constrain the search to all Tasks but Character Assets only

+
>>> entity_types = {
+...     "Asset": [["sg_asset_type", "is", "Character"]],
+...     "Task": []
+... }
+>>> sg.text_search("bunny", entity_types)
+{'matches': [{'id': 734,
+              'type': 'Asset',
+              'name': 'Bunny',
+              'project_id': 65,
+              'image': 'https://...',
+              'links': ['', ''],
+              'status': 'fin'},
+              ...
+              {'id': 558,
+               'type': 'Task'
+               'name': 'FX',
+               'project_id': 65,
+               'image': 'https://...',
+               'links': ['Shot', 'bunny_010_0010'],
+               'status': 'fin'}],
+    'terms': ['bunny']}
+
+
+

The links field will contain information about any linked entity. This is useful when, for +example, presenting Tasks and you want to display what Shot or Asset the Task is associated +with.

+
+
Parameters:
+
    +
  • text (str) – Text to search for. This must be at least three characters long, or an +exception will be raised.

  • +
  • entity_types (dict) – Dictionary to specify which entity types to search across. See +above for usage examples.

  • +
  • project_ids (list) – List of Projects to search. By default, all projects will be +searched.

  • +
  • limit (int) – Specify the maximum number of matches to return.

  • +
+
+
Returns:
+

A complex dictionary structure, see above for example.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.update_project_last_accessed(project, user=None)[source]
+

Update a Project’s last_accessed_by_current_user field to the current timestamp.

+

This helps keep track of the recent Projects each user has worked on and enables scripts +and apps to use this information to display “Recent Projects” for users as a convenience.

+
+

New in version Requires: Shotgun v5.3.20+

+
+
>>> sg.update_project_last_accessed({"type": "Project", "id": 66},
+...                                 {"type": "HumanUser", "id": 43})
+
+
+
+
Parameters:
+
    +
  • project (dict) – Standard Project entity dictionary

  • +
  • user (dict) – Standard user entity dictionary. This is optional if the current API +instance is using user-based authenitcation, or has specified sudo_as_login. In +these cases, if user is not provided, the sudo_as_login value or login +value from the current instance will be used instead.

  • +
+
+
+
+ +
+
+Shotgun.work_schedule_read(start_date, end_date, project=None, user=None)[source]
+

Return the work day rules for a given date range.

+
+

New in version 3.0.9: Requires Shotgun server v3.2.0+

+
+

This returns the defined WorkDayRules between the start_date and end_date inclusive +as a dict where the key is the date and the value is another dict describing the rule for +that date.

+

Rules are represented by a dict with the following keys:

+
+
Description:
+

the description entered into the work day rule exception if applicable.

+
+
Reason:
+

one of six options:

+
    +
  • STUDIO_WORK_WEEK: standard studio schedule applies

  • +
  • STUDIO_EXCEPTION: studio-wide exception applies

  • +
  • PROJECT_WORK_WEEK: standard project schedule applies

  • +
  • PROJECT_EXCEPTION: project-specific exception applies

  • +
  • USER_WORK_WEEK: standard user work week applies

  • +
  • USER_EXCEPTION: user-specific exception applies

  • +
+
+
Working:
+

boolean indicating whether it is a “working” day or not.

+
+
+
>>> sg.work_schedule_read("2015-12-21", "2015-12-25")
+{'2015-12-21': {'description': None,
+                'reason': 'STUDIO_WORK_WEEK',
+                'working': True},
+ '2015-12-22': {'description': None,
+                'reason': 'STUDIO_WORK_WEEK',
+                'working': True},
+ '2015-12-23': {'description': None,
+                'reason': 'STUDIO_WORK_WEEK',
+                'working': True},
+ '2015-12-24': {'description': 'Closed for Christmas Eve',
+                'reason': 'STUDIO_EXCEPTION',
+                'working': False},
+ '2015-12-25': {'description': 'Closed for Christmas',
+                'reason': 'STUDIO_EXCEPTION',
+                'working': False}}
+
+
+
+
Parameters:
+
    +
  • start_date (str) – Start date of date range. YYYY-MM-DD

  • +
  • end_date (str) – End date of date range. YYYY-MM-DD

  • +
  • project (dict) – Optional Project entity to query WorkDayRules for.

  • +
  • user (dict) – Optional HumanUser entity to query WorkDayRules for.

  • +
+
+
Returns:
+

Complex dict containing each date and the WorkDayRule defined for that date +between the start_date and end date inclusive. See above for details.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.work_schedule_update(date, working, description=None, project=None, user=None, recalculate_field=None)[source]
+

Update the work schedule for a given date.

+
+

New in version 3.0.9: Requires Shotgun server v3.2.0+

+
+

If neither project nor user are passed in, the studio work schedule will be updated. +project and user can only be used exclusively of each other.

+
>>> sg.work_schedule_update ("2015-12-31", working=False,
+...                          description="Studio closed for New Years Eve", project=None,
+...                          user=None, recalculate_field=None)
+{'date': '2015-12-31',
+ 'description': "Studio closed for New Years Eve",
+ 'project': None,
+ 'user': None,
+ 'working': False}
+
+
+
+
Parameters:
+
    +
  • date (str) – Date of WorkDayRule to update. YYY-MM-DD

  • +
  • working (bool) – Indicates whether the day is a working day or not.

  • +
  • description (str) – Optional reason for time off.

  • +
  • project (dict) – Optional Project entity to assign the rule to. Cannot be used with the +user param.

  • +
  • user (dict) – Optional HumanUser entity to assign the rule to. Cannot be used with the +project param.

  • +
  • recalculate_field (str) – Optional schedule field that will be recalculated on Tasks +when they are affected by a change in working schedule. Options are due_date or +duration. Defaults to the value set in the Shotgun web application’s Site +Preferences.

  • +
+
+
Returns:
+

dict containing key/value pairs for each value of the work day rule updated.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.preferences_read(prefs=None)[source]
+

Get a subset of the site preferences.

+
>>> sg.preferences_read()
+{
+    "pref_name": "pref value"
+}
+
+
+
+
Parameters:
+

prefs (list) – An optional list of preference names to return.

+
+
Returns:
+

Dictionary of preferences and their values.

+
+
Return type:
+

dict

+
+
+
+ +
+
+

Working With Files

+

Methods that handle uploading and downloading files including thumbnails.

+ +
+
+Shotgun.upload(entity_type, entity_id, path, field_name=None, display_name=None, tag_list=None)[source]
+

Upload a file to the specified entity.

+

Creates an Attachment entity for the file in Shotgun and links it to the specified entity. +You can optionally store the file in a field on the entity, change the display name, and +assign tags to the Attachment.

+
+

Note

+

Make sure to have retries for file uploads. Failures when uploading will occasionally happen. +When it does, immediately retrying to upload usually works

+
+
>>> mov_file = '/data/show/ne2/100_110/anim/01.mlk-02b.mov'
+>>> sg.upload("Shot", 423, mov_file, field_name="sg_latest_quicktime",
+...           display_name="Latest QT")
+72
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Entity type to link the upload to.

  • +
  • entity_id (int) – Id of the entity to link the upload to.

  • +
  • path (str) – Full path to an existing non-empty file on disk to upload.

  • +
  • field_name (str) – The internal Shotgun field name on the entity to store the file in. +This field must be a File/Link field type.

  • +
  • display_name (str) – The display name to use for the file. Defaults to the file name.

  • +
  • tag_list (str) – comma-separated string of tags to assign to the file.

  • +
+
+
Returns:
+

Id of the Attachment entity that was created for the image.

+
+
Return type:
+

int

+
+
Raises:
+

ShotgunError on upload failure.

+
+
+
+ +
+
+Shotgun.upload_thumbnail(entity_type, entity_id, path, **kwargs)[source]
+

Upload a file from a local path and assign it as the thumbnail for the specified entity.

+
+

Note

+

Images will automatically be re-sized on the server to generate a size-appropriate image +file. However, the original file is retained as well and is accessible when you click +on the thumbnail image in the web UI. If you are using a local install of Shotgun and +have not enabled S3, this can eat up disk space if you’re uploading really large source +images for your thumbnails.

+
+

You can un-set (aka clear) a thumbnail on an entity using the +update() method and setting the image field to None. +This will also unset the filmstrip_thumbnail field if it is set.

+

Supported image file types include .jpg` and ``.png (preferred) but will also accept. +.gif`, .tif, .tiff, .bmp, .exr, .dpx, and .tga.

+

This method wraps over upload(). Additional keyword arguments +passed to this method will be forwarded to the upload() method.

+
+
Parameters:
+
    +
  • entity_type (str) – Entity type to set the thumbnail for.

  • +
  • entity_id (int) – Id of the entity to set the thumbnail for.

  • +
  • path (str) – Full path to the thumbnail file on disk.

  • +
+
+
Returns:
+

Id of the new attachment

+
+
+
+ +
+
+Shotgun.upload_filmstrip_thumbnail(entity_type, entity_id, path, **kwargs)[source]
+

Upload filmstrip thumbnail to specified entity.

+
+

New in version 3.0.9: Requires Shotgun server v3.1.0+

+
+

Uploads a file from a local directory and assigns it as the filmstrip thumbnail for the +specified entity. The image must be a horizontal strip of any number of frames that are +exactly 240 pixels wide. Therefore the whole strip must be an exact multiple of 240 pixels +in width. The height can be anything (and will depend on the aspect ratio of the frames). +Any image file type that works for thumbnails will work for filmstrip thumbnails.

+

Filmstrip thumbnails will only be visible in the Thumbnail field on an entity if a +regular thumbnail image is also uploaded to the entity. The standard thumbnail is +displayed by default as the poster frame. Then, on hover, the filmstrip thumbnail is +displayed and updated based on your horizontal cursor position for scrubbing. On mouseout, +the default thumbnail is displayed again as the poster frame.

+

The url for a filmstrip thumbnail on an entity is available by querying for the +filmstrip_image field.

+

You can un-set (aka clear) a thumbnail on an entity using the +update() method and setting the image field to None. +This will also unset the filmstrip_thumbnail field if it is set.

+

This method wraps over upload(). Additional keyword arguments +passed to this method will be forwarded to the upload() method.

+
>>> filmstrip_thumbnail = '/data/show/ne2/100_110/anim/01.mlk-02b_filmstrip.jpg'
+>>> sg.upload_filmstrip_thumbnail("Version", 27, filmstrip_thumbnail)
+87
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Entity type to set the filmstrip thumbnail for.

  • +
  • entity_id (int) – Id of the entity to set the filmstrip thumbnail for.

  • +
  • path (str) – Full path to the filmstrip thumbnail file on disk.

  • +
+
+
Returns:
+

Id of the new Attachment entity created for the filmstrip thumbnail

+
+
Return type:
+

int

+
+
+
+ +
+
+Shotgun.download_attachment(attachment=False, file_path=None, attachment_id=None)[source]
+

Download the file associated with a Shotgun Attachment.

+
>>> version = sg.find_one("Version", [["id", "is", 7115]], ["sg_uploaded_movie"])
+>>> local_file_path = "/var/tmp/%s" % version["sg_uploaded_movie"]["name"]
+>>> sg.download_attachment(version["sg_uploaded_movie"], file_path=local_file_path)
+/var/tmp/100b_scene_output_v032.mov
+
+
+
+

Warning

+

On older (< v5.1.0) Shotgun versions, non-downloadable files +on Shotgun don’t raise exceptions, they cause a server error which +returns a 200 with the page content.

+
+
+
Parameters:
+
    +
  • attachment (dict) –

    Usually a dictionary representing an Attachment entity. +The dictionary should have a url key that specifies the download url. +Optionally, the dictionary can be a standard entity hash format with id and +type keys as long as "type"=="Attachment". This is only supported for +backwards compatibility (#22150).

    +

    If an int value is passed in, the Attachment entity with the matching id will +be downloaded from the Shotgun server.

    +

  • +
  • file_path (str) – Optional file path to write the data directly to local disk. This +avoids loading all of the data in memory and saves the file locally at the given path.

  • +
  • attachment_id (id) –

    (deprecated) Optional id of the Attachment entity in Shotgun to +download.

    +

  • +
+
+
Returns:
+

If file_path is provided, returns the path to the file on disk. If +file_path is None, returns the actual data of the file, as str in Python 2 or +bytes in Python 3.

+
+
Return type:
+

str | bytes

+
+
+
+ +
+
+Shotgun.get_attachment_download_url(attachment)[source]
+

Return the URL for downloading provided Attachment.

+
+
Parameters:
+

attachment (mixed) –

Usually a dict representing An Attachment entity in Shotgun to +return the download url for. If the url key is present, it will be used as-is for +the download url. If the url key is not present, a url will be constructed pointing +at the current Shotgun server for downloading the Attachment entity using the id.

+

If None is passed in, it is silently ignored in order to avoid raising an error when +results from a find() are passed off to +download_attachment()

+

+
+
+
+

Note

+

Support for passing in an int representing the Attachment id is deprecated

+
+
+
Returns:
+

the download URL for the Attachment or None if None was passed to +attachment parameter.

+
+
Return type:
+

str

+
+
+
+ +
+
+Shotgun.share_thumbnail(entities, thumbnail_path=None, source_entity=None, filmstrip_thumbnail=False, **kwargs)[source]
+

Associate a thumbnail with more than one Shotgun entity.

+
+

New in version 3.0.9: Requires Shotgun server v4.0.0+

+
+

Share the thumbnail from between entities without requiring uploading the thumbnail file +multiple times. You can use this in two ways:

+
    +
  1. Upload an image to set as the thumbnail on multiple entities.

  2. +
  3. Update multiple entities to point to an existing entity’s thumbnail.

  4. +
+
+

Note

+

When sharing a filmstrip thumbnail, it is required to have a static thumbnail in +place before the filmstrip will be displayed in the Shotgun web UI. +If the thumbnail is still processing and is using a placeholder, this method will error.

+
+

Simple use case:

+
>>> thumb = '/data/show/ne2/100_110/anim/01.mlk-02b.jpg'
+>>> e = [{'type': 'Version', 'id': 123}, {'type': 'Version', 'id': 456}]
+>>> sg.share_thumbnail(entities=e, thumbnail_path=thumb)
+4271
+
+
+
>>> e = [{'type': 'Version', 'id': 123}, {'type': 'Version', 'id': 456}]
+>>> sg.share_thumbnail(entities=e, source_entity={'type':'Version', 'id': 789})
+4271
+
+
+
+
Parameters:
+
    +
  • entities (list) –

    The entities to update to point to the shared thumbnail provided in +standard entity dict format:

    +
    [{'type': 'Version', 'id': 123},
    + {'type': 'Version', 'id': 456}]
    +
    +
    +

  • +
  • thumbnail_path (str) – The full path to the local thumbnail file to upload and share. +Required if source_entity is not provided.

  • +
  • source_entity (dict) – The entity whos thumbnail will be the source for sharing. +Required if source_entity is not provided.

  • +
  • filmstrip_thumbnail (bool) – True to share the filmstrip thumbnail. False to +share the static thumbnail. Defaults to False.

  • +
+
+
Returns:
+

id of the Attachment entity representing the source thumbnail that is shared.

+
+
Return type:
+

int

+
+
Raises:
+

ShotgunError if not supported by server version or improperly called, +or ShotgunThumbnailNotReady if thumbnail is still pending.

+
+
+
+ +
+
+

Activity Stream

+

Methods that relate to the activity stream and following of entities in Flow Production Tracking.

+
+
+Shotgun.activity_stream_read(entity_type, entity_id, entity_fields=None, min_id=None, max_id=None, limit=None)[source]
+

Retrieve activity stream data from Shotgun.

+

This data corresponds to the data that is displayed in the +Activity tab for an entity in the Shotgun Web UI.

+

A complex data structure on the following form will be +returned from Shotgun:

+
{'earliest_update_id': 50,
+ 'entity_id': 65,
+ 'entity_type': 'Project',
+ 'latest_update_id': 79,
+ 'updates': [{'created_at': '2015-07-15 11:06:55 UTC',
+              'created_by': {'id': 38,
+                             'image': '6641',
+                             'name': 'John Smith',
+                             'status': 'act',
+                             'type': 'HumanUser'},
+              'id': 79,
+              'meta': {'entity_id': 6004,
+                       'entity_type': 'Version',
+                       'type': 'new_entity'},
+              'primary_entity': {'id': 6004,
+                                 'name': 'Review_turntable_v2',
+                                 'status': 'rev',
+                                 'type': 'Version'},
+              'read': False,
+              'update_type': 'create'},
+             {...},
+            ]
+}
+
+
+

The main payload of the return data can be found inside the ‘updates’ +key, containing a list of dictionaries. This list is always returned +in descending date order. Each item may contain different fields +depending on their update type. The primary_entity key represents the +main Shotgun entity that is associated with the update. By default, +this entity is returned with a set of standard fields. By using the +entity_fields parameter, you can extend the returned data to include +additional fields. If for example you wanted to return the asset type +for all assets and the linked sequence for all Shots, pass the +following entity_fields:

+
{"Shot": ["sg_sequence"], "Asset": ["sg_asset_type"]}
+
+
+

Deep queries can be used in this syntax if you want to +traverse into connected data.

+
+
Parameters:
+
    +
  • entity_type (str) – Entity type to retrieve activity stream for

  • +
  • entity_id (int) – Entity id to retrieve activity stream for

  • +
  • entity_fields (list) – List of additional fields to include. +See above for details

  • +
  • max_id (int) – Do not retrieve ids greater than this id. +This is useful when implementing paging.

  • +
  • min_id (int) – Do not retrieve ids lesser than this id. +This is useful when implementing caching of +the event stream data and you want to +“top up” an existing cache.

  • +
  • limit (int) – Limit the number of returned records. If not specified, +the system default will be used.

  • +
+
+
Returns:
+

A complex activity stream data structure. See above for details.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.follow(user, entity)[source]
+

Add the entity to the user’s followed entities.

+

If the user is already following the entity, the method will succeed but nothing will be +changed on the server-side.

+
>>> sg.follow({"type": "HumanUser", "id": 42}, {"type": "Shot", "id": 2050})
+{'followed': True, 'user': {'type': 'HumanUser', 'id': 42},
+ 'entity': {'type': 'Shot', 'id': 2050}}
+
+
+
+
Parameters:
+
    +
  • user (dict) – User entity that will follow the entity.

  • +
  • entity (dict) – Shotgun entity to be followed.

  • +
+
+
Returns:
+

dict with "followed": True as well as key/values for the params that were +passed in.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.unfollow(user, entity)[source]
+

Remove entity from the user’s followed entities.

+

This does nothing if the user is not following the entity.

+
>>> sg.unfollow({"type": "HumanUser", "id": 42}, {"type": "Shot", "id": 2050})
+{'entity': {'type': 'Shot', 'id': 2050}, 'user': {'type': 'HumanUser', 'id': 42},
+ 'unfollowed': True}
+
+
+
+
Parameters:
+
    +
  • user (dict) – User entity that will unfollow the entity.

  • +
  • entity (dict) – Entity to be unfollowed

  • +
+
+
Returns:
+

dict with "unfollowed": True as well as key/values for the params that were +passed in.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.followers(entity)[source]
+

Return all followers for an entity.

+
>>> sg.followers({"type": "Shot", "id": 2050})
+[{'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Richard Hendriks',
+  'id': 42},
+ {'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Bertram Gilfoyle',
+  'id': 33},
+ {'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Dinesh Chugtai',
+  'id': 57}]
+
+
+
+
Parameters:
+

entity (dict) – Entity to find followers of.

+
+
Returns:
+

list of dicts representing each user following the entity

+
+
Return type:
+

list

+
+
Versionadded:
+

+
+
+ +
+
+Shotgun.following(user, project=None, entity_type=None)[source]
+

Return all entity instances a user is following.

+

Optionally, a project and/or entity_type can be supplied to restrict returned results.

+
>>> user = {"type": "HumanUser", "id": 1234}
+>>> project = {"type": "Project", "id": 1234}
+>>> entity_type = "Task"
+>>> sg.following(user, project=project, entity_type=entity_type)
+[{"type":"Task", "id":1},
+ {"type":"Task", "id":2},
+ {"type":"Task", "id":3}]
+
+
+
+
Parameters:
+
    +
  • user (dict) – Find what this person is following.

  • +
  • project (dict) – Optional filter to only return results from a specific project.

  • +
  • entity_type (str) – Optional filter to only return results from one entity type.

  • +
+
+
Returns:
+

list of dictionaries, each containing entity type & id’s being followed.

+
+
Return type:
+

list

+
+
+
+ +
+
+

Working with the Shotgun Schema

+

Methods allow you to introspect and modify the Shotgun schema.

+
+
+Shotgun.schema_entity_read(project_entity=None)[source]
+

Return all active entity types, their display names, and their visibility.

+

If the project parameter is specified, the schema visibility for the given project is +being returned. If the project parameter is omitted or set to None, a full listing is +returned where per-project entity type visibility settings are not considered.

+
>>> sg.schema_entity_read()
+{'ActionMenuItem': {'name': {'editable': False, 'value': 'Action Menu Item'},
+                    'visible': {'editable': False, 'value': True}},
+ 'ApiUser': {'name': {'editable': False, 'value': 'Script'},
+             'visible': {'editable': False, 'value': True}},
+ 'AppWelcomeUserConnection': {'name': {'editable': False,
+                                       'value': 'App Welcome User Connection'},
+                              'visible': {'editable': False, 'value': True}},
+ 'Asset': {'name': {'editable': False, 'value': 'Asset'},
+           'visible': {'editable': False, 'value': True}},
+ 'AssetAssetConnection': {'name': {'editable': False,
+                                   'value': 'Asset Asset Connection'},
+                          'visible': {'editable': False, 'value': True}},
+ '...'
+}
+
+
+
+
Parameters:
+

project_entity (dict) – Optional Project entity specifying which project to return +the listing for. If omitted or set to None, per-project visibility settings are +not taken into consideration and the global list is returned. Example: +{'type': 'Project', 'id': 3}

+
+
Returns:
+

dict of Entity Type to dict containing the display name.

+
+
Return type:
+

dict

+
+
+
+

Note

+

The returned display names for this method will be localized when the localize Shotgun config property is set to True. See Localization for more information.

+
+
+ +
+
+Shotgun.schema_field_read(entity_type, field_name=None, project_entity=None)[source]
+

Get schema for all fields on the specified entity type or just the field name specified +if provided.

+
+

Note

+

Unlike how the results of a find() can be pumped into a +create() or update(), the +results of schema_field_read() are not compatible with +the format used for schema_field_create() or +schema_field_update(). If you need to pipe the results +from schema_field_read() into a +schema_field_create() or +schema_field_update(), you will need to reformat the +data in your script.

+
+
+

Note

+

If you don’t specify a project_entity, everything is reported as visible.

+
+
+

Note

+

The returned display names for this method will be localized when the localize Shotgun config property is set to True. See Localization for more information.

+
+
>>> sg.schema_field_read('Asset', 'shots')
+{'shots': {'data_type': {'editable': False, 'value': 'multi_entity'},
+           'description': {'editable': True, 'value': ''},
+           'editable': {'editable': False, 'value': True},
+           'entity_type': {'editable': False, 'value': 'Asset'},
+           'mandatory': {'editable': False, 'value': False},
+           'name': {'editable': True, 'value': 'Shots'},
+           'properties': {'default_value': {'editable': False,
+                                            'value': None},
+                          'summary_default': {'editable': True,
+                                              'value': 'none'},
+                          'valid_types': {'editable': True,
+                                          'value': ['Shot']}},
+           'unique': {'editable': False, 'value': False},
+           'visible': {'editable': False, 'value': True}}}
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Entity type to get the schema for.

  • +
  • field_name (str) – Optional internal Shotgun name of the field to get the schema +definition for. If this parameter is excluded or set to None, data structures of +all fields will be returned. Defaults to None. Example: sg_temp_field.

  • +
  • project_entity (dict) – Optional Project entity specifying which project to return +the listing for. If omitted or set to None, per-project visibility settings are +not taken into consideration and the global list is returned. Example: +{'type': 'Project', 'id': 3}

  • +
+
+
Returns:
+

a nested dict object containing a key/value pair for the field_name specified +and its properties, or if no field_name is specified, for all the fields of the +entity_type. Properties that are 'editable': True, can be updated using the +schema_field_update() method.

+
+
Return type:
+

dict

+
+
+
+ +
+
+Shotgun.schema_field_create(entity_type, data_type, display_name, properties=None)[source]
+

Create a field for the specified entity type.

+
+

Note

+

If the internal Shotgun field name computed from the provided display_name already +exists, the internal Shotgun field name will automatically be appended with _1 in +order to create a unique name. The integer suffix will be incremented by 1 until a +unique name is found.

+
+
>>> properties = {"summary_default": "count", "description": "Complexity breakdown of Asset"}
+>>> sg.schema_field_create("Asset", "text", "Complexity", properties)
+'sg_complexity'
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Entity type to add the field to.

  • +
  • data_type (str) – Shotgun data type for the new field.

  • +
  • display_name (str) – Specifies the display name of the field you are creating. The +system name will be created from this display name and returned upon successful +creation.

  • +
  • properties (dict) – Dict of valid properties for the new field. Use this to specify +other field properties such as the ‘description’ or ‘summary_default’.

  • +
+
+
Returns:
+

The internal Shotgun name for the new field, this is different to the +display_name parameter passed in.

+
+
Return type:
+

str

+
+
+
+ +
+
+Shotgun.schema_field_update(entity_type, field_name, properties, project_entity=None)[source]
+

Update the properties for the specified field on an entity.

+
+

Note

+

Although the property name may be the key in a nested dictionary, like +‘summary_default’, it is treated no differently than keys that are up +one level, like ‘description’.

+
+
>>> properties = {"name": "Test Number Field Renamed", "summary_default": "sum",
+...               "description": "this is only a test"}
+>>> sg.schema_field_update("Asset", "sg_test_number", properties)
+True
+
+
+
+
Parameters:
+
    +
  • entity_type – Entity type of field to update.

  • +
  • field_name – Internal Shotgun name of the field to update.

  • +
  • properties – Dictionary with key/value pairs where the key is the property to be +updated and the value is the new value.

  • +
  • project_entity (dict) – Optional Project entity specifying which project to modify the +visible property for. If visible is present in properties and +project_entity is not set, an exception will be raised. Example: +{'type': 'Project', 'id': 3}

  • +
+
+
Returns:
+

True if the field was updated.

+
+
+
+

Note

+

The project_entity parameter can only affect the state of the visible property +and has no impact on other properties.

+
+
+
Return type:
+

bool

+
+
+
+ +
+
+Shotgun.schema_field_delete(entity_type, field_name)[source]
+

Delete the specified field from the entity type.

+
>>> sg.schema_field_delete("Asset", "sg_temp_field")
+True
+
+
+
+
Parameters:
+
    +
  • entity_type (str) – Entity type to delete the field from.

  • +
  • field_name (str) – Internal Shotgun name of the field to delete.

  • +
+
+
Returns:
+

True if the field was deleted.

+
+
Return type:
+

bool

+
+
+
+ +
+
+Shotgun.schema_read(project_entity=None)[source]
+

Get the schema for all fields on all entities.

+
+

Note

+

If project_entity is not specified, everything is reported as visible.

+
+
>>> sg.schema_read()
+{'ActionMenuItem': {'created_at': {'data_type': {'editable': False, 'value': 'date_time'},
+                                   'description': {'editable': True,  'value': ''},
+                                   'editable': {'editable': False, 'value': False},
+                                   'entity_type': {'editable': False, 'value': 'ActionMenuItem'},
+                                   'mandatory': {'editable': False, 'value': False},
+                                   'name': {'editable': True, 'value': 'Date Created'},
+                                   'properties': {'default_value': {'editable': False, 'value': None},
+                                                  'summary_default': {'editable': True, 'value': 'none'}},
+                                   'unique': {'editable': False, 'value': False},
+                                   'visible': {'editable': False, 'value': True}},
+                    'created_by': {'data_type': {'editable': False,'value': 'entity'},
+                                   'description': {'editable': True,'value': ''},
+                                   'editable': {'editable': False,'value': False},
+                                   'entity_type': {'editable': False,'value': 'ActionMenuItem'},
+                                   'mandatory': {'editable': False,'value': False},
+                                   'name': {'editable': True,'value': 'Created by'},
+                                   'properties': {'default_value': {'editable': False,'value': None},
+                                                  'summary_default': {'editable': True,'value': 'none'},
+                                                  'valid_types': {'editable': True,'value':
+                                                                  ['HumanUser','ApiUser']}},
+                                   'unique': {'editable': False,'value': False},
+                                   'visible': {'editable': False,'value': True}},
+                    ...
+                    ...
+ ...
+ ...
+ 'Version': {'client_approved': {'data_type': {'editable': False,'value': 'checkbox'},
+                                 'description': {'editable': True,'value': ''},
+                                 'editable': {'editable': False,'value': True},
+                                 'entity_type': {'editable': False,'value': 'Version'},
+                                 'mandatory': {'editable': False,'value': False},
+                                 'name': {'editable': True,'value': 'Client Approved'},
+                                 'properties': {'default_value': {'editable': False,'value': False},
+                                                'summary_default': {'editable': False,'value': 'none'}},
+                                 'unique': {'editable': False,'value': False},
+                                 'visible': {'editable': False,'value': True}},
+             ...
+             ...
+ ...
+ ...
+}
+
+
+
+
Parameters:
+

project_entity (dict) – Optional, Project entity specifying which project to return +the listing for. If omitted or set to None, per-project visibility settings are +not taken into consideration and the global list is returned. Example: +{'type': 'Project', 'id': 3}. Defaults to None.

+
+
Returns:
+

A nested dict object containing a key/value pair for all fields of all entity +types. Properties that are 'editable': True, can be updated using the +schema_field_update() method.

+
+
Return type:
+

dict

+
+
+
+

Note

+

The returned display names for this method will be localized when the localize Shotgun config property is set to True. See Localization for more information.

+
+
+ +
+
+Shotgun.schema(entity_type)[source]
+
+

Deprecated since version 3.0.0: Use schema_field_read() instead.

+
+
+ +
+
+Shotgun.entity_types()[source]
+
+

Deprecated since version 3.0.0: Use schema_entity_read() instead.

+
+
+ +
+
+
+

Exceptions

+

These are the various exceptions that the Flow Production Tracking API will raise.

+
+
+class shotgun_api3.ShotgunError[source]
+

Bases: Exception

+

Base for all Shotgun API Errors.

+
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+class shotgun_api3.ShotgunFileDownloadError[source]
+

Bases: ShotgunError

+

Exception for file download-related errors.

+
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+class shotgun_api3.Fault[source]
+

Bases: ShotgunError

+

Exception when server-side exception detected.

+
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+class shotgun_api3.AuthenticationFault[source]
+

Bases: Fault

+

Exception when the server side reports an error related to authentication.

+
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+class shotgun_api3.MissingTwoFactorAuthenticationFault[source]
+

Bases: Fault

+

Exception when the server side reports an error related to missing two-factor authentication +credentials.

+
+
+with_traceback()
+

Exception.with_traceback(tb) – +set self.__traceback__ to tb and return self.

+
+ +
+ +
+
+

Filter Syntax

+
+

Basic Filters

+

Filters are represented as a list of conditions that will be combined using the supplied +filter_operator (any or all). Each condition follows the basic simple form:

+
[<field>, <relation>, <value(s)>]
+
+
+
+

Basic Example

+

Using the default filter_operator "all", the following filters will return all Shots whose status +is “ip” AND is linked to Asset #9:

+
filters = [
+    ["sg_status_list", "is", "ip"],
+    ["assets", "is", {"type": "Asset", "id": 9}]
+]
+result = sg.find("Shot", filters)
+
+
+
+
+
+

Complex Filters

+

Complex filters can be a dictionary that represents a complex sub-condition of the form:

+
{"filter_operator": "any", "filters": [<list of conditions>]}
+
+
+
+

Complex Example

+

Using the default filter_operator "all", the following filters will return all Shots whose status +is “ip” AND is linked to either Asset #9 OR Asset #23:

+
filters = [
+    ["sg_status_list", "is", "ip"],
+    {
+        "filter_operator": "any",
+        "filters": [
+            ["assets", "is", {"type": "Asset", "id": 9}],
+            ["assets", "is", {"type": "Asset", "id": 23}]
+        ]
+    }
+]
+result = sg.find("Shot", filters)
+
+
+
+
+
+

Operators and Arguments

+
Operator                    Arguments
+--------                    ---------
+'is'                        [field_value] | None
+'is_not'                    [field_value] | None
+'less_than'                 [field_value] | None
+'greater_than'              [field_value] | None
+'contains'                  [field_value] | None
+'not_contains'              [field_value] | None
+'starts_with'               [string]
+'ends_with'                 [string]
+'between'                   [[field_value] | None, [field_value] | None]
+'not_between'               [[field_value] | None, [field_value] | None]
+'in_last'                   [[int], 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'YEAR']
+                                   # note that brackets are not literal (eg. ['start_date', 'in_last', 1, 'DAY'])
+'in_next'                   [[int], 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'YEAR']
+                                   # note that brackets are not literal (eg. ['start_date', 'in_next', 1, 'DAY'])
+'in'                        [[field_value], ...]        # Array of field values
+'type_is'                   [string] | None             # Shotgun entity type
+'type_is_not'               [string] | None             # Shotgun entity type
+'in_calendar_day'           [int]                       # Offset (e.g. 0 = today, 1 = tomorrow,
+                                                        # -1 = yesterday)
+'in_calendar_week'          [int]                       # Offset (e.g. 0 = this week, 1 = next week,
+                                                        # -1 = last week)
+'in_calendar_month'         [int]                       # Offset (e.g. 0 = this month, 1 = next month,
+                                                        # -1 = last month)
+'name_contains'             [string]
+'name_not_contains'         [string]
+'name_starts_with'          [string]
+'name_ends_with'            [string]
+
+
+
+
+

Valid Operators By Data Type

+
addressing                  'is'
+                            'is_not'
+                            'contains'
+                            'not_contains'
+                            'in'
+                            'type_is'
+                            'type_is_not'
+                            'name_contains'
+                            'name_not_contains'
+                            'name_starts_with'
+                            'name_ends_with'
+
+checkbox                    'is'
+                            'is_not'
+
+currency                    'is'
+                            'is_not'
+                            'less_than'
+                            'greater_than'
+                            'between'
+                            'not_between'
+                            'in'
+                            'not_in'
+
+date                        'is'
+                            'is_not'
+                            'greater_than'
+                            'less_than'
+                            'in_last'
+                            'not_in_last'
+                            'in_next'
+                            'not_in_next'
+                            'in_calendar_day'
+                            'in_calendar_week'
+                            'in_calendar_month'
+                            'in_calendar_year'
+                            'between'
+                            'in'
+                            'not_in'
+
+date_time                   'is'
+                            'is_not'
+                            'greater_than'
+                            'less_than'
+                            'in_last'
+                            'not_in_last'
+                            'in_next'
+                            'not_in_next'
+                            'in_calendar_day'
+                            'in_calendar_week'
+                            'in_calendar_month'
+                            'in_calendar_year'
+                            'between'
+                            'in'
+                            'not_in'
+
+duration                    'is'
+                            'is_not'
+                            'greater_than'
+                            'less_than'
+                            'between'
+                            'in'
+                            'not_in'
+
+entity                      'is'
+                            'is_not'
+                            'type_is'
+                            'type_is_not'
+                            'name_contains'
+                            'name_not_contains'
+                            'name_is'
+                            'in'
+                            'not_in'
+
+float                       'is'
+                            'is_not'
+                            'greater_than'
+                            'less_than'
+                            'between'
+                            'in'
+                            'not_in'
+
+image                       'is' ** Note: For both 'is' and 'is_not', the only supported value is None,
+                            'is_not' **  which supports detecting the presence or lack of a thumbnail.
+
+list                        'is'
+                            'is_not'
+                            'in'
+                            'not_in'
+
+multi_entity                'is' ** Note:  when used on multi_entity, this functions as
+                                            you would expect 'contains' to function
+                            'is_not'
+                            'type_is'
+                            'type_is_not'
+                            'name_contains'
+                            'name_not_contains'
+                            'in'
+                            'not_in'
+
+number                      'is'
+                            'is_not'
+                            'less_than'
+                            'greater_than'
+                            'between'
+                            'not_between'
+                            'in'
+                            'not_in'
+
+password                    ** Filtering by this data type field not supported
+
+percent                     'is'
+                            'is_not'
+                            'greater_than'
+                            'less_than'
+                            'between'
+                            'in'
+                            'not_in'
+
+serializable                ** Filtering by this data type field not supported
+
+status_list                 'is'
+                            'is_not'
+                            'in'
+                            'not_in'
+
+summary                     ** Filtering by this data type field not supported
+
+
+tag_list                    'is'  ** Note:  when used on tag_list, this functions as
+                                            you would expect 'contains' to function
+                            'is_not'
+                            'name_contains'
+                            'name_not_contains'
+                            'name_id'
+
+text                        'is'
+                            'is_not'
+                            'contains'
+                            'not_contains'
+                            'starts_with'
+                            'ends_with'
+                            'in'
+                            'not_in'
+
+
+timecode                    'is'
+                            'is_not'
+                            'greater_than'
+                            'less_than'
+                            'between'
+                            'in'
+                            'not_in'
+
+url                         ** Filtering by this data type field is not supported
+
+
+
+
+

Additional Filter Presets

+

As of Flow Production Tracking version 7.0 it is possible to also use filter presets. These presets provide a simple +way to specify powerful query filters that would otherwise be costly and difficult to craft using +traditional filters.

+

Multiple presets can be specified in cases where it makes sense.

+

Also, these presets can be used alongside normal filters. The result returned is an AND operation +between the specified filters.

+
+

Example Uses

+

The following query will return the Version with the name ‘ABC’ that is linked to the latest entity +created:

+
additional_filter_presets = [
+    {
+        "preset_name": "LATEST",
+        "latest_by":   "ENTITIES_CREATED_AT"
+    }
+]
+
+filters = [['code', 'is', 'ABC']]
+
+result = sg.find('Version', filters = filters, additional_filter_presets = additional_filter_presets)
+
+
+

The following query will find all CutItems associated to Cut #1 and return all Versions associated +to the Shot linked to each of these CutItems:

+
additional_filter_presets = [
+    {
+        "preset_name": "CUT_SHOT_VERSIONS",
+        "cut_id":       1
+    }
+]
+
+result = sg.find('Version', additional_filter_presets = additional_filter_presets)
+
+
+
+
+

Available Filter Presets by Entity Type

+

Allowed filter presets (and preset parameter values) depend on the entity type being searched.

+

The table bellow gives the details about which filter preset can be used on each entity type and +with which parameters.

+
Entity Type Preset Name       Preset Parameters   Allowed Preset Parameter Values
+----------- -----------       -----------------   -------------------------------
+Cut         LATEST            [string] latest_by  'REVISION_NUMBER':
+                                                    Returns the cuts that have the
+                                                    highest revision number.
+                                                    This is typically used with a query
+                                                    filter that returns cuts with the
+                                                    same value for a given field
+                                                    (e.g. code field). This preset
+                                                    therefore allows to get
+                                                    the Cut of that set that has
+                                                    the highest revision_number value.
+
+Version     CUT_SHOT_VERSIONS [int] cut_id        Valid Cut entity id.
+                                                    Returns all Version entities
+                                                    associated to the Shot entity
+                                                    associated to the CutItems
+                                                    of the given Cut.
+                                                    This basically allows to find all
+                                                    Versions associated to the given
+                                                    Cut, via its CutItems.
+
+            LATEST            [string] latest_by  'ENTITIES_CREATED_AT':
+                                                    When dealing with multiple
+                                                    Versions associated to a group
+                                                    of entities, this will return
+                                                    only the last Version created
+                                                    for each entity.
+                                                    For example, when dealing with a
+                                                    set of Shots, this preset allows
+                                                    to find the latest Version created
+                                                    for each of these Shots.
+
+                                                  'BY_PIPELINE_STEP_NUMBER_AND_ENTITIES_CREATED_AT':
+                                                    When dealing with multiple versions
+                                                    associated to the same entity *and*
+                                                    to Tasks, returns the Version
+                                                    associated to the Task with highest
+                                                    step.list_order.
+                                                    If multiple Versions are found for
+                                                    that step.list_order, only the
+                                                    latest Version is returned.
+                                                    This allows to isolate the Version
+                                                    entity that is the farthest along
+                                                    in the pipeline for a given entity.
+                                                    For example, when dealing with a Shot
+                                                    with multiple Versions, this preset
+                                                    will return the Version associated
+                                                    to the Task with the highest
+                                                    step.list_order value.
+Published   LATEST            [string] latest_by  'ENTITIES_CREATED_AT':
+Files                                               When dealing with multiple
+                                                    PublishedFiles associated to a
+                                                    group of entities, this will return
+                                                    only the last PublishedFiles created
+                                                    for each entity.
+                                                    For example, when dealing with a
+                                                    set of Versions, this preset allows
+                                                    you to find the latest PublishedFile
+                                                    created for each of these Versions.
+
+                                                  'VERSION_NUMBER':
+                                                    When dealing with multiple
+                                                    PublishedFiles associated with a
+                                                    group of entities, this returns only
+                                                    the PublishedFile with the highest
+                                                    version_number.
+
+
+
+
+
+
+

Data Types

+
+

addressing

+
+
value:
+

list

+
+
+

List of dicts:

+
[
+  {
+    'type': 'HumanUser' | 'Group',
+    'id': int,
+    ...
+  },
+  ...
+]
+
+
+
+
+

checkbox

+
+
value:
+

bool (True | False)

+
+
+
+
+

color

+
+
value:
+

str

+
+
example:
+

255,0,0 | pipeline_step

+
+
+

pipeline_step indicates the Task color inherits from the Pipeline Step color.

+
+
+

currency

+
+
value:
+

float | None

+
+
range:
+

-9999999999999.99, 9999999999999.99

+
+
+
+
+

date

+
+
value:
+

str | None

+
+
range:
+

Year must be >= 1970

+
+
example:
+

YYYY-MM-DD

+
+
+
+
+

date_time

+
+
value:
+

datetime | None

+
+
range:
+

Year must be >= 1970

+
+

Note

+

Datetimes are stored as UTC on the server. The Flow Production Tracking API is configured to automatically +convert between client local time and UTC. This can be overridden.

+
+
+
+
+
+

duration

+
+
value:
+

int | None

+
+
range:
+

-2147483648, 2147483647

+
+
+

Length of time, in minutes

+
+
+

entity

+
+
value:
+

dict | None

+
+
+
{
+  'type': "string",
+  'id': int,
+  ...
+}
+
+
+
+
+

float

+
+
value:
+

float | None

+
+
range:
+

-999999999.999999, 999999999.999999

+
+
+
+
+

footage

+
+
value:
+

str | None FF-ff

+
+
range:
+

Frames must be < Preferences value for “Advanced > Number of frames per foot of film”

+
+

Note

+

Format matches Preference value for “Formatting > Display of footage fields”. +Example above is default.F=Feet f=Frames.

+
+
+
+
+
+

image (read-only)

+
+
value:
+

str | None

+ +
+
+
+
+

list

+
+
value:
+

str | None

+
+
+
+
+

multi_entity

+
+
value:
+

list

+
+
+

List of dicts

+
[
+  {
+    'type': "string",
+    'id': int,
+    ...
+  },
+  ...
+]
+
+
+
+
+

number

+
+
value:
+

int | None

+
+
range:
+

-2147483648, 2147483647

+
+
+
+
+

password

+
+
value:
+

string | None

+
+
+

Returned values of password fields are replaced with ******* for security

+
+
+

percent

+
+
value:
+

int | None

+
+
range:
+

-2147483648, 2147483647

+
+
+
+
+

serializable

+
+
value:
+

dict | None

+
+
+
+
+

status_list

+
+
value:
+

str | None

+
+
+
+
+

system_task_type (deprecated)

+
+
value:
+

str | None

+
+
+
+
+

tag_list

+
+
value:
+

list

+
+
+
+
+

text

+
+
value:
+

str | None

+
+
+
+
+

timecode

+
+
value:
+

int | None

+
+
range:
+

-2147483648, 2147483647

+
+
+

Length of time, in milliseconds (1000 = 1 second)

+
+ +
+
+

Interpreting Image Field Strings

+

There are three possible states for values returned by an image field:

+ + + + + + + + + + + + + + + + + +

Type

Value - Description

None

No thumbnail image uploaded, or thumbnail generation failed.

str

+
<protocol>://<domain>/images/status/transient/thumbnail_pending.png -
+
URLs of this form indicate a transient placeholder icon.
+
Returned if image requested between upload & availability from media storage.
+
Constant string per site.
+
+

str

+
<signed URL for S3 object> -
+
Access to final thumbnail.
+
+
+
+

Note

+

Other upcoming features are likely to require the use of other transient thumbnails. +For this reason, it is highly recommended to use the prefix part of the placeholder path +(e.g. https://my-site.shotgrid.autodesk.com/images/status/transient/) +to detect any transient URLs rather than use the full path of the thumbnail.

+
+
+
+

Event Types

+

Whenever a user makes a change to any data in Flow Production Tracking, an event log entry record is created, +capturing the value before and after. Flow Production Tracking also logs some additional useful events that help keep +track of various activity on your Flow Production Tracking instance.

+
+

Event-based Triggers

+

Events are particularlly useful when used in conjunction with a trigger framework like the +Flow Production Tracking Event Daemon. This allows you to +write plug-ins that watch for certain types of events and then run code when they occur.

+
+
+

Structure of Event Types

+

The basic structure of event types is broken into 3 parts:

+

Application_EntityType_Action

+
    +
  • Application: Is always “Shotgun” for events automatically created by the Flow Production Tracking server. +Other Flow Production Tracking products may use their name in here, for example, Toolkit has its own events +that it logs and the application portion is identified by “Toolkit”. If you decide to use the +EventLogEntry entity to log events for your scripts or tools, you would use your tool name here.

  • +
  • EntityType: This is the entity type in Flow Production Tracking that was acted upon (eg. Shot, Asset, etc.)

  • +
  • Action: The general action that was taken. (eg. New, Change, Retirement, Revival)

  • +
+
+
+

Standard Event Types

+

Each entity type has a standard set of events associated with it when it’s created, updated, +deleted, and revived. They follow this pattern:

+
    +
  • Shotgun_EntityType_New: a new entity was created. Example: Shotgun_Task_New

  • +
  • Shotgun_EntityType_Change: an entity was modified. Example: Shotgun_HumanUser_Change

  • +
  • Shotgun_EntityType_Retirement: an entity was deleted. Example: Shotgun_Ticket_Retirement

  • +
  • Shotgun_EntityType_Revival: an entity was revived. Example: Shotgun_CustomEntity03_Revival

  • +
+
+
+

Additional Event Types

+

These are _some_ of the additional event types that are logged by Flow Production Tracking:

+
    +
  • Shotgun_Attachment_View: an Attachment (file) was viewed by a user.

  • +
  • Shotgun_Reading_Change: a threaded entity has been marked read or unread. For example, a +Note was read by a user. The readings are unique to the entity<->user connection so when a +Note is read by user “joe” it may still be unread by user “jane”.

  • +
  • Shotgun_User_Login: a user logged in to Flow Production Tracking.

  • +
  • Shotgun_User_Logout: a user logged out of Flow Production Tracking.

  • +
+
+
+

Custom Event Types

+

Since EventLogEntries are entities themselves, you can create them using the API just like any +other entity type. As mentioned previously, if you’d like to have your scripts or tools log to +the Flow Production Tracking event log, simply devise a thoughtful naming structure for your event types and +create the EventLogEntry as needed following the usual methods for creating entities via the API.

+

Again, other Flow Production Tracking products like Toolkit use event logs this way.

+
+

Note

+

EventLogEntries cannot be updated or deleted (that would defeat the purpose of course).

+
+
+
+

Performance

+

Event log database tables can get large very quickly. While Flow Production Tracking does very well with event logs +that get into the millions of records, there’s an inevitable degradation of performance for pages +that display them in the web application as well as any API queries for events when they get too +big. This volume of events is not the norm, but can be reached if your server expereinces high +usage.

+

This does not mean your Flow Production Tracking server performance will suffer in general, just any pages that +are specifically displaying EventLogEntries in the web application, or API queries on the event +log that are run. We are always looking for ways to improve this in the future. If you have any +immediate concerns, please reach out to our support team

+
+
+
+

Environment Variables

+
+

SHOTGUN_API_CACERTS

+

Use this variable to override the default Trusted Root Certification Authorities +Certificate Store bundled with this library. +By default, the library relies on certifi +as its Root CA store.

+

This environment variable can be used in place of the ca_certs keyword +argument to the Shotgun constructor. +In the case that both this environment variable is set and the keyword argument +is provided, the value from the keyword argument will be used.

+

For an example about using SHOTGUN_API_CACERTS to fix a certificate issue, +see the SSLHandshakeError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed +article.

+
+
+

SHOTGUN_API_RETRY_INTERVAL

+

Stores the number of milliseconds to wait between request retries. By default, a value of 3000 milliseconds is used. You can override the default either by setting this environment variable, or by setting the rpc_attempt_interval property on the config like so:

+
sg = Shotgun(site_name, script_name, script_key)
+sg.config.rpc_attempt_interval = 1000 # adjusting default interval
+
+
+

In the case that both this environment variable and the config’s rpc_attempt_interval property are set, the value in rpc_attempt_interal will be used.

+
+
+

SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION

+
+

Note

+

(v3.7.0) This is an experimental feature. Feel free to disable this feature if you are experiencing any issues.

+
+

When set to 1, this environment variable will disable the entity optimization feature. +This feature is enabled by default and is used to reduce the payload size made to the server when retrieving entities +improving overall performance by decreasing network latency and server processing.

+

For example, a find call like this:

+
sg.find('Asset', [['project', 'is', {
+    'created_at': datetime.datetime(2015, 12, 16, 11, 2, 10, tzinfo),
+    'id': 9999,
+    'name': 'Demo: Game',
+    'type': 'Project',
+    # More entity attributes
+}]])
+
+
+

Will internally be transformed as if you invoked something like this:

+
sg.find('Asset', [['project', 'is', {'id': 999, 'type': 'Project'}]])
+
+
+
+
+
+

Localization

+

The Flow Production Tracking API offers the ability to return localized display names in the current user’s language. +Requests made from script/API users are localized in the site settings.

+

This functionality is currently supported by the methods Shotgun.schema_entity_read, Shotgun.schema_field_read, and Shotgun.schema_read.

+

Localization is disabled by default. To enable localization, set the localized property to True.

+

Example for a user whose language preference is set to Japanese:

+
 >>> sg = Shotgun(site_name, script_name, script_key)
+ >>> sg.config.localized # checking that localization is disabled
+ False
+ >>> sg.schema_field_read('Shot')
+ {
+ 'sg_vendor_groups': {
+     'mandatory': {'editable': False, 'value': False},
+     # the value field (display name) is not localized
+     'name': {'editable': True, 'value': 'Vendor Groups'},
+     ...
+ },
+ ...
+ }
+ >>> sg.config.localized = True # enabling the localization
+ >>> sg.schema_field_read('Shot')
+ {
+ 'sg_vendor_groups': {
+     'mandatory': {'editable': False, 'value': False},
+     # the value field (display name) is localized
+     'name': {'editable': True, 'value': '\xe3\x83\x99\xe3\x83\xb3\xe3\x83\x80\xe3\x83\xbc \xe3\x82\xb0\xe3\x83\xab\xe3\x83\xbc\xe3\x83\x97'},
+     ...
+ },
+ ...
+ }
+
+
+
+

Note

+

If needed, the encoding of the returned localized string can be ensured regardless the Python version using shotgun_api3.lib.six.ensure_text().

+
+
+
+ + +
+
+ +
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/run-tests b/run-tests deleted file mode 100755 index 61b0f82c9..000000000 --- a/run-tests +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -clear && find ./ -name ".coverage" -delete && find ./ -name "*.pyc" -delete && nosetests -vd --config="nose.cfg" --with-cover --cover-package=shotgun_api3 diff --git a/search.html b/search.html new file mode 100644 index 000000000..45c0eda6c --- /dev/null +++ b/search.html @@ -0,0 +1,184 @@ + + + + + + + + Search — python-api v3.8.3 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2025, Autodesk.

+
+ + + +
+
+
+
+
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/searchindex.js b/searchindex.js new file mode 100644 index 000000000..a83806d85 --- /dev/null +++ b/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["advanced", "advanced/iron_python", "advanced/packaging", "authentication", "changelog", "cookbook", "cookbook/attachments", "cookbook/examples/ami_handler", "cookbook/examples/ami_version_packager", "cookbook/examples/basic_create_shot", "cookbook/examples/basic_create_shot_task_template", "cookbook/examples/basic_create_version_link_shot", "cookbook/examples/basic_delete_shot", "cookbook/examples/basic_find_shot", "cookbook/examples/basic_sg_instance", "cookbook/examples/basic_update_shot", "cookbook/examples/basic_upload_thumbnail_version", "cookbook/examples/svn_integration", "cookbook/smart_cut_fields", "cookbook/tasks", "cookbook/tasks/split_tasks", "cookbook/tasks/task_dependencies", "cookbook/tasks/updating_tasks", "cookbook/tutorials", "cookbook/usage_tips", "index", "installation", "reference"], "filenames": ["advanced.rst", "advanced/iron_python.rst", "advanced/packaging.rst", "authentication.rst", "changelog.rst", "cookbook.rst", "cookbook/attachments.rst", "cookbook/examples/ami_handler.rst", "cookbook/examples/ami_version_packager.rst", "cookbook/examples/basic_create_shot.rst", "cookbook/examples/basic_create_shot_task_template.rst", "cookbook/examples/basic_create_version_link_shot.rst", "cookbook/examples/basic_delete_shot.rst", "cookbook/examples/basic_find_shot.rst", "cookbook/examples/basic_sg_instance.rst", "cookbook/examples/basic_update_shot.rst", "cookbook/examples/basic_upload_thumbnail_version.rst", "cookbook/examples/svn_integration.rst", "cookbook/smart_cut_fields.rst", "cookbook/tasks.rst", "cookbook/tasks/split_tasks.rst", "cookbook/tasks/task_dependencies.rst", "cookbook/tasks/updating_tasks.rst", "cookbook/tutorials.rst", "cookbook/usage_tips.rst", "index.rst", "installation.rst", "reference.rst"], "titles": ["Advanced Topics", "IronPython", "Packaging an application with py2app (or py2exe)", "Authentication", "Flow Production Tracking Python API Changelog", "API Cookbook", "Details About Working With Files", "Handling Action Menu Item Calls", "Using an ActionMenuItem to Package Versions for a Client", "Create A Shot", "Create a Shot with a Task Template", "Create a Version Linked to a Shot", "Delete A Shot", "Find a Shot", "Create a Flow Production Tracking API instance", "Update A Shot", "Upload a Thumbnail for a Version", "Subversion (SVN) Integration", "Smart Cut Fields", "Working With Tasks", "Split Tasks", "Task Dependencies", "Updating Task Dates: How Flow Production Tracking Thinks", "Examples", "API Usage Tips", "Flow Production Tracking Python API library", "Installation", "API Reference"], "terms": {"below": [0, 6, 19, 22, 24], "ar": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11, 13, 15, 18, 20, 21, 22, 24, 26, 27], "some": [0, 1, 3, 4, 5, 6, 17, 20, 22, 24, 26, 27], "more": [0, 2, 3, 4, 5, 6, 7, 8, 13, 17, 20, 24, 26, 27], "regard": [0, 4], "usag": [0, 5, 25, 27], "python": [0, 1, 2, 6, 7, 8, 9, 12, 13, 15, 17, 20, 24, 26, 27], "api": [0, 1, 2, 3, 6, 8, 9, 10, 13, 15, 18, 19, 20, 21, 22, 23, 26], "If": [0, 1, 3, 4, 6, 7, 10, 11, 12, 16, 17, 18, 20, 21, 22, 24, 26, 27], "you": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 18, 20, 21, 22, 23, 24, 25, 26, 27], "would": [0, 4, 6, 7, 8, 24, 27], "like": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 21, 22, 24, 25, 27], "see": [0, 1, 3, 4, 6, 8, 11, 16, 17, 21, 24, 26, 27], "someth": [0, 3, 7, 8, 10, 16, 24, 27], "": [0, 1, 2, 3, 4, 5, 7, 8, 11, 13, 17, 20, 21, 22, 23, 24, 25, 27], "miss": [0, 7, 8, 27], "here": [0, 1, 4, 5, 7, 9, 11, 12, 13, 15, 17, 18, 21, 23, 27], "pleas": [0, 27], "feel": [0, 5, 17, 27], "free": [0, 5, 17, 27], "contact": 0, "support": [0, 1, 4, 5, 6, 7, 18, 21, 24, 26, 27], "http": [0, 1, 3, 4, 6, 7, 8, 9, 12, 13, 14, 15, 17, 24, 25, 26, 27], "knowledg": [0, 4], "autodesk": [0, 2, 3, 4, 6, 8, 9, 12, 13, 14, 15, 17, 24, 25, 27], "com": [0, 1, 2, 3, 4, 6, 7, 8, 9, 12, 13, 14, 15, 17, 24, 25, 26, 27], "your": [0, 2, 3, 4, 5, 6, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 22, 24, 26, 27], "suggest": [0, 17, 24], "we": [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 16, 17, 18, 20, 21, 22, 24, 25, 26, 27], "ll": [0, 3, 5, 10, 11, 13, 16, 17, 21, 24, 26, 27], "get": [0, 8, 11, 21, 22, 24, 25, 27], "ad": [0, 1, 4, 5, 6, 20, 24, 26, 27], "packag": [0, 4, 5, 23, 25, 26, 27], "an": [0, 1, 3, 4, 5, 6, 7, 9, 10, 12, 13, 15, 16, 17, 20, 21, 22, 23, 24, 25, 26, 27], "applic": [0, 6, 17, 24, 25, 27], "py2app": [0, 25], "py2ex": [0, 25], "ironpython": [0, 25], "flow": [0, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 19, 20, 21, 23, 26, 27], "product": [0, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 19, 20, 21, 23, 26, 27], "track": [0, 2, 3, 5, 6, 8, 9, 10, 11, 12, 13, 15, 16, 19, 20, 21, 23, 26, 27], "changelog": [0, 25], "do": [1, 3, 4, 5, 11, 13, 14, 17, 19, 21, 23, 24, 27], "test": [1, 4, 6, 27], "against": 1, "cannot": [1, 6, 24, 27], "sure": [1, 4, 6, 7, 9, 12, 13, 14, 15, 17, 27], "won": [1, 3, 8, 20, 24], "t": [1, 3, 4, 7, 8, 11, 17, 20, 21, 24, 25, 27], "introduc": [1, 4, 18], "break": [1, 4], "chang": [1, 3, 4, 5, 9, 12, 13, 15, 17, 20, 21, 22, 27], "compat": [1, 4, 26, 27], "futur": [1, 3, 27], "releas": [1, 4, 25, 26], "while": [1, 20, 24, 26, 27], "don": [1, 3, 4, 7, 11, 17, 21, 24, 25, 27], "offici": [1, 4, 26], "certainli": 1, "our": [1, 7, 8, 10, 11, 13, 17, 21, 24, 25, 27], "best": [1, 5, 6], "figur": 1, "out": [1, 4, 13, 14, 17, 21, 27], "ani": [1, 3, 5, 6, 7, 8, 9, 11, 15, 17, 18, 21, 24, 27], "issu": [1, 4, 8, 27], "come": [1, 24], "up": [1, 4, 7, 8, 11, 14, 17, 19, 24, 26, 27], "us": [1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 20, 21, 23, 24, 25, 26], "how": [1, 5, 6, 7, 8, 13, 14, 16, 17, 19, 21, 23, 27], "avoid": [1, 4, 5, 27], "them": [1, 3, 4, 5, 6, 7, 8, 10, 21, 24, 27], "As": [1, 24, 27], "juli": 1, "9": [1, 27], "2015": [1, 27], "can": [1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27], "look": [1, 3, 6, 10, 11, 13, 21, 22, 24, 27], "thi": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 20, 21, 22, 24, 25, 26, 27], "fork": [1, 4], "repo": [1, 17, 26], "what": [1, 3, 5, 6, 7, 9, 11, 13, 14, 15, 21, 22, 23, 24, 27], "were": [1, 3, 4, 7, 17, 27], "need": [1, 2, 3, 5, 6, 9, 10, 11, 15, 17, 24, 25, 26, 27], "date": [1, 3, 5, 7, 19], "make": [1, 4, 5, 6, 9, 12, 13, 15, 17, 21, 22, 24, 27], "thing": [1, 6, 13, 17, 24], "work": [1, 4, 5, 16, 18, 20, 21, 22, 24, 25], "The": [1, 2, 3, 4, 6, 7, 8, 11, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27], "origin": [1, 17, 24, 27], "wa": [1, 4, 6, 7, 10, 11, 12, 17, 21, 22, 27], "v3": [1, 6, 25, 26, 27], "0": [1, 5, 6, 7, 8, 18, 24, 26, 27], "20": [1, 20, 22, 27], "big": [1, 24, 27], "thank": [1, 4], "awesom": [1, 27], "client": [1, 4, 5, 23, 24, 27], "pixomondo": 1, "public": 1, "let": [1, 20, 21, 24], "u": [1, 7, 13, 17], "refer": [1, 3, 4, 5, 6, 14, 25], "github": [1, 7], "tree": 1, "ipi": 1, "littl": [1, 13], "bit": [1, 7], "zlib": 1, "modul": [1, 4, 13, 20, 24, 25, 26], "handl": [1, 4, 5, 8, 11, 20, 22, 23, 27], "decompress": 1, "gzip": [1, 8], "respons": [1, 8, 11, 20], "from": [1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 17, 18, 20, 21, 27], "server": [1, 3, 4, 6, 7, 8, 9, 12, 13, 15, 16, 22, 26, 27], "There": [1, 2, 4, 6, 20, 21, 24, 27], "built": [1, 27], "potenti": 1, "solut": 1, "jeff": 1, "hardi": 1, "bitbucket": 1, "org": [1, 26, 27], "jdhardi": 1, "ironpythonzlib": 1, "src": [1, 2, 20], "And": [1, 9, 12, 13, 15, 16, 19, 21], "blog": [1, 4], "post": [1, 4, 8], "about": [1, 4, 5, 7, 8, 21, 24, 25, 26, 27], "ca": [1, 27], "2008": 1, "12": [1, 10, 20, 21, 24, 27], "solv": 1, "problem": [1, 3], "html": [1, 4, 8, 26], "encount": [1, 4, 7], "ssl": [1, 4, 27], "error": [1, 4, 7, 8, 16, 17, 20, 24, 26, 27], "unknown": [1, 8, 20], "field": [1, 3, 4, 5, 8, 9, 10, 11, 13, 15, 16, 17, 19, 20, 22, 25], "serialnumb": 1, "0123456789": 1, "ssl3_get_server_certif": 1, "certif": [1, 2, 4, 27], "verifi": [1, 27], "fail": [1, 4, 7, 8, 20, 27], "For": [1, 3, 6, 8, 11, 14, 20, 21, 24, 26, 27], "now": [1, 3, 4, 8, 9, 10, 11, 13, 15, 16, 21, 24], "workaround": [1, 4], "disabl": [1, 4, 27], "valid": [1, 3, 4, 8, 17], "which": [1, 3, 4, 6, 9, 10, 11, 17, 18, 20, 21, 24, 26, 27], "ve": [1, 3, 11, 14, 16, 17, 21, 24], "intermitt": 1, "set": [1, 3, 4, 7, 8, 9, 10, 11, 14, 17, 18, 21, 22, 24, 26, 27], "no_ssl_valid": [1, 27], "true": [1, 8, 12, 21, 22, 27], "either": [1, 3, 20, 27], "case": [1, 3, 4, 17, 20, 22, 24, 27], "shotgun_api3": [1, 2, 3, 4, 8, 9, 12, 13, 14, 15, 20, 24, 25, 27], "shotgun": [1, 2, 3, 4, 7, 8, 9, 12, 13, 14, 15, 17, 20, 24, 25], "lookuperror": 1, "encod": [1, 4, 7, 8, 27], "idna": 1, "forc": 1, "utf": [1, 4, 7, 8], "8": [1, 7, 8, 17, 24, 25, 27], "iri2uri": 1, "py": [1, 2, 4, 8, 17, 20, 24, 25], "ln": 1, "71": 1, "author": [1, 4, 17, 27], "ssl3_read_byt": 1, "sslv3": 1, "alert": 1, "handshak": 1, "failur": [1, 6, 27], "lower": 1, "level": [1, 3, 4, 7, 8, 24, 25, 27], "librari": [1, 4, 13, 26, 27], "back": [1, 17, 21, 27], "network": [1, 4, 27], "infrastructur": 1, "i": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 18, 19, 20, 22, 24, 25, 26, 27], "attempt": [1, 3, 4, 7, 18, 26], "connect": [1, 2, 4, 8, 14, 24], "via": [1, 3, 4, 5, 6, 7, 18, 20, 27], "longer": [1, 21, 27], "code": [1, 4, 5, 6, 8, 9, 10, 11, 17, 24, 25, 27], "gist": [1, 7], "specif": [1, 4, 6, 10, 11, 17, 24, 27], "protocol": [1, 4, 6, 7, 8, 27], "link": [1, 4, 5, 7, 9, 10, 17, 23, 24, 25], "abov": [1, 6, 10, 11, 24, 27], "ha": [1, 3, 4, 6, 7, 9, 10, 15, 17, 20, 21, 22, 24, 27], "exampl": [1, 3, 4, 5, 6, 7, 8, 11, 14, 16, 17, 19, 24, 25, 26], "tlsv1": 1, "creat": [2, 3, 4, 5, 7, 8, 16, 17, 18, 19, 20, 23, 24, 27], "standalon": 2, "script": [2, 5, 7, 8, 13, 14, 18, 24, 25, 26, 27], "o": [2, 6, 7, 8, 17], "x": [2, 6], "window": [2, 4, 6], "often": [2, 3, 22, 24, 27], "done": [2, 6, 8, 10, 20, 27], "easili": [2, 7, 25], "distribut": 2, "have": [2, 4, 5, 6, 8, 10, 11, 16, 17, 18, 19, 21, 24, 25, 27], "gui": 2, "base": [2, 6, 14, 17, 18, 23, 25], "toolkit": [2, 27], "tk": [2, 4], "qt": [2, 7, 27], "other": [2, 3, 4, 6, 9, 11, 17, 22, 24, 25, 27], "caveat": 2, "awar": [2, 24], "when": [2, 3, 4, 5, 6, 9, 11, 15, 17, 20, 21, 22, 24, 26, 27], "app": [2, 11, 27], "file": [2, 4, 5, 8, 16, 17, 20, 24, 25], "locat": [2, 4, 6, 7, 8, 16, 17], "lib": [2, 4, 27], "httplib2": [2, 4, 26], "becaus": [2, 17, 21, 22, 24, 25, 27], "import": [2, 4, 5, 7, 8, 9, 12, 13, 14, 15, 17], "know": [2, 3, 10, 11, 13, 16, 24], "includ": [2, 3, 4, 6, 8, 21, 25, 27], "explicitli": [2, 6, 17], "specifi": [2, 4, 6, 8, 20, 22, 24, 27], "setup": [2, 3, 4, 17, 25], "edit": [2, 3, 20, 27], "path": [2, 4, 6, 7, 8, 17, 24, 27], "where": [2, 4, 8, 9, 10, 11, 13, 15, 17, 21, 24, 26, 27], "data_fil": 2, "onc": [2, 3, 4, 7, 11], "its": [2, 11, 16, 17, 21, 27], "content": [2, 11, 21, 27], "should": [2, 4, 9, 17, 18, 20, 23, 27], "two": [2, 4, 17, 20, 21, 27], "among": 2, "follow": [2, 4, 5, 6, 8, 9, 10, 20, 22, 24, 26, 27], "structur": [2, 5], "resourc": [2, 7], "my_script": [2, 9, 12, 13, 14, 15], "access": [2, 3, 4, 6, 7, 8, 14, 24, 25, 26, 27], "rel": [2, 4, 6], "pass": [2, 4, 7, 8, 9, 10, 11, 17, 22, 27], "constructor": [2, 4, 27], "ca_cert": [2, 4, 27], "join": [2, 6, 8, 24], "dirnam": [2, 7, 8], "__file__": 2, "sg": [2, 3, 4, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 22, 24, 25, 27], "my": [2, 3, 6, 7, 8, 9, 12, 13, 14, 15, 24, 25, 27], "site": [2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 15, 16, 17, 21, 24, 25, 26, 27], "shotgrid": [2, 3, 4, 5, 6, 8, 9, 12, 13, 14, 15, 17, 18, 24, 25, 27], "script_nam": [2, 3, 9, 12, 13, 14, 15, 17, 24, 27], "script_kei": [2, 9, 12, 13, 14, 15, 17, 27], "process": [2, 4, 6, 7, 21, 27], "similar": [2, 6, 7, 11, 24], "In": [3, 7, 9, 11, 13, 15, 17, 18, 20, 22, 24, 25, 26, 27], "order": [3, 4, 6, 8, 11, 20, 22, 24, 27], "commun": [3, 4], "must": [3, 6, 11, 17, 20, 27], "provid": [3, 4, 6, 9, 11, 13, 15, 16, 21, 22, 23, 24, 25, 27], "credenti": [3, 4, 9, 12, 13, 15, 27], "allow": [3, 4, 7, 25, 27], "normal": [3, 27], "login": [3, 4, 7, 8, 11, 17, 25, 27], "password": [3, 4, 25], "instanti": [3, 7, 27], "object": [3, 4, 13, 14, 15, 17, 22, 24, 27], "action": [3, 5, 8, 23, 27], "perform": [3, 4, 8, 24], "instanc": [3, 5, 6, 7, 9, 13, 15, 17, 22, 23, 24, 27], "limit": [3, 7, 27], "just": [3, 4, 6, 7, 10, 11, 13, 14, 16, 21, 24, 27], "thei": [3, 21, 24, 27], "web": [3, 4, 7, 17, 27], "rhendrik": [3, 25, 27], "c0mpre": [3, 25, 27], "hi0n": [3, 25, 27], "regist": 3, "api_kei": [3, 27], "compress": [3, 4, 8], "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef": 3, "strongli": [3, 24], "recommend": [3, 11, 18, 24, 27], "each": [3, 4, 6, 7, 8, 17, 20, 21, 22, 24, 27], "separ": [3, 27], "individu": 3, "down": 3, "much": [3, 4, 24], "accur": 3, "entiti": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 20, 21], "To": [3, 9, 15, 17, 24, 26, 27], "new": [3, 4, 5, 6, 9, 10, 11, 16, 17, 18, 20, 21, 24, 27], "click": [3, 11, 17, 27], "button": [3, 11], "page": [3, 4, 6, 7, 17, 21, 25, 27], "admin": [3, 17, 24], "section": [3, 7, 13, 17, 19, 22], "give": [3, 6, 17, 27], "name": [3, 4, 6, 7, 8, 9, 10, 11, 14, 15, 17, 18, 21, 24, 25, 27], "It": [3, 4, 7, 8, 9, 13, 15, 17, 22], "good": [3, 5, 11, 13, 20, 23], "idea": 3, "add": [3, 4, 13, 17, 26, 27], "relev": 3, "inform": [3, 4, 5, 6, 7, 8, 9, 14, 21, 24, 26, 27], "help": [3, 4, 9, 13, 15, 24, 27], "friendli": 3, "descript": [3, 6, 7, 9, 10, 11, 15, 17, 27], "doe": [3, 6, 9, 13, 15, 16, 22, 24, 27], "email": 3, "address": [3, 17], "maintain": [3, 20], "etc": [3, 4, 6, 7, 11, 25, 27], "save": [3, 17, 26, 27], "automat": [3, 4, 6, 11, 16, 21, 22, 24, 27], "gener": [3, 4, 7, 8, 11, 16, 19, 21, 26, 27], "act": [3, 4, 27], "so": [3, 4, 6, 7, 8, 11, 13, 16, 17, 21, 24, 26, 27], "one": [3, 4, 6, 20, 21, 24, 26, 27], "caus": [3, 4, 27], "also": [3, 4, 5, 8, 11, 17, 19, 20, 21, 22, 24, 25, 27], "better": [3, 6], "eventlog": 3, "found": [3, 10, 13, 17, 27], "even": [3, 17, 24], "though": 3, "mai": [3, 5, 6, 7, 17, 24, 27], "think": [3, 5, 19], "probabl": [3, 5], "never": 3, "extra": [3, 27], "2": [3, 7, 17, 20, 24, 26, 27], "minut": [3, 22, 27], "prevent": [3, 4], "hour": [3, 22, 27], "headach": 3, "By": [3, 11, 13], "default": [3, 4, 5, 10, 11, 13, 16, 21, 27], "un": [3, 27], "check": [3, 17, 21, 27], "checkbox": 3, "detail": [3, 5, 16, 25, 27], "main": [3, 7, 8, 9, 12, 13, 15, 17, 21, 24, 27], "notif": 3, "being": [3, 4, 22, 27], "trigger": [3, 4], "sinc": [3, 11, 16, 21, 22, 27], "notifi": 3, "reli": [3, 27], "find": [3, 4, 5, 6, 7, 8, 17, 18, 21, 23, 24, 25, 26, 27], "similarli": 3, "same": [3, 4, 6, 11, 17, 21, 27], "addit": [3, 4, 6, 9, 15, 20, 21, 25], "metadata": [3, 17, 25, 27], "store": [3, 6, 7, 9, 18, 22, 27], "eventlogentri": [3, 27], "identifi": [3, 9, 15, 27], "behalf": 3, "optim": [3, 4, 5, 27], "integr": [3, 4, 5, 23, 24, 25], "push": [3, 19], "data": [3, 4, 6, 7, 10, 11, 17, 18, 21, 24, 25], "publish": [3, 4, 27], "asset": [3, 24, 27], "manag": [3, 7, 24, 25], "system": [3, 27], "later": [3, 4, 17, 20], "itself": [3, 24], "entir": [3, 4, 17, 24, 27], "histori": [3, 4, 24], "clutter": 3, "grow": 3, "veri": [3, 17, 24, 25, 27], "larg": [3, 4, 26, 27], "audit": [3, 5], "amount": 3, "entri": [3, 27], "necessari": [3, 27], "both": [3, 22, 24, 25, 26, 27], "bound": 3, "restrict": [3, 27], "role": 3, "assign": [3, 4, 6, 9, 10, 27], "type": [3, 4, 5, 7, 8, 9, 10, 11, 13, 15, 17, 19, 24, 25], "full": [3, 4, 6, 7, 8, 27], "updat": [3, 4, 5, 9, 10, 11, 16, 17, 18, 19, 20, 23, 24, 27], "delet": [3, 4, 5, 23, 27], "apius": [3, 27], "prefer": [3, 4, 27], "statu": [3, 4, 6, 7, 11, 24, 27], "shot": [3, 5, 6, 16, 21, 23, 25, 27], "abl": [3, 24], "prohibit": 3, "rais": [3, 4, 7, 8, 20, 22, 26, 27], "appropri": [3, 6, 10, 17, 20, 24, 26, 27], "except": [3, 4, 6, 7, 8, 16, 22, 25, 26], "document": [3, 4, 5, 8, 18, 21, 24, 26, 27], "list": [4, 6, 7, 8, 9, 10, 11, 13, 15, 20, 21, 22, 23, 24], "between": [4, 20, 21, 24, 27], "improv": [4, 24, 27], "mockgun": 4, "ensur": [4, 27], "string": [4, 6, 7, 17, 20, 25], "comparison": 4, "insensit": 4, "ignor": [4, 6, 10, 17, 22, 27], "duplic": 4, "multi_entity_update_mod": [4, 27], "none": [4, 6, 7, 8, 17, 20, 22, 27], "rlessardrodeofx": 4, "slingshotsi": 4, "mhendrick": 4, "contribut": 4, "minor": [4, 27], "fix": [4, 27], "unit": 4, "flaki": 4, "disconnect": 4, "upload": [4, 5, 23, 25, 27], "thumbnail": [4, 5, 6, 7, 8, 11, 23, 25, 27], "most": [4, 6, 20, 21, 24, 25, 27], "common": [4, 24, 27], "close": [4, 8, 27], "peer": 4, "urlopen": 4, "eof": 4, "occur": [4, 7, 27], "violat": [4, 19], "c": [4, 8], "1006": 4, "upgrad": [4, 5, 27], "certifi": [4, 27], "appli": [4, 6, 10, 27], "black": 4, "format": [4, 7, 8, 9, 11, 13, 17, 20, 27], "sourc": [4, 24, 27], "softwar": 4, "credit": 4, "extend": [4, 27], "payload": [4, 27], "not_in": [4, 27], "filter": [4, 7, 10, 11, 13, 21, 24, 25], "method": [4, 6, 9, 11, 13, 14, 15, 17, 18, 24, 25, 26], "enabl": [4, 11, 16, 24, 27], "shotgun_api_disable_entity_optim": 4, "environ": [4, 17, 26], "variabl": [4, 7, 8, 9, 10, 11, 13, 15, 17, 25], "remov": [4, 6, 8, 20, 27], "unnecessari": 4, "combin": [4, 27], "relat": [4, 11, 21, 27], "queri": [4, 7, 8, 18, 19, 27], "befor": [4, 20, 21, 22, 27], "send": [4, 7, 17], "overal": [4, 27], "decreas": [4, 27], "latenc": [4, 27], "ticket": [4, 24], "prepar": 4, "run": [4, 6, 8, 22, 24, 26, 27], "ci": 4, "condit": [4, 13, 27], "auth": [4, 8, 9, 12, 13, 15, 27], "jenkin": 4, "first": [4, 10, 11, 17, 20, 21, 22, 24], "phase": 4, "python2": 4, "batch": [4, 27], "implement": [4, 27], "retri": [4, 6, 27], "strategi": 4, "onli": [4, 5, 6, 8, 10, 19, 20, 22, 24, 26], "urlerror": 4, "ssleoferror": 4, "prefix": [4, 27], "suffix": [4, 27], "display_nam": [4, 27], "moment": 4, "local": [4, 5, 8, 25, 26], "instal": [4, 25, 27], "clarifi": [4, 22], "_build_open": 4, "download_attach": [4, 8, 27], "drop": 4, "version": [4, 5, 6, 7, 18, 23, 24, 27], "revert": [4, 21], "header": [4, 17, 22, 27], "keep": [4, 21, 24, 27], "consist": [4, 17, 24], "add_user_ag": [4, 27], "set_session_uuid": [4, 27], "rebrand": 4, "compon": 4, "prototyp": 4, "travi": 4, "badg": 4, "imag": [4, 6, 11, 25], "anymor": [4, 7], "user_subscription_read": 4, "user_subscription_cr": 4, "licens": 4, "block": [4, 7, 8, 10], "user_subscript": 4, "end": [4, 5, 19, 20, 27], "point": [4, 6, 11, 17, 20, 27], "request": [4, 7, 8, 22, 27], "504": 4, "s3": [4, 27], "500": 4, "comment": [4, 17], "annot": 4, "entity_typ": [4, 7, 8, 24, 27], "start": [4, 7, 8, 17, 19, 20, 24, 27], "publishedfil": [4, 27], "preset": 4, "url": [4, 6, 7, 8, 17], "doc": [4, 5, 6, 8, 24, 26], "typo": 4, "incorrect": [4, 22], "hint": 4, "reformat": [4, 10, 27], "text": [4, 6, 10, 11], "overflow": [4, 7], "bump": 4, "06": [4, 20, 21, 22, 27], "skip": 4, "mim": 4, "replac": [4, 16, 26, 27], "shotgunsoftwar": [4, 26], "deprec": [4, 5, 18], "secur": [4, 27], "latest": [4, 20, 26, 27], "07": [4, 21, 27], "requir": [4, 10, 11, 12, 17, 24, 25, 27], "renam": [4, 27], "everi": [4, 17, 25, 27], "multi": [4, 5, 27], "demo": [4, 7, 9, 14, 21, 27], "git": [4, 26], "repositori": [4, 17, 26], "503": 4, "ami": 4, "coverag": 4, "azur": 4, "pipelin": [4, 27], "develop": [4, 5, 8], "increment": [4, 27], "backoff": 4, "502": 4, "messag": [4, 5, 7, 8, 17, 27], "mention": [4, 17, 27], "v0": 4, "bug": [4, 27], "six": [4, 7, 27], "platform": [4, 6], "normalize_platform": 4, "sgsix": 4, "unifi": 4, "valu": [4, 7, 9, 10, 11, 15, 17, 18, 20, 21, 22, 24, 27], "across": [4, 27], "httplib": 4, "procedur": 4, "emul": 4, "direct": [4, 7, 24, 27], "expect": [4, 8, 24, 26, 27], "return": [4, 6, 7, 8, 9, 10, 13, 15, 16, 17, 21, 24, 27], "share_thumbnail": [4, 27], "transient": [4, 27], "project_ent": [4, 27], "paramet": [4, 7, 17, 24, 27], "schema_field_upd": [4, 27], "modifi": [4, 6, 21, 27], "visibl": [4, 7, 27], "given": [4, 27], "project": [4, 6, 7, 8, 9, 10, 11, 17, 21, 22, 24, 27], "option": [4, 6, 9, 27], "properti": [4, 14, 27], "retriev": [4, 27], "displai": [4, 6, 7, 16, 17, 18, 24, 27], "schema_entity_read": [4, 27], "schema_field_read": [4, 27], "schema_read": [4, 27], "regress": 4, "mimetyp": 4, "sleep": 4, "shotgun_api_retry_interv": 4, "config": [4, 27], "rpc_attempt_interv": [4, 27], "shutil": 4, "memori": [4, 27], "read": [4, 8, 13, 14, 17, 18, 19, 24], "eestrada": 4, "those": [4, 7, 17, 21, 24, 25], "shotgun_api_cacert": 4, "sni": 4, "note": [4, 6, 17, 18, 21, 24, 26, 27], "contain": [4, 6, 9, 10, 11, 12, 13, 15, 18, 21, 24, 25, 26, 27], "recent": [4, 20, 21, 26, 27], "sign": [4, 27], "outdat": 4, "reject": 4, "proper": 4, "unicod": 4, "sane": 4, "unus": 4, "preferences_read": [4, 27], "under": [4, 22], "hood": 4, "transpar": 4, "user": [4, 6, 7, 8, 11, 17, 24, 27], "fals": [4, 8, 21, 22, 27], "dure": [4, 27], "__init__": [4, 7], "still": [4, 7, 11, 21, 24, 27], "download": [4, 8, 26, 27], "properli": 4, "due": [4, 20, 24, 27], "malwar": 4, "scan": 4, "usercredentialsnotallowedforssoauthenticationfault": 4, "initi": [4, 14, 22, 27], "usernam": [4, 27], "pair": [4, 7, 9, 10, 11, 15, 27], "sso": [4, 27], "pagin": 4, "switch": 4, "hard": 4, "records_per_pag": 4, "defin": [4, 6, 10, 17, 20, 24, 27], "experi": 4, "higher": [4, 24], "goal": 4, "increas": 4, "result": [4, 6, 8, 9, 11, 16, 17, 20, 21, 22, 24, 27], "empti": [4, 20, 27], "upload_thumbnail": [4, 6, 27], "upload_filmstrip_thumbnail": [4, 27], "call": [4, 5, 6, 8, 13, 20, 21, 23, 24, 27], "multipl": [4, 6, 20, 21, 24, 27], "enhanc": 4, "bugfix": 4, "nav_search_str": 4, "nav_search_ent": 4, "experiment": [4, 27], "intern": [4, 6, 7, 27], "hierarchi": 4, "accept": [4, 27], "speed": [4, 24], "nav_expand": 4, "port": 4, "all": [4, 6, 7, 8, 17, 18, 20, 21, 22, 24, 27], "sphinx": 4, "shotgridsoftwar": [4, 8], "move": [4, 7, 8, 21], "dedic": 4, "additional_filter_preset": [4, 27], "argument": [4, 7, 8], "find_on": [4, 10, 11, 13, 17, 21, 27], "mode": [4, 27], "explicit": 4, "handler": [4, 24, 27], "basic": [4, 5, 16, 17, 25], "refactor": 4, "nest": [4, 27], "class": [4, 7, 8, 24, 27], "sgtimezon": 4, "serializ": 4, "timestamp": [4, 8, 27], "proxi": [4, 27], "authent": [4, 14, 17, 25], "charact": [4, 27], "sudo": 4, "after": [4, 6, 17, 21, 22, 27], "v6": 4, "smarter": 4, "filmstrip": [4, 11, 16, 25, 27], "build": [4, 20], "suit": 4, "instead": [4, 6, 22, 24, 27], "framework": [4, 27], "inconjunct": 4, "exist": [4, 8, 17, 21, 24, 26, 27], "example_config": 4, "commit": 4, "pull": [4, 24], "strip": [4, 7, 27], "sensit": [4, 17], "incompat": 4, "sha": 4, "shotgun_force_certificate_valid": 4, "certfic": 4, "avail": [4, 5, 6, 7, 14, 19], "info": [4, 6, 7, 8, 9, 27], "agent": [4, 27], "Not": 4, "23371": 4, "load": [4, 7, 27], "patrickwolf": 4, "older": [4, 27], "sanit": 4, "text_search": [4, 27], "global": [4, 7, 9, 12, 13, 15, 17, 24, 27], "search": [4, 9, 10, 11, 13, 25, 27], "auto": [4, 27], "complet": [4, 11, 17, 27], "activity_stream_read": [4, 27], "activ": 4, "stream": [4, 8], "note_thread_read": [4, 27], "convers": [4, 27], "repli": [4, 27], "attach": [4, 5, 8, 16, 17, 27], "singl": [4, 8, 13, 24, 27], "insid": [4, 17, 26, 27], "rig": 4, "docstr": 4, "bundl": [4, 27], "factor": [4, 27], "turn": [4, 27], "abil": [4, 27], "session_token": [4, 27], "get_session_token": [4, 27], "obtain": 4, "token": [4, 27], "authenticationfault": [4, 27], "indic": [4, 27], "reason": [4, 27], "extern": [4, 27], "variou": [4, 18, 19, 23, 27], "per": [4, 24, 27], "status": 4, "v5": [4, 27], "last_accessed_by_current_us": [4, 27], "9291": 4, "affect": [4, 22, 27], "eg": [4, 27], "json": [4, 27], "mac": [4, 6, 27], "flag": [4, 27], "archiv": [4, 8, 27], "differenti": 4, "zero": [4, 21], "number": [4, 17], "differ": [4, 5, 6, 7, 17, 18, 22, 25, 27], "authenticate_human_us": [4, 27], "unfollow": [4, 27], "humanus": [4, 11, 17, 27], "webm": 4, "mp4": 4, "mime": [4, 6], "alwai": [4, 6, 9, 11, 15, 17, 24, 27], "video": [4, 6, 26], "tour": 4, "readm": 4, "dict": [4, 6, 7, 27], "backward": [4, 26, 27], "id": [4, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 21, 22, 24, 25, 27], "file_path": [4, 27], "write": [4, 5, 7, 8, 24, 25, 27], "directli": [4, 6, 21, 27], "disk": [4, 8, 27], "adam": 4, "goforth": 4, "aag": 4, "20856": 4, "sticki": 4, "permiss": [4, 17, 25, 27], "log": [4, 5, 7, 8, 17, 27], "tag": [4, 6, 26, 27], "18171": 4, "doesn": [4, 7], "egg": 4, "cacert": 4, "txt": 4, "syntax": [4, 17, 24, 25, 26], "reset_user_ag": [4, 27], "advanc": [4, 5, 25, 27], "summar": [4, 27], "19830": 4, "share": [4, 24, 27], "record": [4, 20, 24, 27], "media": [4, 25, 27], "transfer": 4, "binari": 4, "ie": 4, "warn": [4, 27], "previous": [4, 27], "without": [4, 10, 22, 24, 27], "correctli": [4, 7], "return_field": [4, 27], "clear": [4, 27], "simplejson": 4, "fallback": 4, "match": [4, 6, 8, 9, 10, 12, 13, 15, 17, 27], "clearer": 4, "pip": [4, 25], "v2": [4, 6, 27], "sideband": 4, "nativ": 4, "slow": 4, "filmstrip_thumbnail": [4, 27], "hughmacdonald": 4, "tag_list": [4, 6], "str": [4, 6, 17, 27], "workdayrul": [4, 27], "transport": 4, "rather": [4, 7, 20, 27], "than": [4, 27], "xml": 4, "rpc": 4, "boost": 4, "aaron": 4, "morton": 4, "amorton": 4, "ascii": 4, "ensure_ascii": [4, 27], "paging_info": 4, "unless": 4, "old": 4, "api3_preview": 4, "control": [4, 27], "session_uuid": [4, 7, 27], "browser": [4, 7, 24, 27], "session": [4, 6, 11, 27], "dictionari": [4, 6, 7, 9, 10, 13, 15, 17, 20, 21, 24, 27], "style": 4, "alex": 4, "schworer": 4, "inject": 4, "conveni": [4, 6, 9, 15, 22, 24, 27], "hash": [4, 9, 27], "through": [4, 5, 18, 19, 23, 24, 27], "reviv": [4, 27], "sort": [4, 7, 14, 21, 24, 27], "ascend": [4, 27], "descend": [4, 27], "non": [4, 20, 27], "beta": 4, "oper": 4, "v1": [4, 11, 16], "gotcha": [4, 5], "catch": 4, "broken": [4, 27], "pipe": [4, 8, 27], "keepal": 4, "greatli": 4, "enter": [4, 18, 27], "made": [4, 16, 17, 24, 27], "filter_oper": [4, 8, 27], "schema_": 4, "__version__": 4, "api_v": 4, "design": [4, 6], "collect": 5, "tip": [5, 25], "deeper": 5, "task": [5, 23, 24, 25, 27], "lot": [5, 6, 7, 17, 25], "plai": [5, 11], "These": [5, 6, 17, 18, 24, 26, 27], "practic": [5, 11], "guidelin": 5, "thread": [5, 27], "customent": 5, "connectionent": 5, "ui": [5, 6, 17, 18, 19, 21, 27], "walk": [5, 23], "begin": 5, "copi": [5, 6, 8, 26], "past": [5, 20], "own": [5, 6, 17, 18, 25, 27], "A": [5, 6, 19, 23, 27], "templat": [5, 17, 23], "menu": [5, 8, 23, 27], "item": [5, 8, 23, 27], "actionmenuitem": [5, 7, 23, 27], "subvers": [5, 23], "svn": [5, 23], "With": [5, 24, 25], "studio": [5, 17, 24, 25, 27], "deep": [5, 24, 27], "dive": 5, "inner": 5, "wai": [5, 10, 13, 21, 24, 26, 27], "schedul": [5, 21, 22, 27], "complex": 5, "beast": 5, "function": [5, 19, 24, 26, 27], "around": [5, 10], "split": [5, 7, 19], "depend": [5, 6, 19, 27], "smart": [5, 24, 25], "cut": [5, 24, 25, 27], "favor": 5, "v7": [5, 18], "remain": [5, 17, 22, 24], "who": [5, 7, 8, 17, 20, 27], "featur": [5, 11, 18, 26, 27], "raw": 5, "tab": [6, 27], "within": [6, 27], "few": 6, "simpli": [6, 9, 15, 21, 27], "describ": [6, 27], "repres": [6, 9, 14, 15, 16, 20, 21, 24, 27], "interact": 6, "sound": 6, "cool": [6, 10], "too": [6, 18, 27], "3": [6, 24, 25, 26, 27], "slightli": 6, "custom": [6, 7, 8, 24], "mani": [6, 24], "fill": 6, "actual": [6, 17, 27], "link_typ": [6, 27], "kei": [6, 7, 8, 9, 10, 11, 13, 15, 17, 20, 24, 27], "filenam": [6, 7, 8, 24], "file_s": 6, "int": [6, 7, 8, 27], "size": [6, 27], "byte": [6, 26, 27], "attachment_link": 6, "open_not": 6, "current": [6, 7, 22, 24, 26, 27], "equal": 6, "clsd": 6, "open_notes_count": 6, "integ": [6, 8, 16, 27], "count": [6, 27], "belong": [6, 7, 9, 17], "attachment_reference_link": 6, "sg_status_list": [6, 9, 11, 15, 24, 25, 27], "short": [6, 27], "tri": [6, 24], "interpret": [6, 25], "altern": [6, 20, 27], "sg_type": 6, "processing_statu": 6, "reflect": 6, "pend": [6, 11, 27], "vari": [6, 22], "content_typ": [6, 17, 27], "jpeg": 6, "western1ful": 6, "jpg": [6, 11, 16, 27], "file_serv": 6, "538": 6, "anoth": [6, 7, 10, 11, 24, 27], "launch": [6, 7, 8], "rvlink": 6, "cinesync": 6, "gun12158": 6, "quicktim": [6, 11, 25], "my_test_movi": 6, "mov": [6, 27], "local_path": [6, 27], "kp": [6, 8], "movi": [6, 8, 16], "test_movie_002": 6, "local_path_linux": [6, 27], "home": [6, 8], "macus": 6, "local_path_mac": [6, 27], "local_path_window": [6, 27], "m": [6, 7, 8], "local_storag": [6, 27], "1": [6, 7, 8, 17, 20, 24, 27], "daili": [6, 11], "directori": [6, 8, 17, 27], "localstorag": 6, "myurl": 6, "appl": 6, "itun": 6, "64": 6, "occasion": [6, 27], "happen": [6, 22, 27], "immedi": [6, 27], "usual": [6, 27], "otherwis": [6, 22, 27], "exactli": [6, 27], "cover": [6, 19], "10": [6, 17, 20, 21, 22, 27], "determin": [6, 27], "associ": [6, 24, 27], "guess": 6, "extens": 6, "overrid": [6, 27], "overridden": [6, 27], "correspond": [6, 9, 11, 15, 18, 21, 27], "linux": 6, "sg_uploaded_movi": [6, 11, 16, 27], "123": [6, 7, 9, 22, 27], "test_movie_001_": 6, "view": [6, 24, 27], "regardless": [6, 22, 27], "whether": [6, 27], "storag": [6, 27], "mandatori": [6, 27], "select": [6, 7, 8], "wish": [6, 10, 26, 27], "simpl": [6, 7, 13, 23, 24, 25, 27], "actionmenu": [7, 8], "sent": [7, 27], "dispatch": 7, "take": [7, 16, 24, 27], "pars": [7, 8], "3253287": 7, "open": [7, 8, 9, 11, 15, 27], "re": [7, 8, 9, 10, 11, 13, 15, 17, 21, 24, 26, 27], "length": [7, 20, 27], "exce": 7, "row": 7, "consol": 7, "stack": 7, "articl": [7, 27], "maximum": [7, 27], "usr": [7, 8, 9, 12, 13, 15, 17], "bin": [7, 8, 9, 12, 13, 15, 17], "env": [7, 8, 9, 12, 13, 15, 17], "form": [7, 27], "mycoolprotocol": 7, "dosomethingcool": 7, "user_id": 7, "24": [7, 27], "user_login": [7, 8, 27], "titl": [7, 15, 24], "20version": 7, "human": 7, "readabl": 7, "state": [7, 27], "translat": 7, "project_nam": [7, 8, 24], "sort_column": 7, "created_at": [7, 24, 27], "col": 7, "5": [7, 17, 20, 24, 25, 27], "selected_id": [7, 8], "sort_direct": 7, "desc": [7, 27], "project_id": [7, 27], "4": [7, 9, 10, 11, 17, 24, 27], "d8592bd6": 7, "fc41": 7, "11e1": 7, "b2c5": 7, "000c297a5f50": 7, "column_display_nam": 7, "artist": [7, 11, 24], "frame": [7, 11, 16, 27], "easi": [7, 11, 22], "mile": 7, "param": [7, 8, 20, 27], "sa": [7, 8], "shotgunact": [7, 8], "sy": [7, 8, 17], "argv": [7, 8], "logger": [7, 8, 24, 27], "logfil": [7, 8], "overkil": 7, "shotgun_act": [7, 8], "shotgunactionexcept": 7, "def": [7, 8], "self": [7, 20, 27], "_init_log": 7, "_parse_url": 7, "blank": 7, "els": [7, 8, 17], "column": [7, 9, 10, 11, 13, 17, 24], "len": [7, 8], "readi": 7, "ids_filt": 7, "_convert_ids_to_filt": 7, "sid": 7, "selected_ids_filt": [7, 8], "legaci": 7, "try": [7, 8, 21, 24, 27], "basicconfig": [7, 8, 24], "debug": [7, 8, 9, 12, 13, 14, 15, 24], "asctim": [7, 8], "levelnam": [7, 8], "datefmt": [7, 8], "y": [7, 8], "b": [7, 8], "d": [7, 8, 24, 27], "h": [7, 8], "filemod": [7, 8], "w": [7, 8], "ioerror": [7, 8], "e": [7, 8, 27], "unabl": [7, 8, 17], "receiv": [7, 27], "extract": [7, 8], "p": 7, "arg": 7, "map": [7, 11, 24], "urllib": [7, 27], "unquot": 7, "append": [7, 8, 27], "convert": [7, 27], "__name__": [7, 8, 9, 12, 13, 15, 17], "__main__": [7, 8, 9, 12, 13, 15, 17], "fire": [7, 8], "indexerror": [7, 8], "finish": [7, 21], "demonstr": [8, 24], "intend": 8, "conjunct": [8, 27], "dicuss": 8, "version_packag": 8, "meant": 8, "package4cli": 8, "launchm": 8, "cookbook": [8, 25], "ami_handl": 8, "purpos": [8, 14, 27], "invok": [8, 17, 27], "minim": 8, "sg_qt": 8, "Then": [8, 24, 27], "want": [8, 9, 10, 11, 15, 16, 17, 18, 21, 24, 26, 27], "put": [8, 24], "ran": 8, "demo_project_2010": 8, "04": [8, 21, 27], "29": [8, 24], "172210_kp": 8, "tar": 8, "gz": 8, "shotgun_connect": 8, "r": 8, "packagefilesforcli": 8, "subprocess": 8, "datetim": [8, 27], "pprint": [8, 9, 12, 13, 14, 15], "shotgun_conf": 8, "your_script_name_her": 8, "your_script_key_her": 8, "temporari": 8, "file_dir": 8, "tmp": [8, 27], "command": [8, 17, 26], "czf": 8, "backup_www": 8, "var": [8, 27], "www": 8, "compress_cmd": 8, "shotgunexcept": 8, "init_log": 8, "extract_attachment_id": 8, "attachment_id": [8, 27], "rsplit": 8, "invalid": [8, 27], "download_attachment_to_disk": 8, "destination_filenam": 8, "compress_fil": 8, "lstrip": 8, "squish_m": 8, "output": [8, 9, 12, 13, 15, 24, 25, 27], "popen": 8, "shell": [8, 17], "stdout": [8, 24], "remove_downloaded_fil": 8, "remove_m": 8, "rm": 8, "copy_fil": 8, "destination_directori": 8, "copy_me_arg": 8, "mv": 8, "stderr": 8, "success": [8, 20, 27], "recover": 8, "returncod": 8, "oserror": 8, "file_field": 8, "destination_dir": 8, "ss": 8, "zip": 8, "destin": 8, "No": [8, 12, 27], "skippinsa": 8, "path_to_fil": 8, "sub": [8, 27], "_": [8, 14], "nice": [8, 13, 17, 21], "dest_filenam": 8, "todai": [8, 27], "strftime": 8, "convert_datetimes_to_utc": [8, 27], "convert_tz": 8, "dev": 8, "print": [8, 9, 13, 14, 17], "nversion": 8, "100_010": [9, 10, 11, 27], "beauti": [9, 15, 16], "fuzzi": [9, 15], "bunni": [9, 11, 15, 24, 27], "ip": [9, 15, 24, 25, 27], "gunsling": [9, 10, 11], "40435": [9, 12, 13, 15, 27], "well": [9, 10, 11, 13, 15, 16, 24, 27], "server_path": [9, 12, 13, 14, 15, 17], "27b65d7063f46b82e670fe807bd2b6f3fd1676c1": [9, 12, 13, 14, 15], "background": 10, "go": [10, 13, 16, 17, 20, 21, 24], "assum": [10, 13, 16, 17, 20, 22], "3d": 10, "tasktempl": 10, "dark": 10, "wick": 10, "ninja": 10, "task_templ": 10, "might": [10, 11, 24], "previou": [10, 11, 20, 24], "010_010": 10, "2345": 10, "rest": 10, "handi": 10, "3253": 10, "3254": 10, "3255": 10, "3256": 10, "3257": 10, "sweet": 11, "again": [11, 21, 27], "anim": [11, 16, 21, 27], "stage": 11, "particular": [11, 27], "possibl": [11, 16, 20, 26, 27], "highli": [11, 17, 27], "whenev": [11, 24, 27], "100_010_anim_v1": 11, "sg_path_to_fram": 11, "gun": [11, 16], "s100": [11, 16], "010": [11, 16], "100_010_animv1_jack": 11, "rev": [11, 17, 27], "sg_task": [11, 27], "165": 11, "next": [11, 21, 27], "peopl": 11, "ooh": 11, "aaah": 11, "time": [11, 18, 24, 27], "masterpiec": 11, "did": 11, "jschmoe": 11, "214": [11, 16], "transcod": [11, 16], "host": [11, 16], "pdf": 11, "queu": 11, "playabl": 11, "overlai": 11, "player": 11, "appear": 11, "pretti": [12, 13, 25], "straight": 12, "forward": [12, 27], "extran": 12, "step": [12, 21, 27], "successfulli": 12, "right": [13, 17, 27], "insight": 13, "trust": [13, 27], "prettyprint": 13, "standard": [13, 24], "realli": [13, 27], "tool": [13, 24, 25, 27], "easier": 13, "show": [14, 22, 27], "establish": [14, 15, 27], "Be": 14, "symbol": 14, "dir": 14, "startswith": 14, "further": [14, 20, 27], "alreadi": [16, 17, 27], "machin": 16, "100_010_animv1": 16, "manual": [16, 21], "care": 16, "resiz": 16, "wrong": [16, 22], "thrown": 16, "special": [16, 17, 18, 19, 27], "beyond": [16, 27], "scope": 16, "part": [17, 24, 27], "revis": [17, 26, 27], "tmpl": 17, "folder": 17, "serv": 17, "real": [17, 18], "execut": [17, 27], "topic": [17, 19, 25], "reilli": 17, "onlin": [17, 27], "guid": 17, "6": [17, 25, 27], "unix": 17, "last": [17, 20, 21, 27], "shotgun_api_script": 17, "heavi": 17, "lift": 17, "thru": 17, "queue": 17, "sh": 17, "export": 17, "svnlook": 17, "absolut": 17, "leav": [17, 25, 27], "respect": [17, 20], "7": [17, 26, 27], "subcommand": 17, "everyth": [17, 27], "pre": 17, "written": 17, "popul": 17, "along": [17, 27], "trac": 17, "interfac": 17, "clickabl": 17, "shotgun_api3_preview": 17, "script_us": 17, "3333333333333333333333333333333333333333": 17, "revisions_path": 17, "serveraddress": 17, "changeset": 17, "27": [17, 22, 27], "revision_cod": 17, "revision_url": 17, "http_url": 17, "created_bi": [17, 24, 27], "14": [17, 20, 21, 27], "15": [17, 24, 27], "16": [17, 27], "17": [17, 27], "adjust": [17, 27], "18": [17, 20, 22, 24, 27], "Of": 17, "cours": [17, 27], "insert": 17, "28": [17, 21, 24, 27], "31": [17, 24, 27], "grab": 17, "left": 17, "34": 17, "37": [17, 27], "46": 17, "40": 17, "48": 17, "meta": [17, 27], "gather": 17, "sens": [17, 27], "41": 17, "deserv": 17, "notic": [17, 21], "three": [17, 27], "doubt": 17, "doubl": 17, "been": [17, 21, 27], "root": [17, 27], "consid": [18, 20, 26, 27], "smart_cut_field": 18, "primarili": 18, "calcul": [18, 22, 24, 27], "scratch": 18, "proven": 18, "magic": 18, "smart_cut_dur": [18, 24], "smart_cut_in": [18, 24], "smart_cut_out": [18, 24], "smart_cut_summary_displai": [18, 24], "smart_cut_duration_displai": 18, "smart_head_dur": [18, 24], "smart_head_in": [18, 24], "smart_head_out": [18, 24], "smart_tail_dur": [18, 24], "smart_tail_in": [18, 24], "smart_tail_out": [18, 24], "smart_working_dur": [18, 24], "summari": [18, 27], "cut_dur": 18, "cut_in": 18, "cut_out": 18, "head_dur": 18, "head_in": 18, "head_out": 18, "tail_dur": 18, "tail_in": 18, "tail_out": 18, "manipul": 19, "rule": [19, 20, 27], "downstream": 19, "resolv": 19, "pin": 19, "dependency_viol": 19, "overview": [19, 26], "influenc": 19, "compli": 20, "understand": [20, 23], "yyyi": [20, 27], "mm": [20, 27], "dd": [20, 27], "2012": 20, "11": [20, 27], "19": [20, 24], "eldest": 20, "newest": 20, "least": [20, 27], "dai": [20, 21, 22, 27], "workdai": 20, "weekend": 20, "holidai": 20, "2088": 20, "traceback": [20, 21], "stdin": 20, "line": [20, 26], "600": [20, 22], "_call_rpc": 20, "1239": 20, "_response_error": 20, "1435": 20, "fault": [20, 21, 27], "crud": [20, 25], "rb": 20, "segment": 20, "calendar": 20, "awai": [20, 27], "preserv": 20, "recalcul": [20, 21, 27], "effect": 20, "suppli": [20, 27], "infer": 20, "earliest": [20, 27], "prior": 20, "scenario": 20, "ones": [20, 27], "shorten": 20, "until": [20, 21, 27], "met": 20, "throughout": 20, "23": [20, 27], "3600": [20, 22], "2400": [20, 22], "4200": [20, 22], "21": [20, 27], "1800": 20, "5th": 20, "13": 20, "coupl": [21, 24, 27], "layout": 21, "65": [21, 27], "start_dat": [21, 22, 27], "2010": 21, "due_dat": [21, 22, 27], "05": [21, 22, 27], "860": [21, 27], "bunny_010_0010": [21, 27], "556": 21, "anm": 21, "557": 21, "upstream_task": 21, "downstream_task": 21, "four": 21, "choos": [21, 27], "upstream": 21, "aka": [21, 27], "dependency_typ": 21, "dependent_task_id": 21, "task_id": 21, "accordingli": 21, "taskdepend": 21, "72": [21, 27], "75": 21, "128": 21, "fx": [21, 27], "558": [21, 27], "focu": 21, "simplic": 21, "satisfi": 21, "But": [21, 24, 27], "succe": [21, 27], "mean": [21, 22, 24, 27], "travel": 21, "great": 21, "annoi": 21, "reset": [21, 27], "had": 21, "rememb": [21, 24], "succeed": [21, 27], "xmlrpc": 21, "103": 21, "field_nam": [21, 27], "durat": 22, "constant": [22, 27], "mileston": 22, "assigne": 22, "incorrectli": 22, "lost": 22, "conflict": 22, "togeth": [22, 24, 27], "configur": [22, 27], "univers": 22, "behavior": 22, "2011": 22, "25": [22, 27], "30": [22, 24, 27], "1200": 22, "01": [22, 27], "overwritten": 22, "behav": 22, "tutori": [23, 26], "api3": [24, 25], "predict": 24, "power": [24, 25, 27], "howev": [24, 26, 27], "crop": 24, "over": [24, 27], "question": 24, "exhibit": 24, "safe": 24, "redbal": 24, "camelcas": 24, "deliveri": 24, "referenc": 24, "customentity01": 24, "widget": 24, "tabl": [24, 27], "dump": 24, "studio_glob": 24, "entity_type_map": 24, "foobar": 24, "customentity02": 24, "baz": 24, "customnonprojectentity01": 24, "simpler": 24, "could": 24, "entity_widget": 24, "entity_foobar": 24, "entity_baz": 24, "worri": 24, "0123456789abcdef0123456789abcdef0123456": 24, "sg_shot": 24, "behind": 24, "scene": 24, "relationship": 24, "pai": 24, "attent": 24, "playlist": [24, 27], "sg_sort_ord": 24, "resid": 24, "playlistversionconnect": 24, "isn": [24, 27], "_instance_": 24, "shtogun": 24, "director": 24, "review": 24, "sai": 24, "asc": [24, 27], "bunny_020_0010_comp_v003": 24, "880": 24, "bunny_020_0010": 24, "bunny_020_0020_comp_v003": 24, "881": 24, "bunny_020_0020": 24, "bunny_020_0030_comp_v003": 24, "882": 24, "bunny_020_0030": 24, "33": [24, 27], "bunny_020_0040_comp_v003": 24, "883": 24, "bunny_020_0040": 24, "32": [24, 27], "bunny_020_0050_comp_v003": 24, "884": 24, "bunny_020_0050": 24, "dot": [24, 27], "notat": [24, 27], "fieldnam": 24, "entitytyp": [24, 27], "That": 24, "interest": 24, "f": [24, 27], "riend": 24, "firstnam": 24, "lastnam": 24, "smart_duration_summary_displai": 24, "aren": 24, "side": [24, 27], "step_0": 24, "step_13": 24, "therefor": [24, 27], "creation": [24, 27], "migrat": 24, "tact": 24, "updated_bi": 24, "updated_at": 24, "streamhandl": 24, "suppress": 24, "sg_log": 24, "getlogg": 24, "setlevel": 24, "reduc": [24, 27], "round": 24, "trip": 24, "significantli": 24, "bubbl": 24, "hop": 24, "poll": 24, "buck": 24, "sg_project": 24, "chain": 24, "sequenc": [24, 25, 27], "sg_sequenc": [24, 25, 27], "concern": [24, 27], "desir": 24, "fptr": [25, 27], "known": 25, "quickli": [25, 27], "prove": 25, "autom": 25, "kept": 25, "low": 25, "decis": 25, "enough": 25, "wrapper": 25, "top": [25, 27], "remot": 25, "bunny_020_0170": 25, "896": 25, "bunny_020": 25, "bunny_020_0200": 25, "899": 25, "bunny_030_0080": 25, "907": 25, "bunny_030": 25, "minimum": [25, 27], "pythonpath": 25, "attribut": 25, "event": 25, "index": 25, "continu": 26, "clone": 26, "filesystem": 26, "somewher": 26, "visit": 26, "introduct": 26, "stabl": 26, "26": 26, "setuptool": 26, "complain": 26, "fulli": 26, "ship": 26, "compil": 26, "off": 27, "hostnam": 27, "sometim": 27, "enforc": 27, "base_url": 27, "http_proxi": 27, "sudo_as_login": 27, "auth_token": 27, "trail": 27, "slash": 27, "shotgunstudio": 27, "neither": 27, "nor": 27, "bool": 27, "utc": 27, "111": 27, "222": 27, "333": 27, "444": 27, "8080": 27, "192": 27, "168": 27, "8888": 27, "joe": 27, "soon": 27, "capabl": 27, "confirm": 27, "mostli": 27, "corpor": 27, "preced": 27, "whose": 27, "sudo_actual_us": 27, "regular": 27, "live": 27, "missingtwofactorauthenticationfault": 27, "urllib2": 27, "issue1424152": 27, "fine": 27, "patch": 27, "merg": 27, "hg": 27, "cpython": 27, "0f57b30a152f": 27, "hack": 27, "ymmv": 27, "propos": 27, "report": 27, "major": 27, "finer": 27, "grain": 27, "demand": 27, "user_password": 27, "account": 27, "richard": 27, "hendrik": 27, "One": 27, "dd638be7d07c39fa73d935a775558a50": 27, "get_auth_cookie_handl": 27, "cooki": 27, "my_tool": 27, "openssl": 27, "2d": 27, "jul": 27, "5a1d49b0": 27, "0c69": 27, "11e0": 27, "a24c": 27, "003048d17544": 27, "uuid": 27, "full_vers": 27, "user_authentication_method": 27, "arrai": 27, "hotfix": 27, "Will": 27, "ldap": 27, "compani": 27, "saml2": 27, "unsupport": 27, "user_subscriptions_read": 27, "humanuserid": 27, "user_subscriptions_cr": 27, "succede": 27, "161": 27, "109": 27, "001_100": 27, "2557": 27, "pi": 27, "piper": 27, "001": 27, "filmstrip_imag": 27, "retired_onli": 27, "include_archived_project": 27, "100_foo": 27, "sg_asset_typ": 27, "sequence_id": 27, "gopher": 27, "cow": 27, "bird_1": 27, "35": 27, "bird_2": 27, "36": 27, "bird_3": 27, "raccoon": 27, "45": 27, "wet": 27, "149": 27, "drill": 27, "pipeline_step_id": 27, "scene_010_anim_v001": 27, "42": 27, "scene_010_anim_v002": 27, "134": 27, "bird_v001": 27, "137": 27, "birdaltblue_v002": 27, "236": 27, "foo": 27, "bar": 27, "AND": 27, "OR": 27, "boolean": 27, "retir": 27, "preset_nam": 27, "optional_param1": 27, "optional_value1": 27, "ANDed": 27, "shortcut": 27, "entity_id": 27, "40438": 27, "40441": 27, "shots_asset_is_in": 27, "55": 27, "sg_status_": 27, "100_040": 27, "100_070": 27, "hidden": 27, "panel": 27, "destruct": 27, "place": 27, "trash": 27, "brought": 27, "life": 27, "g": 27, "sever": 27, "transact": 27, "ex": 27, "bunch": 27, "batch_data": 27, "rang": 27, "100": 27, "shot_": 27, "04d": 27, "request_typ": 27, "shot_0001": 27, "3624": 27, "shot_0099": 27, "3722": 27, "3723": 27, "summary_field": 27, "group": 27, "total": 27, "exact": 27, "group_nam": 27, "group_valu": 27, "matt": 27, "paint": 27, "prop": 27, "vehicl": 27, "puppya": 27, "922": 27, "is_not": 27, "na": 27, "2013": 27, "shot_010": 27, "shot_020": 27, "shot_030": 27, "highlight": 27, "truncat": 27, "breviti": 27, "comp": 27, "repeat": 27, "record_count": 27, "sum": 27, "averag": 27, "percentag": 27, "status_percentag": 27, "uncheck": 27, "ten": 27, "hundr": 27, "thousand": 27, "tensofthousand": 27, "hundredsofthousand": 27, "million": 27, "week": 27, "month": 27, "quarter": 27, "year": 27, "clustered_d": 27, "onedai": 27, "fivedai": 27, "firstlett": 27, "note_id": 27, "entity_field": 27, "grade": 27, "38": 27, "john": 27, "pink": 27, "6013": 27, "159": 27, "54": 27, "51": 27, "david": 27, "blue": 27, "chronolog": 27, "addressings_to": 27, "this_fil": 27, "input": 27, "phrase": 27, "long": 27, "subset": 27, "constrain": 27, "734": 27, "fin": 27, "term": 27, "present": 27, "update_project_last_access": 27, "66": 27, "43": 27, "authenitc": 27, "work_schedule_read": 27, "end_dat": 27, "inclus": 27, "studio_work_week": 27, "studio_except": 27, "wide": 27, "project_work_week": 27, "project_except": 27, "user_work_week": 27, "user_except": 27, "22": 27, "christma": 27, "ev": 27, "work_schedule_upd": 27, "recalculate_field": 27, "exclus": 27, "yyi": 27, "pref": 27, "pref_nam": 27, "mov_fil": 27, "ne2": 27, "100_110": 27, "mlk": 27, "02b": 27, "423": 27, "sg_latest_quicktim": 27, "comma": 27, "shotgunerror": 27, "kwarg": 27, "retain": 27, "eat": 27, "space": 27, "unset": 27, "png": 27, "gif": 27, "tif": 27, "tiff": 27, "bmp": 27, "exr": 27, "dpx": 27, "tga": 27, "wrap": 27, "keyword": 27, "horizont": 27, "240": 27, "pixel": 27, "whole": 27, "width": 27, "height": 27, "anyth": 27, "aspect": 27, "ratio": 27, "poster": 27, "hover": 27, "cursor": 27, "posit": 27, "scrub": 27, "On": 27, "mouseout": 27, "02b_filmstrip": 27, "87": 27, "7115": 27, "local_file_path": 27, "100b_scene_output_v032": 27, "200": 27, "22150": 27, "get_attachment_download_url": 27, "mix": 27, "construct": 27, "silent": 27, "thumbnail_path": 27, "source_ent": 27, "v4": 27, "static": 27, "placehold": 27, "thumb": 27, "456": 27, "4271": 27, "789": 27, "improperli": 27, "shotgunthumbnailnotreadi": 27, "min_id": 27, "max_id": 27, "earliest_update_id": 27, "50": 27, "latest_update_id": 27, "79": 27, "6641": 27, "smith": 27, "6004": 27, "new_ent": 27, "primary_ent": 27, "review_turntable_v2": 27, "update_typ": 27, "travers": 27, "greater": 27, "lesser": 27, "cach": 27, "noth": 27, "2050": 27, "bertram": 27, "gilfoyl": 27, "dinesh": 27, "chugtai": 27, "57": 27, "versionad": 27, "1234": 27, "person": 27, "introspect": 27, "omit": 27, "appwelcomeuserconnect": 27, "welcom": 27, "assetassetconnect": 27, "taken": 27, "consider": 27, "unlik": 27, "pump": 27, "schema_field_cr": 27, "data_typ": 27, "default_valu": 27, "summary_default": 27, "valid_typ": 27, "uniqu": 27, "definit": 27, "exclud": 27, "sg_temp_field": 27, "comput": 27, "_1": 27, "breakdown": 27, "sg_complex": 27, "upon": 27, "although": 27, "treat": 27, "sg_test_numb": 27, "impact": 27, "schema_field_delet": 27, "client_approv": 27, "approv": 27, "with_traceback": 27, "tb": 27, "__traceback__": 27, "shotgunfiledownloaderror": 27, "detect": 27, "field_valu": 27, "less_than": 27, "greater_than": 27, "not_contain": 27, "starts_with": 27, "ends_with": 27, "not_between": 27, "in_last": 27, "bracket": 27, "liter": 27, "in_next": 27, "type_i": 27, "type_is_not": 27, "in_calendar_dai": 27, "offset": 27, "tomorrow": 27, "yesterdai": 27, "in_calendar_week": 27, "in_calendar_month": 27, "name_contain": 27, "name_not_contain": 27, "name_starts_with": 27, "name_ends_with": 27, "not_in_last": 27, "not_in_next": 27, "in_calendar_year": 27, "name_i": 27, "presenc": 27, "lack": 27, "name_id": 27, "costli": 27, "difficult": 27, "craft": 27, "tradit": 27, "alongsid": 27, "abc": 27, "latest_bi": 27, "entities_created_at": 27, "cutitem": 27, "cut_shot_vers": 27, "cut_id": 27, "bellow": 27, "revision_numb": 27, "highest": 27, "typic": 27, "deal": 27, "by_pipeline_step_number_and_entities_created_at": 27, "list_ord": 27, "isol": 27, "farthest": 27, "version_numb": 27, "255": 27, "pipeline_step": 27, "inherit": 27, "9999999999999": 27, "99": 27, "1970": 27, "2147483648": 27, "2147483647": 27, "999999999": 27, "999999": 27, "ff": 27, "foot": 27, "film": 27, "feet": 27, "millisecond": 27, "1000": 27, "second": 27, "domain": 27, "thumbnail_pend": 27, "icon": 27, "final": 27, "upcom": 27, "captur": 27, "particularlli": 27, "daemon": 27, "plug": 27, "ins": 27, "watch": 27, "certain": 27, "application_entitytype_act": 27, "portion": 27, "decid": 27, "pattern": 27, "shotgun_entitytype_new": 27, "shotgun_task_new": 27, "shotgun_entitytype_chang": 27, "shotgun_humanuser_chang": 27, "shotgun_entitytype_retir": 27, "shotgun_ticket_retir": 27, "shotgun_entitytype_reviv": 27, "shotgun_customentity03_reviv": 27, "_some_": 27, "shotgun_attachment_view": 27, "shotgun_reading_chang": 27, "mark": 27, "unread": 27, "jane": 27, "shotgun_user_login": 27, "shotgun_user_logout": 27, "themselv": 27, "devis": 27, "thought": 27, "defeat": 27, "databas": 27, "inevit": 27, "degrad": 27, "volum": 27, "norm": 27, "reach": 27, "expereinc": 27, "high": 27, "suffer": 27, "team": 27, "sslhandshakeerror": 27, "certificate_verify_fail": 27, "wait": 27, "3000": 27, "site_nam": 27, "interv": 27, "rpc_attempt_inter": 27, "experienc": 27, "tzinfo": 27, "9999": 27, "game": 27, "transform": 27, "999": 27, "offer": 27, "languag": 27, "japanes": 27, "sg_vendor_group": 27, "vendor": 27, "xe3": 27, "x83": 27, "x99": 27, "xb3": 27, "x80": 27, "xbc": 27, "x82": 27, "xb0": 27, "xab": 27, "x97": 27, "ensure_text": 27}, "objects": {"shotgun_api3": [[27, 0, 1, "", "AuthenticationFault"], [27, 0, 1, "", "Fault"], [27, 0, 1, "", "MissingTwoFactorAuthenticationFault"], [27, 0, 1, "", "ShotgunError"], [27, 0, 1, "", "ShotgunFileDownloadError"], [27, 2, 0, "-", "shotgun"]], "shotgun_api3.AuthenticationFault": [[27, 1, 1, "", "with_traceback"]], "shotgun_api3.Fault": [[27, 1, 1, "", "with_traceback"]], "shotgun_api3.MissingTwoFactorAuthenticationFault": [[27, 1, 1, "", "with_traceback"]], "shotgun_api3.ShotgunError": [[27, 1, 1, "", "with_traceback"]], "shotgun_api3.ShotgunFileDownloadError": [[27, 1, 1, "", "with_traceback"]], "shotgun_api3.shotgun": [[27, 3, 1, "", "LOG"], [27, 3, 1, "", "NO_SSL_VALIDATION"], [27, 0, 1, "", "Shotgun"]], "shotgun_api3.shotgun.Shotgun": [[27, 1, 1, "", "activity_stream_read"], [27, 1, 1, "", "add_user_agent"], [27, 1, 1, "", "authenticate_human_user"], [27, 1, 1, "", "batch"], [27, 1, 1, "", "close"], [27, 1, 1, "", "connect"], [27, 1, 1, "", "create"], [27, 1, 1, "", "delete"], [27, 1, 1, "", "download_attachment"], [27, 1, 1, "", "entity_types"], [27, 1, 1, "", "find"], [27, 1, 1, "", "find_one"], [27, 1, 1, "", "follow"], [27, 1, 1, "", "followers"], [27, 1, 1, "", "following"], [27, 1, 1, "", "get_attachment_download_url"], [27, 1, 1, "", "get_auth_cookie_handler"], [27, 1, 1, "", "get_session_token"], [27, 1, 1, "", "info"], [27, 1, 1, "", "note_thread_read"], [27, 1, 1, "", "preferences_read"], [27, 1, 1, "", "reset_user_agent"], [27, 1, 1, "", "revive"], [27, 1, 1, "", "schema"], [27, 1, 1, "", "schema_entity_read"], [27, 1, 1, "", "schema_field_create"], [27, 1, 1, "", "schema_field_delete"], [27, 1, 1, "", "schema_field_read"], [27, 1, 1, "", "schema_field_update"], [27, 1, 1, "", "schema_read"], [27, 1, 1, "", "set_session_uuid"], [27, 1, 1, "", "share_thumbnail"], [27, 1, 1, "", "summarize"], [27, 1, 1, "", "text_search"], [27, 1, 1, "", "unfollow"], [27, 1, 1, "", "update"], [27, 1, 1, "", "update_project_last_accessed"], [27, 1, 1, "", "upload"], [27, 1, 1, "", "upload_filmstrip_thumbnail"], [27, 1, 1, "", "upload_thumbnail"], [27, 1, 1, "", "user_subscriptions_create"], [27, 1, 1, "", "user_subscriptions_read"], [27, 1, 1, "", "work_schedule_read"], [27, 1, 1, "", "work_schedule_update"]]}, "objtypes": {"0": "py:class", "1": "py:method", "2": "py:module", "3": "py:data"}, "objnames": {"0": ["py", "class", "Python class"], "1": ["py", "method", "Python method"], "2": ["py", "module", "Python module"], "3": ["py", "data", "Python data"]}, "titleterms": {"advanc": [0, 23], "topic": 0, "ironpython": 1, "packag": [2, 8], "an": [2, 8], "applic": [2, 3], "py2app": 2, "py2ex": 2, "http": 2, "valid": [2, 27], "cacert": 2, "txt": [2, 26], "authent": [3, 27], "user": [3, 25], "base": [3, 27], "script": [3, 17], "ad": 3, "why": 3, "have": 3, "differ": 3, "kei": 3, "event": [3, 27], "log": [3, 24], "would": 3, "you": 3, "want": 3, "turn": 3, "off": 3, "permiss": 3, "flow": [4, 14, 17, 22, 24, 25], "product": [4, 14, 17, 22, 24, 25], "track": [4, 14, 17, 22, 24, 25], "python": [4, 25], "api": [4, 5, 14, 17, 24, 25, 27], "changelog": 4, "v3": 4, "8": 4, "3": 4, "2025": 4, "mai": 4, "22": 4, "2": 4, "mar": 4, "11": 4, "1": 4, "feb": 4, "25": 4, "0": 4, "7": 4, "2024": 4, "dec": 4, "9": 4, "6": 4, "aug": 4, "13": 4, "jun": 4, "5": 4, "apr": 4, "26": 4, "4": 4, "jan": 4, "29": 4, "2023": 4, "sep": 4, "2022": 4, "june": 4, "2021": 4, "decemb": 4, "septemb": 4, "27": 4, "juli": 4, "12": 4, "2020": 4, "nov": 4, "24": 4, "21": 4, "2019": 4, "oct": 4, "sept": 4, "23": 4, "17": 4, "august": 4, "41": 4, "28": 4, "40": 4, "march": 4, "39": 4, "februari": 4, "20": 4, "38": 4, "37": 4, "2018": 4, "19": 4, "36": 4, "april": 4, "35": 4, "2017": 4, "34": 4, "18": 4, "33": 4, "32": 4, "2016": 4, "31": 4, "30": 4, "08": 4, "2015": 4, "10": 4, "2014": 4, "jul": 4, "16": 4, "15": 4, "14": 4, "2013": 4, "2012": 4, "05": 4, "beta2": 4, "beta1": 4, "2011": 4, "04": 4, "2010": 4, "0b8": 4, "0b7": 4, "2009": 4, "0b6": 4, "0b5": 4, "0b4": 4, "0b3": 4, "cookbook": 5, "detail": 6, "about": 6, "work": [6, 19, 27], "With": [6, 19, 27], "file": [6, 27], "default": 6, "structur": [6, 27], "type": [6, 21, 27], "this_fil": 6, "creat": [6, 9, 10, 11, 14, 21], "attach": 6, "web": 6, "link": [6, 11, 27], "upload": [6, 11, 16], "local": [6, 27], "updat": [6, 15, 21, 22], "delet": [6, 12], "requir": [6, 26], "valu": 6, "read": [6, 21, 27], "field": [6, 18, 21, 24, 27], "un": 6, "set": [6, 20, 25], "handl": 7, "action": 7, "menu": 7, "item": 7, "call": [7, 9, 12, 15, 17], "get": [7, 17], "v": 7, "post": [7, 17], "us": [8, 16, 27], "actionmenuitem": 8, "version": [8, 11, 16, 26], "client": 8, "A": [9, 12, 15, 21, 26], "shot": [9, 10, 11, 12, 13, 15, 24], "build": [9, 13, 15], "data": [9, 15, 27], "The": [9, 10, 12, 13, 15], "complet": [9, 12, 13, 15], "exampl": [9, 12, 13, 15, 20, 22, 23, 27], "task": [10, 11, 19, 20, 21, 22], "templat": 10, "find": [10, 11, 13], "result": [10, 12, 13, 15], "movi": 11, "review": 11, "screen": 11, "room": 11, "queri": [13, 21, 24], "see": 13, "instanc": 14, "thumbnail": 16, "imag": [16, 27], "upload_thumbnail": 16, "subvers": 17, "svn": 17, "integr": 17, "commit": 17, "hook": 17, "explan": 17, "select": 17, "line": 17, "troubleshoot": 17, "my": 17, "i": [17, 21], "simpli": 17, "run": 17, "can": 17, "manual": 17, "ar": 17, "trigger": [17, 27], "smart": 18, "cut": 18, "raw": 18, "split": 20, "overview": [20, 25], "how": [20, 22], "do": 20, "influenc": 20, "date": [20, 21, 22, 27], "And": 20, "start_dat": 20, "due_dat": 20, "durat": [20, 27], "being": 20, "ignor": 20, "move": 20, "longer": 20, "shorter": 20, "anoth": 20, "gap": 20, "depend": 21, "end": 21, "downstream": 21, "violat": 21, "push": 21, "up": [21, 25], "start": 21, "resolv": 21, "pin": 21, "dependency_viol": 21, "onli": [21, 27], "think": 22, "gener": 22, "rule": 22, "basic": [23, 27], "usag": 24, "tip": 24, "import": 24, "multi": 24, "thread": 24, "entiti": [24, 27], "customent": 24, "connectionent": 24, "ui": 24, "avail": [24, 27], "via": 24, "humanus": 24, "pipelin": 24, "step": 24, "summari": 24, "audit": 24, "messag": 24, "from": [24, 26], "optim": 24, "combin": 24, "relat": 24, "librari": 25, "video": 25, "your": 25, "environ": [25, 27], "guid": 25, "indic": 25, "tabl": 25, "instal": 26, "minimum": 26, "pythonpath": 26, "pip": 26, "master": 26, "branch": 26, "github": 26, "specif": 26, "setup": 26, "py": 26, "refer": 27, "shotgun": 27, "modul": 27, "attribut": 27, "method": 27, "connect": 27, "subscript": 27, "manag": 27, "crud": 27, "activ": 27, "stream": 27, "schema": 27, "except": 27, "filter": 27, "syntax": 27, "complex": 27, "oper": 27, "argument": 27, "By": 27, "addit": 27, "preset": 27, "address": 27, "checkbox": 27, "color": 27, "currenc": 27, "date_tim": 27, "float": 27, "footag": 27, "list": 27, "multi_ent": 27, "number": 27, "password": 27, "percent": 27, "serializ": 27, "status_list": 27, "system_task_typ": 27, "deprec": 27, "tag_list": 27, "text": 27, "timecod": 27, "url": 27, "interpret": 27, "string": 27, "standard": 27, "custom": 27, "perform": 27, "variabl": 27, "shotgun_api_cacert": 27, "shotgun_api_retry_interv": 27, "shotgun_api_disable_entity_optim": 27}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.viewcode": 1, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"Advanced Topics": [[0, "advanced-topics"]], "IronPython": [[1, "ironpython"]], "Packaging an application with py2app (or py2exe)": [[2, "packaging-an-application-with-py2app-or-py2exe"]], "HTTPS Validation and cacerts.txt": [[2, "https-validation-and-cacerts-txt"]], "Authentication": [[3, "authentication"]], "User-based Authentication": [[3, "user-based-authentication"]], "Script-based Authentication": [[3, "script-based-authentication"]], "Adding Script Users": [[3, "adding-script-users"]], "Why have different application keys for different scripts?": [[3, "why-have-different-application-keys-for-different-scripts"]], "Event Logging": [[3, "event-logging"]], "Why would you want to turn event logging off for scripts?": [[3, "why-would-you-want-to-turn-event-logging-off-for-scripts"]], "Permissions": [[3, "permissions"]], "Flow Production Tracking Python API Changelog": [[4, "flow-production-tracking-python-api-changelog"]], "v3.8.3 (2025 May 22)": [[4, "v3-8-3-2025-may-22"]], "v3.8.2 (2025 Mar 11)": [[4, "v3-8-2-2025-mar-11"]], "v3.8.1 (2025 Feb 25)": [[4, "v3-8-1-2025-feb-25"]], "v3.8.0 (2025 Feb 7)": [[4, "v3-8-0-2025-feb-7"]], "v3.7.0 (2024 Dec 9)": [[4, "v3-7-0-2024-dec-9"]], "v3.6.2 (2024 Aug 13)": [[4, "v3-6-2-2024-aug-13"]], "v3.6.1 (2024 Jun 6)": [[4, "v3-6-1-2024-jun-6"]], "v3.6.0 (2024 May 1)": [[4, "v3-6-0-2024-may-1"]], "v3.5.1 (2024 Apr 3)": [[4, "v3-5-1-2024-apr-3"]], "v3.5.0 (2024 Mar 26)": [[4, "v3-5-0-2024-mar-26"]], "v3.4.2 (2024 Feb 6)": [[4, "v3-4-2-2024-feb-6"]], "v3.4.1 (2024 Jan 29)": [[4, "v3-4-1-2024-jan-29"]], "v3.4.0 (2023 Sep 22)": [[4, "v3-4-0-2023-sep-22"]], "v3.3.6 (2023 Aug 29)": [[4, "v3-3-6-2023-aug-29"]], "v3.3.5 (2023 Jan 5)": [[4, "v3-3-5-2023-jan-5"]], "v3.3.4 (2022 June 9)": [[4, "v3-3-4-2022-june-9"]], "v3.3.3 (2021 December 1)": [[4, "v3-3-3-2021-december-1"]], "v3.3.2 (2021 September 27)": [[4, "v3-3-2-2021-september-27"]], "v3.3.1 (2021 July 12)": [[4, "v3-3-1-2021-july-12"]], "v3.3.0 (2021 Jun 7)": [[4, "v3-3-0-2021-jun-7"]], "v3.2.6 (2020 Nov 24)": [[4, "v3-2-6-2020-nov-24"]], "v3.2.4 (2020 May 25)": [[4, "v3-2-4-2020-may-25"]], "v3.2.3 (2020 Apr 21)": [[4, "v3-2-3-2020-apr-21"]], "v3.2.2 (2019 Dec 11)": [[4, "v3-2-2-2019-dec-11"]], "v3.2.1 (2019 Oct 29)": [[4, "v3-2-1-2019-oct-29"]], "v3.2.0 (2019 Sept 23)": [[4, "v3-2-0-2019-sept-23"]], "v3.1.2 (2019 Sept 17)": [[4, "v3-1-2-2019-sept-17"]], "v3.1.1 (2019 August 29)": [[4, "v3-1-1-2019-august-29"]], "v3.1.0 (2019 July 29)": [[4, "v3-1-0-2019-july-29"]], "v3.0.41 (2019 June 28)": [[4, "v3-0-41-2019-june-28"]], "v3.0.40 (2019 March 13)": [[4, "v3-0-40-2019-march-13"]], "v3.0.39 (2019 February 20)": [[4, "v3-0-39-2019-february-20"]], "v3.0.38 (2019 February 7)": [[4, "v3-0-38-2019-february-7"]], "v3.0.37 (2018 July 19)": [[4, "v3-0-37-2018-july-19"]], "v3.0.36 (2018 April 3)": [[4, "v3-0-36-2018-april-3"]], "v3.0.35 (2017 December 8)": [[4, "v3-0-35-2017-december-8"]], "v3.0.34 (2017 September 18)": [[4, "v3-0-34-2017-september-18"]], "v3.0.33 (2017 July 18)": [[4, "v3-0-33-2017-july-18"]], "v3.0.32 (2016 Sep 22)": [[4, "v3-0-32-2016-sep-22"]], "v3.0.31 (2016 May 18)": [[4, "v3-0-31-2016-may-18"]], "v3.0.30 (2016 Apr 25)": [[4, "v3-0-30-2016-apr-25"]], "v3.0.29 (2016 Mar 7)": [[4, "v3-0-29-2016-mar-7"]], "v3.0.28 (2016 Mar 3)": [[4, "v3-0-28-2016-mar-3"]], "v3.0.27 (2016 Feb 18)": [[4, "v3-0-27-2016-feb-18"]], "v3.0.26 (2016 Feb 1)": [[4, "v3-0-26-2016-feb-1"]], "v3.0.25 (2016 Jan 12)": [[4, "v3-0-25-2016-jan-12"]], "v3.0.24 (2016 Jan 08)": [[4, "v3-0-24-2016-jan-08"]], "v3.0.23 (2015 Oct 26)": [[4, "v3-0-23-2015-oct-26"]], "v3.0.22 (2015 Sept 9)": [[4, "v3-0-22-2015-sept-9"]], "v3.0.21 (2015 Aug 13)": [[4, "v3-0-21-2015-aug-13"]], "v3.0.20 (2015 Jun 10)": [[4, "v3-0-20-2015-jun-10"]], "v3.0.19 (2015 Mar 25)": [[4, "v3-0-19-2015-mar-25"]], "v3.0.18 (2015 Mar 13)": [[4, "v3-0-18-2015-mar-13"]], "v3.0.17 (2014 Jul 10)": [[4, "v3-0-17-2014-jul-10"]], "v3.0.16 (2014 May 23)": [[4, "v3-0-16-2014-may-23"]], "v3.0.15 (2014 Mar 6)": [[4, "v3-0-15-2014-mar-6"]], "v3.0.14 (2013 Jun 26)": [[4, "v3-0-14-2013-jun-26"]], "v3.0.13 (2013 Apr 11)": [[4, "v3-0-13-2013-apr-11"]], "v3.0.12 (2013 Feb 22)": [[4, "v3-0-12-2013-feb-22"]], "v3.0.11 (2013 Jan 31)": [[4, "v3-0-11-2013-jan-31"]], "v3.0.10 (2013 Jan 25)": [[4, "v3-0-10-2013-jan-25"]], "v3.0.9 (2012 Dec 05)": [[4, "v3-0-9-2012-dec-05"]], "v3.0.9.beta2 (2012 Mar 19)": [[4, "v3-0-9-beta2-2012-mar-19"]], "v3.0.9.beta1 (2012 Feb 23)": [[4, "v3-0-9-beta1-2012-feb-23"]], "v3.0.8 (2011 Oct 7)": [[4, "v3-0-8-2011-oct-7"]], "v3.0.7 (2011 Apr 04)": [[4, "v3-0-7-2011-apr-04"]], "v3.0.6 (2010 Jan 25)": [[4, "v3-0-6-2010-jan-25"]], "v3.0.5 (2010 Dec 20)": [[4, "v3-0-5-2010-dec-20"]], "v3.0.4 (2010 Nov 22)": [[4, "v3-0-4-2010-nov-22"]], "v3.0.3 (2010 Nov 12)": [[4, "v3-0-3-2010-nov-12"]], "v3.0.2 (2010 Aug 27)": [[4, "v3-0-2-2010-aug-27"]], "v3.0.1 (2010 May 10)": [[4, "v3-0-1-2010-may-10"]], "v3.0 (2010 May 5)": [[4, "v3-0-2010-may-5"]], "v3.0b8 (2010 Feb 19)": [[4, "v3-0b8-2010-feb-19"]], "v3.0b7 (2009 Nov 30)": [[4, "v3-0b7-2009-nov-30"]], "v3.0b6 (2009 Oct 20)": [[4, "v3-0b6-2009-oct-20"]], "v3.0b5 (2009 Sept 29)": [[4, "v3-0b5-2009-sept-29"]], "v3.0b4 (2009 July 3)": [[4, "v3-0b4-2009-july-3"]], "v3.0b3 (2009 June 24)": [[4, "v3-0b3-2009-june-24"]], "API Cookbook": [[5, "api-cookbook"]], "Details About Working With Files": [[6, "details-about-working-with-files"]], "Default structure": [[6, "default-structure"]], "File type structures (this_file)": [[6, "file-type-structures-this-file"]], "Creating Attachments": [[6, "creating-attachments"]], "Web Links": [[6, "web-links"]], "Uploads": [[6, "uploads"]], "Local Files": [[6, "local-files"]], "Updating Attachments": [[6, "updating-attachments"]], "Deleting Attachments": [[6, "deleting-attachments"]], "Working With Local File Types": [[6, "working-with-local-file-types"]], "Requirements": [[6, "requirements"]], "Structure of Local File Values": [[6, "structure-of-local-file-values"]], "Reading Local File Fields": [[6, "reading-local-file-fields"]], "Creating & Updating Local file Fields": [[6, "creating-updating-local-file-fields"]], "Un-setting local file field values": [[6, "un-setting-local-file-field-values"]], "Handling Action Menu Item Calls": [[7, "handling-action-menu-item-calls"]], "GET vs. POST": [[7, "get-vs-post"]], "Using an ActionMenuItem to Package Versions for a Client": [[8, "using-an-actionmenuitem-to-package-versions-for-a-client"]], "Create A Shot": [[9, "create-a-shot"]], "Building the data and calling create()": [[9, "building-the-data-and-calling-create"]], "The Complete Example for creating a Shot": [[9, "the-complete-example-for-creating-a-shot"]], "Create a Shot with a Task Template": [[10, "create-a-shot-with-a-task-template"]], "Find the Task Template": [[10, "find-the-task-template"]], "The Resulting Task Template": [[10, "the-resulting-task-template"]], "Create the Shot": [[10, "create-the-shot"]], "Create Shot Result": [[10, "create-shot-result"]], "Create a Version Linked to a Shot": [[11, "create-a-version-linked-to-a-shot"]], "Find the Shot": [[11, "find-the-shot"]], "Find the Task": [[11, "find-the-task"]], "Create the Version": [[11, "create-the-version"]], "Upload a movie for review in Screening Room": [[11, "upload-a-movie-for-review-in-screening-room"]], "Delete A Shot": [[12, "delete-a-shot"]], "Calling delete()": [[12, "calling-delete"]], "Delete Shot Result": [[12, "delete-shot-result"]], "The Complete Example for deleting a Shot": [[12, "the-complete-example-for-deleting-a-shot"]], "Find a Shot": [[13, "find-a-shot"]], "Building the Query": [[13, "building-the-query"]], "Seeing the Result": [[13, "seeing-the-result"]], "The Complete Example for finding a Shot": [[13, "the-complete-example-for-finding-a-shot"]], "Create a Flow Production Tracking API instance": [[14, "create-a-flow-production-tracking-api-instance"]], "Update A Shot": [[15, "update-a-shot"]], "Building the data and calling update()": [[15, "building-the-data-and-calling-update"]], "Result": [[15, "result"]], "The Complete Example for updating a Shot": [[15, "the-complete-example-for-updating-a-shot"]], "Upload a Thumbnail for a Version": [[16, "upload-a-thumbnail-for-a-version"]], "Upload the Image using upload_thumbnail()": [[16, "upload-the-image-using-upload-thumbnail"]], "Subversion (SVN) Integration": [[17, "subversion-svn-integration"]], "Post-Commit Hook": [[17, "post-commit-hook"]], "Explanation of selected lines": [[17, "explanation-of-selected-lines"]], "Flow Production Tracking API Script": [[17, "flow-production-tracking-api-script"]], "Explanation of selected lines:": [[17, "id1"]], "Troubleshooting": [[17, "troubleshooting"]], "My post-commit script is simply not running. I can run it manually, but commits are not triggering it.": [[17, "my-post-commit-script-is-simply-not-running-i-can-run-it-manually-but-commits-are-not-triggering-it"]], "My Flow Production Tracking API script is not getting called by the post-commit hook.": [[17, "my-flow-production-tracking-api-script-is-not-getting-called-by-the-post-commit-hook"]], "Smart Cut Fields": [[18, "smart-cut-fields"]], "Smart Fields": [[18, "smart-fields"]], "Raw Fields": [[18, "raw-fields"]], "Working With Tasks": [[19, "working-with-tasks"]], "Split Tasks": [[20, "split-tasks"]], "Overview": [[20, "overview"]], "How Do Splits Influence Dates And Dates Influence Splits": [[20, "how-do-splits-influence-dates-and-dates-influence-splits"]], "Examples for splitting Tasks": [[20, "examples-for-splitting-tasks"]], "start_date, due_date and duration being ignored": [[20, "start-date-due-date-and-duration-being-ignored"]], "Moving the start_date of a split task": [[20, "moving-the-start-date-of-a-split-task"]], "Moving the due_date of a split task": [[20, "moving-the-due-date-of-a-split-task"]], "Setting a longer duration": [[20, "setting-a-longer-duration"]], "Setting a shorter duration": [[20, "setting-a-shorter-duration"]], "Another example of shorter duration": [[20, "another-example-of-shorter-duration"]], "Setting the due_date in a gap": [[20, "setting-the-due-date-in-a-gap"]], "Task Dependencies": [[21, "task-dependencies"]], "Create Tasks": [[21, "create-tasks"]], "Create A Dependency": [[21, "create-a-dependency"]], "Query Task Dependencies": [[21, "query-task-dependencies"]], "Updating the Dependency type": [[21, "updating-the-dependency-type"]], "Query Tasks with Dependency Fields": [[21, "query-tasks-with-dependency-fields"]], "Updating the End Date on a Task with Downstream Task Dependencies": [[21, "updating-the-end-date-on-a-task-with-downstream-task-dependencies"]], "Creating a Dependency Violation by pushing up a Start Date": [[21, "creating-a-dependency-violation-by-pushing-up-a-start-date"]], "Resolving a Dependency Violation by updating the Start Date": [[21, "resolving-a-dependency-violation-by-updating-the-start-date"]], "Updating the pinned field on a Task with a Dependency Violation": [[21, "updating-the-pinned-field-on-a-task-with-a-dependency-violation"]], "dependency_violation field is read-only": [[21, "dependency-violation-field-is-read-only"]], "Updating Task Dates: How Flow Production Tracking Thinks": [[22, "updating-task-dates-how-flow-production-tracking-thinks"]], "General Rules": [[22, "general-rules"]], "Examples for updating Tasks": [[22, "examples-for-updating-tasks"]], "Examples": [[23, "examples"]], "Basic": [[23, "basic"]], "Advanced": [[23, "advanced"]], "API Usage Tips": [[24, "api-usage-tips"]], "Importing": [[24, "importing"]], "Multi-threading": [[24, "multi-threading"]], "Entity Fields": [[24, "entity-fields"]], "CustomEntities": [[24, "customentities"]], "ConnectionEntities": [[24, "connectionentities"]], "Flow Production Tracking UI fields not available via the API": [[24, "flow-production-tracking-ui-fields-not-available-via-the-api"]], "HumanUser": [[24, "humanuser"]], "Shot": [[24, "shot"]], "Pipeline Step summary fields on entities": [[24, "pipeline-step-summary-fields-on-entities"]], "Query Fields": [[24, "query-fields"]], "Audit Fields": [[24, "audit-fields"]], "Logging Messages from the API": [[24, "logging-messages-from-the-api"]], "Optimizations": [[24, "optimizations"]], "Combining Related Queries": [[24, "combining-related-queries"]], "Flow Production Tracking Python API library": [[25, "flow-production-tracking-python-api-library"]], "Overview Video of Setting Up Your Environment with the Python API": [[25, "overview-video-of-setting-up-your-environment-with-the-python-api"]], "User Guide": [[25, "user-guide"]], "Indices and tables": [[25, "indices-and-tables"]], "Installation": [[26, "installation"]], "Minimum Requirements": [[26, "minimum-requirements"]], "Installing into PYTHONPATH": [[26, "installing-into-pythonpath"]], "Installing with pip": [[26, "installing-with-pip"]], "Installing the Master Branch From Github": [[26, "installing-the-master-branch-from-github"]], "Installing A specific Version From Github": [[26, "installing-a-specific-version-from-github"]], "requirements.txt": [[26, "requirements-txt"]], "Installing with setup.py": [[26, "installing-with-setup-py"]], "API Reference": [[27, "api-reference"]], "shotgun Module Attributes": [[27, "shotgun-module-attributes"]], "Shotgun()": [[27, "shotgun"]], "Shotgun Methods": [[27, "shotgun-methods"]], "Connection & Authentication": [[27, "connection-authentication"]], "Subscription Management": [[27, "subscription-management"]], "CRUD Methods": [[27, "crud-methods"]], "Working With Files": [[27, "working-with-files"]], "Activity Stream": [[27, "activity-stream"]], "Working with the Shotgun Schema": [[27, "working-with-the-shotgun-schema"]], "Exceptions": [[27, "exceptions"]], "Filter Syntax": [[27, "filter-syntax"]], "Basic Filters": [[27, "basic-filters"]], "Basic Example": [[27, "basic-example"]], "Complex Filters": [[27, "complex-filters"]], "Complex Example": [[27, "complex-example"]], "Operators and Arguments": [[27, "operators-and-arguments"]], "Valid Operators By Data Type": [[27, "valid-operators-by-data-type"]], "Additional Filter Presets": [[27, "additional-filter-presets"]], "Example Uses": [[27, "example-uses"]], "Available Filter Presets by Entity Type": [[27, "available-filter-presets-by-entity-type"]], "Data Types": [[27, "data-types"]], "addressing": [[27, "addressing"]], "checkbox": [[27, "checkbox"]], "color": [[27, "color"]], "currency": [[27, "currency"]], "date": [[27, "date"]], "date_time": [[27, "date-time"]], "duration": [[27, "duration"]], "entity": [[27, "entity"]], "float": [[27, "float"]], "footage": [[27, "footage"]], "image (read-only)": [[27, "image-read-only"]], "list": [[27, "list"]], "multi_entity": [[27, "multi-entity"]], "number": [[27, "number"]], "password": [[27, "password"]], "percent": [[27, "percent"]], "serializable": [[27, "serializable"]], "status_list": [[27, "status-list"]], "system_task_type (deprecated)": [[27, "system-task-type-deprecated"]], "tag_list": [[27, "tag-list"]], "text": [[27, "text"]], "timecode": [[27, "timecode"]], "url (file/link field)": [[27, "url-file-link-field"]], "Local File Links": [[27, "local-file-links"]], "Interpreting Image Field Strings": [[27, "interpreting-image-field-strings"]], "Event Types": [[27, "event-types"]], "Event-based Triggers": [[27, "event-based-triggers"]], "Structure of Event Types": [[27, "structure-of-event-types"]], "Standard Event Types": [[27, "standard-event-types"]], "Additional Event Types": [[27, "additional-event-types"]], "Custom Event Types": [[27, "custom-event-types"]], "Performance": [[27, "performance"]], "Environment Variables": [[27, "environment-variables"]], "SHOTGUN_API_CACERTS": [[27, "shotgun-api-cacerts"]], "SHOTGUN_API_RETRY_INTERVAL": [[27, "shotgun-api-retry-interval"]], "SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION": [[27, "shotgun-api-disable-entity-optimization"]], "Localization": [[27, "localization"]]}, "indexentries": {"authenticationfault (class in shotgun_api3)": [[27, "shotgun_api3.AuthenticationFault"]], "fault (class in shotgun_api3)": [[27, "shotgun_api3.Fault"]], "log (in module shotgun_api3.shotgun)": [[27, "shotgun_api3.shotgun.LOG"]], "missingtwofactorauthenticationfault (class in shotgun_api3)": [[27, "shotgun_api3.MissingTwoFactorAuthenticationFault"]], "no_ssl_validation (in module shotgun_api3.shotgun)": [[27, "shotgun_api3.shotgun.NO_SSL_VALIDATION"]], "shotgun (class in shotgun_api3.shotgun)": [[27, "shotgun_api3.shotgun.Shotgun"]], "shotgunerror (class in shotgun_api3)": [[27, "shotgun_api3.ShotgunError"]], "shotgunfiledownloaderror (class in shotgun_api3)": [[27, "shotgun_api3.ShotgunFileDownloadError"]], "activity_stream_read() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.activity_stream_read"]], "add_user_agent() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.add_user_agent"]], "authenticate_human_user() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.authenticate_human_user"]], "batch() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.batch"]], "close() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.close"]], "connect() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.connect"]], "create() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.create"]], "delete() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.delete"]], "download_attachment() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.download_attachment"]], "entity_types() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.entity_types"]], "find() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.find"]], "find_one() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.find_one"]], "follow() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.follow"]], "followers() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.followers"]], "following() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.following"]], "get_attachment_download_url() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.get_attachment_download_url"]], "get_auth_cookie_handler() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.get_auth_cookie_handler"]], "get_session_token() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.get_session_token"]], "info() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.info"]], "module": [[27, "module-shotgun_api3.shotgun"]], "note_thread_read() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.note_thread_read"]], "preferences_read() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.preferences_read"]], "reset_user_agent() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.reset_user_agent"]], "revive() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.revive"]], "schema() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.schema"]], "schema_entity_read() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.schema_entity_read"]], "schema_field_create() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.schema_field_create"]], "schema_field_delete() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.schema_field_delete"]], "schema_field_read() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.schema_field_read"]], "schema_field_update() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.schema_field_update"]], "schema_read() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.schema_read"]], "set_session_uuid() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.set_session_uuid"]], "share_thumbnail() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.share_thumbnail"]], "shotgun_api3.shotgun": [[27, "module-shotgun_api3.shotgun"]], "summarize() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.summarize"]], "text_search() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.text_search"]], "unfollow() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.unfollow"]], "update() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.update"]], "update_project_last_accessed() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.update_project_last_accessed"]], "upload() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.upload"]], "upload_filmstrip_thumbnail() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.upload_filmstrip_thumbnail"]], "upload_thumbnail() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.upload_thumbnail"]], "user_subscriptions_create() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.user_subscriptions_create"]], "user_subscriptions_read() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.user_subscriptions_read"]], "with_traceback() (shotgun_api3.authenticationfault method)": [[27, "shotgun_api3.AuthenticationFault.with_traceback"]], "with_traceback() (shotgun_api3.fault method)": [[27, "shotgun_api3.Fault.with_traceback"]], "with_traceback() (shotgun_api3.missingtwofactorauthenticationfault method)": [[27, "shotgun_api3.MissingTwoFactorAuthenticationFault.with_traceback"]], "with_traceback() (shotgun_api3.shotgunerror method)": [[27, "shotgun_api3.ShotgunError.with_traceback"]], "with_traceback() (shotgun_api3.shotgunfiledownloaderror method)": [[27, "shotgun_api3.ShotgunFileDownloadError.with_traceback"]], "work_schedule_read() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.work_schedule_read"]], "work_schedule_update() (shotgun_api3.shotgun.shotgun method)": [[27, "shotgun_api3.shotgun.Shotgun.work_schedule_update"]]}}) \ No newline at end of file diff --git a/setup.py b/setup.py deleted file mode 100644 index cf3304f91..000000000 --- a/setup.py +++ /dev/null @@ -1,46 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -import sys -from setuptools import setup, find_packages - -f = open("README.md") -readme = f.read().strip() - -f = open("LICENSE") -license = f.read().strip() - -setup( - name="shotgun_api3", - version="3.8.2", - description="Flow Production Tracking Python API", - long_description=readme, - author="Autodesk", - author_email="https://www.autodesk.com/support/contact-support", - url="https://github.com/shotgunsoftware/python-api", - license=license, - packages=find_packages(exclude=("tests",)), - script_args=sys.argv[1:], - include_package_data=True, - package_data={"": ["cacerts.txt", "cacert.pem"]}, - zip_safe=False, - python_requires=">=3.7.0", - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Intended Audience :: Developers", - "Programming Language :: Python", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Operating System :: OS Independent", - ], -) diff --git a/shotgun_api3/__init__.py b/shotgun_api3/__init__.py deleted file mode 100644 index d296aa97a..000000000 --- a/shotgun_api3/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -from .shotgun import ( - Shotgun, - ShotgunError, - ShotgunFileDownloadError, # noqa unused imports - ShotgunThumbnailNotReady, - Fault, - AuthenticationFault, - MissingTwoFactorAuthenticationFault, - UserCredentialsNotAllowedForSSOAuthenticationFault, - ProtocolError, - ResponseError, - Error, - __version__, -) -from .shotgun import SG_TIMEZONE as sg_timezone # noqa unused imports diff --git a/shotgun_api3/__pycache__/__init__.cpython-310.pyc b/shotgun_api3/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 000000000..036aa0481 Binary files /dev/null and b/shotgun_api3/__pycache__/__init__.cpython-310.pyc differ diff --git a/shotgun_api3/__pycache__/shotgun.cpython-310.pyc b/shotgun_api3/__pycache__/shotgun.cpython-310.pyc new file mode 100644 index 000000000..4e835612d Binary files /dev/null and b/shotgun_api3/__pycache__/shotgun.cpython-310.pyc differ diff --git a/shotgun_api3/lib/.gitignore b/shotgun_api3/lib/.gitignore deleted file mode 100644 index 2b25fa894..000000000 --- a/shotgun_api3/lib/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.dist-info \ No newline at end of file diff --git a/shotgun_api3/lib/README.md b/shotgun_api3/lib/README.md deleted file mode 100644 index 1bdec6f78..000000000 --- a/shotgun_api3/lib/README.md +++ /dev/null @@ -1,58 +0,0 @@ -# Lib Submodules - -## Third Party Modules - -Some third-party modules are bundled with `python-api` inside lib. - -### httplib2 - -`httplib2` is used to make http connections to the Flow Production Tracking server. We bundle both python2 and python3 compatible versions since httplib2 chose to maintain parallel versions of the module for python 2 and 3 compatibility. - -The version of `httplib2` bundled should be updated manually, however its version is included in the unused `shotgun_api3/lib/requirements.txt` to allow Github's automated CVE notifications to work. - -### mimetypes - -The `mimetypes` module is broken on Windows only for Python 2.7.0 to 2.7.9 inclusively. -We bundle the version from 2.7.10 - -See bugs: - - * [9291](http://bugs.python.org/issue9291) (Fixed in 2.7.7) - * [21652](http://bugs.python.org/issue21652) (Fixed in 2.7.8) - * [22028](http://bugs.python.org/issue22028) (Fixed in 2.7.10) - -The version of `mimetypes` bundled should be updated manually if necessary, however it is unlikely this will be needed, as it is only used for Python versions 2.7.0 - 2.7.9, and newer Python versions simply use the native `mimetypes` module. - -### six - -Six is a Python 2/3 compatibility library. In python-api, it's used to make simultaneous support for Python on 2 and 3 easier to maintain and more readable, but allowing the use of common helper functions, unified interfaces for modules that changed, and variables to ease type comparisons. For more on six, see the [documentation](https://six.readthedocs.io/). - -The version of `six` bundled should be updated manually, however its version is included in the unused `shotgun_api3/lib/requirements.txt` to allow Github's automated CVE notifications to work. - -## Flow Production Tracking Modules - -### sgsix - -`sgsix` is a module that contains extensions to `six`. These might be additional helper functions, variables, etc. that supplement six's functionality. It is intended that `sgsix` can be used within other packages that include or depend on the `python-api` package as well. - -### sgtimezone - -`sgtimezone` contains classes for easing the conversion between the server (UTC) timezone and client timezone. - -### mockgun - -Mockgun is a Flow Production Tracking API mocker. It's a class that has got *most* of the same -methods and parameters that the Flow Production Tracking API has got. Mockgun is essentially a -Flow Production Tracking *emulator* that (for basic operations) looks and feels like Flow Production Tracking. - -The primary purpose of Mockgun is to drive unit test rigs where it becomes -too slow, cumbersome or non-practical to connect to a real Flow Production Tracking. Using a -Mockgun for unit tests means that a test can be rerun over and over again -from exactly the same database state. This can be hard to do if you connect -to a live Flow Production Tracking instance. - -## Lib `requirements.txt` - -The file `shotgun_api3/lib/requirements.txt` is not used to install any packages, however exists so that automated checks for CVEs in dependencies will know about bundled packages. - -For this reason, it's important to add any newly bundled packages to this file, and to keep the file up to date if the bundled version of a module changes. \ No newline at end of file diff --git a/shotgun_api3/lib/__pycache__/__init__.cpython-310.pyc b/shotgun_api3/lib/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 000000000..8c12c25d5 Binary files /dev/null and b/shotgun_api3/lib/__pycache__/__init__.cpython-310.pyc differ diff --git a/shotgun_api3/lib/__pycache__/pyparsing.cpython-310.pyc b/shotgun_api3/lib/__pycache__/pyparsing.cpython-310.pyc new file mode 100644 index 000000000..fe1dd8968 Binary files /dev/null and b/shotgun_api3/lib/__pycache__/pyparsing.cpython-310.pyc differ diff --git a/shotgun_api3/lib/sgsix.py b/shotgun_api3/lib/__pycache__/sgsix.cpython-310.pyc similarity index 62% rename from shotgun_api3/lib/sgsix.py rename to shotgun_api3/lib/__pycache__/sgsix.cpython-310.pyc index 6c2af1abc..82aeb3ec7 100644 Binary files a/shotgun_api3/lib/sgsix.py and b/shotgun_api3/lib/__pycache__/sgsix.cpython-310.pyc differ diff --git a/shotgun_api3/lib/__pycache__/sgtimezone.cpython-310.pyc b/shotgun_api3/lib/__pycache__/sgtimezone.cpython-310.pyc new file mode 100644 index 000000000..610471ba8 Binary files /dev/null and b/shotgun_api3/lib/__pycache__/sgtimezone.cpython-310.pyc differ diff --git a/shotgun_api3/lib/sgutils.py b/shotgun_api3/lib/__pycache__/sgutils.cpython-310.pyc similarity index 70% rename from shotgun_api3/lib/sgutils.py rename to shotgun_api3/lib/__pycache__/sgutils.cpython-310.pyc index 0d49e4b39..00f9da51a 100644 Binary files a/shotgun_api3/lib/sgutils.py and b/shotgun_api3/lib/__pycache__/sgutils.cpython-310.pyc differ diff --git a/shotgun_api3/lib/__pycache__/six.cpython-310.pyc b/shotgun_api3/lib/__pycache__/six.cpython-310.pyc new file mode 100644 index 000000000..fb7343412 Binary files /dev/null and b/shotgun_api3/lib/__pycache__/six.cpython-310.pyc differ diff --git a/shotgun_api3/lib/certifi/__init__.py b/shotgun_api3/lib/certifi/__init__.py deleted file mode 100644 index ee8686bec..000000000 --- a/shotgun_api3/lib/certifi/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -from .core import contents, where - -__all__ = ["contents", "where"] -__version__ = "2024.12.14" diff --git a/shotgun_api3/lib/certifi/__main__.py b/shotgun_api3/lib/certifi/__main__.py deleted file mode 100644 index 8945b5da8..000000000 --- a/shotgun_api3/lib/certifi/__main__.py +++ /dev/null @@ -1,12 +0,0 @@ -import argparse - -from certifi import contents, where - -parser = argparse.ArgumentParser() -parser.add_argument("-c", "--contents", action="store_true") -args = parser.parse_args() - -if args.contents: - print(contents()) -else: - print(where()) diff --git a/shotgun_api3/lib/certifi/cacert.pem b/shotgun_api3/lib/certifi/cacert.pem deleted file mode 100644 index ef509f865..000000000 --- a/shotgun_api3/lib/certifi/cacert.pem +++ /dev/null @@ -1,4856 +0,0 @@ - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946069240 -# MD5 Fingerprint: ee:29:31:bc:32:7e:9a:e6:e8:b5:f7:51:b4:34:71:90 -# SHA1 Fingerprint: 50:30:06:09:1d:97:d4:f5:ae:39:f7:cb:e7:92:7d:7d:65:2d:34:31 -# SHA256 Fingerprint: 6d:c4:71:72:e0:1c:bc:b0:bf:62:58:0d:89:5f:e2:b8:ac:9a:d4:f8:73:80:1e:0c:10:b9:c8:37:d2:1e:b1:77 ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 -MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub -j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo -U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf -zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b -u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ -bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er -fF6adulZkMV8gzURZVE= ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2" -# Serial: 1289 -# MD5 Fingerprint: 5e:39:7b:dd:f8:ba:ec:82:e9:ac:62:ba:0c:54:00:2b -# SHA1 Fingerprint: ca:3a:fb:cf:12:40:36:4b:44:b2:16:20:88:80:48:39:19:93:7c:f7 -# SHA256 Fingerprint: 85:a0:dd:7d:d7:20:ad:b7:ff:05:f8:3d:54:2b:20:9d:c7:ff:45:28:f7:d6:77:b1:83:89:fe:a5:e5:c4:9e:86 ------BEGIN CERTIFICATE----- -MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa -GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg -Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J -WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB -rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp -+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 -ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i -Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz -PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og -/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH -oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI -yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud -EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 -A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL -MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT -ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f -BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn -g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl -fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K -WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha -B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc -hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR -TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD -mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z -ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y -4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza -8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3" -# Serial: 1478 -# MD5 Fingerprint: 31:85:3c:62:94:97:63:b9:aa:fd:89:4e:af:6f:e0:cf -# SHA1 Fingerprint: 1f:49:14:f7:d8:74:95:1d:dd:ae:02:c0:be:fd:3a:2d:82:75:51:85 -# SHA256 Fingerprint: 18:f1:fc:7f:20:5d:f8:ad:dd:eb:7f:e0:07:dd:57:e3:af:37:5a:9c:4d:8d:73:54:6b:f4:f1:fe:d1:e1:8d:35 ------BEGIN CERTIFICATE----- -MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x -GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv -b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV -BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W -YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM -V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB -4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr -H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd -8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv -vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT -mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe -btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc -T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt -WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ -c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A -4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD -VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG -CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 -aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 -aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu -dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw -czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G -A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC -TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg -Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 -7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem -d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd -+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B -4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN -t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x -DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 -k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s -zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j -Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT -mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK -4SVhM7JZG+Ju1zdXtg2pEto= ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Gold CA - G2 O=SwissSign AG -# Label: "SwissSign Gold CA - G2" -# Serial: 13492815561806991280 -# MD5 Fingerprint: 24:77:d9:a8:91:d1:3b:fa:88:2d:c2:ff:f8:cd:33:93 -# SHA1 Fingerprint: d8:c5:38:8a:b7:30:1b:1b:6e:d4:7a:e6:45:25:3a:6f:9f:1a:27:61 -# SHA256 Fingerprint: 62:dd:0b:e9:b9:f5:0a:16:3e:a0:f8:e7:5c:05:3b:1e:ca:57:ea:55:c8:68:8f:64:7c:68:81:f2:c8:35:7b:95 ------BEGIN CERTIFICATE----- -MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV -BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln -biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF -MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT -d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC -CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 -76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ -bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c -6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE -emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd -MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt -MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y -MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y -FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi -aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM -gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB -qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 -lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn -8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov -L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 -45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO -UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 -O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC -bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv -GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a -77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC -hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 -92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp -Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w -ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt -Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ ------END CERTIFICATE----- - -# Issuer: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Subject: CN=SwissSign Silver CA - G2 O=SwissSign AG -# Label: "SwissSign Silver CA - G2" -# Serial: 5700383053117599563 -# MD5 Fingerprint: e0:06:a1:c9:7d:cf:c9:fc:0d:c0:56:75:96:d8:62:13 -# SHA1 Fingerprint: 9b:aa:e5:9f:56:ee:21:cb:43:5a:be:25:93:df:a7:f0:40:d1:1d:cb -# SHA256 Fingerprint: be:6c:4d:a2:bb:b9:ba:59:b6:f3:93:97:68:37:42:46:c3:c0:05:99:3f:a9:8f:02:0d:1d:ed:be:d4:8a:81:d5 ------BEGIN CERTIFICATE----- -MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE -BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu -IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow -RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY -U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A -MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv -Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br -YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF -nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH -6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt -eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ -c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ -MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH -HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf -jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 -5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB -rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c -wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 -cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB -AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp -WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 -xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ -2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ -IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 -aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X -em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR -dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ -OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ -hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy -tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u ------END CERTIFICATE----- - -# Issuer: CN=SecureTrust CA O=SecureTrust Corporation -# Subject: CN=SecureTrust CA O=SecureTrust Corporation -# Label: "SecureTrust CA" -# Serial: 17199774589125277788362757014266862032 -# MD5 Fingerprint: dc:32:c3:a7:6d:25:57:c7:68:09:9d:ea:2d:a9:a2:d1 -# SHA1 Fingerprint: 87:82:c6:c3:04:35:3b:cf:d2:96:92:d2:59:3e:7d:44:d9:34:ff:11 -# SHA256 Fingerprint: f1:c1:b5:0a:e5:a2:0d:d8:03:0e:c9:f6:bc:24:82:3d:d3:67:b5:25:57:59:b4:e7:1b:61:fc:e9:f7:37:5d:73 ------BEGIN CERTIFICATE----- -MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz -MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv -cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz -Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO -0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao -wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj -7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS -8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT -BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg -JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 -6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ -3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm -D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS -CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR -3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= ------END CERTIFICATE----- - -# Issuer: CN=Secure Global CA O=SecureTrust Corporation -# Subject: CN=Secure Global CA O=SecureTrust Corporation -# Label: "Secure Global CA" -# Serial: 9751836167731051554232119481456978597 -# MD5 Fingerprint: cf:f4:27:0d:d4:ed:dc:65:16:49:6d:3d:da:bf:6e:de -# SHA1 Fingerprint: 3a:44:73:5a:e5:81:90:1f:24:86:61:46:1e:3b:9c:c4:5f:f5:3a:1b -# SHA256 Fingerprint: 42:00:f5:04:3a:c8:59:0e:bb:52:7d:20:9e:d1:50:30:29:fb:cb:d4:1c:a1:b5:06:ec:27:f1:5a:de:7d:ac:69 ------BEGIN CERTIFICATE----- -MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK -MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x -GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx -MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg -Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ -iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa -/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ -jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI -HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 -sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w -gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw -KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG -AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L -URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO -H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm -I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY -iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc -f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=Certigna O=Dhimyotis -# Subject: CN=Certigna O=Dhimyotis -# Label: "Certigna" -# Serial: 18364802974209362175 -# MD5 Fingerprint: ab:57:a6:5b:7d:42:82:19:b5:d8:58:26:28:5e:fd:ff -# SHA1 Fingerprint: b1:2e:13:63:45:86:a4:6f:1a:b2:60:68:37:58:2d:c4:ac:fd:94:97 -# SHA256 Fingerprint: e3:b6:a2:db:2e:d7:ce:48:84:2f:7a:c5:32:41:c7:b7:1d:54:14:4b:fb:40:c1:1f:3f:1d:0b:42:f5:ee:a1:2d ------BEGIN CERTIFICATE----- -MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV -BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X -DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ -BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 -QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny -gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw -zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q -130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 -JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw -DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw -ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT -AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj -AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG -9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h -bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc -fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu -HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w -t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw -WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== ------END CERTIFICATE----- - -# Issuer: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Subject: O=Chunghwa Telecom Co., Ltd. OU=ePKI Root Certification Authority -# Label: "ePKI Root Certification Authority" -# Serial: 28956088682735189655030529057352760477 -# MD5 Fingerprint: 1b:2e:00:ca:26:06:90:3d:ad:fe:6f:15:68:d3:6b:b3 -# SHA1 Fingerprint: 67:65:0d:f1:7e:8e:7e:5b:82:40:a4:f4:56:4b:cf:e2:3d:69:c6:f0 -# SHA256 Fingerprint: c0:a6:f4:dc:63:a2:4b:fd:cf:54:ef:2a:6a:08:2a:0a:72:de:35:80:3e:2f:f5:ff:52:7a:e5:d8:72:06:df:d5 ------BEGIN CERTIFICATE----- -MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw -IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL -SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH -SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh -ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X -DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 -TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ -fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA -sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU -WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS -nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH -dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip -NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC -AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF -MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH -ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB -uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl -PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP -JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ -gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 -j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 -5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB -o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS -/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z -Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE -W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D -hNQ+IIX3Sj0rnP0qCglN6oH4EZw= ------END CERTIFICATE----- - -# Issuer: O=certSIGN OU=certSIGN ROOT CA -# Subject: O=certSIGN OU=certSIGN ROOT CA -# Label: "certSIGN ROOT CA" -# Serial: 35210227249154 -# MD5 Fingerprint: 18:98:c0:d6:e9:3a:fc:f9:b0:f5:0c:f7:4b:01:44:17 -# SHA1 Fingerprint: fa:b7:ee:36:97:26:62:fb:2d:b0:2a:f6:bf:03:fd:e8:7c:4b:2f:9b -# SHA256 Fingerprint: ea:a9:62:c4:fa:4a:6b:af:eb:e4:15:19:6d:35:1c:cd:88:8d:4f:53:f3:fa:8a:e6:d7:c4:66:a9:4e:60:42:bb ------BEGIN CERTIFICATE----- -MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT -AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD -QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP -MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC -ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do -0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ -UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d -RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ -OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv -JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C -AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O -BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ -LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY -MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ -44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I -Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw -i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN -9u6wWk5JRFRYX0KD ------END CERTIFICATE----- - -# Issuer: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Subject: CN=NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny O=NetLock Kft. OU=Tan\xfas\xedtv\xe1nykiad\xf3k (Certification Services) -# Label: "NetLock Arany (Class Gold) F\u0151tan\xfas\xedtv\xe1ny" -# Serial: 80544274841616 -# MD5 Fingerprint: c5:a1:b7:ff:73:dd:d6:d7:34:32:18:df:fc:3c:ad:88 -# SHA1 Fingerprint: 06:08:3f:59:3f:15:a1:04:a0:69:a4:6b:a9:03:d0:06:b7:97:09:91 -# SHA256 Fingerprint: 6c:61:da:c3:a2:de:f0:31:50:6b:e0:36:d2:a6:fe:40:19:94:fb:d1:3d:f9:c8:d4:66:59:92:74:c4:46:ec:98 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG -EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 -MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl -cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR -dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB -pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM -b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm -aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz -IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT -lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz -AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 -VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG -ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 -BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG -AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M -U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh -bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C -+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC -bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F -uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 -XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= ------END CERTIFICATE----- - -# Issuer: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Subject: CN=Microsec e-Szigno Root CA 2009 O=Microsec Ltd. -# Label: "Microsec e-Szigno Root CA 2009" -# Serial: 14014712776195784473 -# MD5 Fingerprint: f8:49:f4:03:bc:44:2d:83:be:48:69:7d:29:64:fc:b1 -# SHA1 Fingerprint: 89:df:74:fe:5c:f4:0f:4a:80:f9:e3:37:7d:54:da:91:e1:01:31:8e -# SHA256 Fingerprint: 3c:5f:81:fe:a5:fa:b8:2c:64:bf:a2:ea:ec:af:cd:e8:e0:77:fc:86:20:a7:ca:e5:37:16:3d:f3:6e:db:f3:78 ------BEGIN CERTIFICATE----- -MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD -VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 -ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G -CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y -OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx -FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp -Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o -dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP -kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc -cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U -fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 -N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC -xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 -+rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM -Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG -SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h -mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk -ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 -tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c -2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t -HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=Izenpe.com O=IZENPE S.A. -# Subject: CN=Izenpe.com O=IZENPE S.A. -# Label: "Izenpe.com" -# Serial: 917563065490389241595536686991402621 -# MD5 Fingerprint: a6:b0:cd:85:80:da:5c:50:34:a3:39:90:2f:55:67:73 -# SHA1 Fingerprint: 2f:78:3d:25:52:18:a7:4a:65:39:71:b5:2c:a2:9c:45:15:6f:e9:19 -# SHA256 Fingerprint: 25:30:cc:8e:98:32:15:02:ba:d9:6f:9b:1f:ba:1b:09:9e:2d:29:9e:0f:45:48:bb:91:4f:36:3b:c0:d4:53:1f ------BEGIN CERTIFICATE----- -MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 -MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 -ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD -VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j -b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq -scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO -xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H -LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX -uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD -yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ -JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q -rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN -BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L -hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB -QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ -HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu -Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg -QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB -BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx -MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA -A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb -laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 -awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo -JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw -LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT -VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk -LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb -UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ -QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ -naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls -QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA" -# Serial: 279744 -# MD5 Fingerprint: d5:e9:81:40:c5:18:69:fc:46:2c:89:75:62:0f:aa:78 -# SHA1 Fingerprint: 07:e0:32:e0:20:b7:2c:3f:19:2f:06:28:a2:59:3a:19:a7:0f:06:9e -# SHA256 Fingerprint: 5c:58:46:8d:55:f5:8e:49:7e:74:39:82:d2:b5:00:10:b6:d1:65:37:4a:cf:83:a7:d4:a3:2d:b7:68:c4:40:8e ------BEGIN CERTIFICATE----- -MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM -MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D -ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU -cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 -WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg -Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw -IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH -UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM -TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU -BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM -kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x -AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV -HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y -sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL -I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 -J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY -VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= ------END CERTIFICATE----- - -# Issuer: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Root Certification Authority O=TAIWAN-CA OU=Root CA -# Label: "TWCA Root Certification Authority" -# Serial: 1 -# MD5 Fingerprint: aa:08:8f:f6:f9:7b:b7:f2:b1:a7:1e:9b:ea:ea:bd:79 -# SHA1 Fingerprint: cf:9e:87:6d:d3:eb:fc:42:26:97:a3:b5:a3:7a:a0:76:a9:06:23:48 -# SHA256 Fingerprint: bf:d8:8f:e1:10:1c:41:ae:3e:80:1b:f8:be:56:35:0e:e9:ba:d1:a6:b9:bd:51:5e:dc:5c:6d:5b:87:11:ac:44 ------BEGIN CERTIFICATE----- -MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES -MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU -V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz -WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO -LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB -AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE -AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH -K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX -RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z -rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx -3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq -hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC -MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls -XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D -lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn -aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ -YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== ------END CERTIFICATE----- - -# Issuer: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Subject: O=SECOM Trust Systems CO.,LTD. OU=Security Communication RootCA2 -# Label: "Security Communication RootCA2" -# Serial: 0 -# MD5 Fingerprint: 6c:39:7d:a4:0e:55:59:b2:3f:d6:41:b1:12:50:de:43 -# SHA1 Fingerprint: 5f:3b:8c:f2:f8:10:b3:7d:78:b4:ce:ec:19:19:c3:73:34:b9:c7:74 -# SHA256 Fingerprint: 51:3b:2c:ec:b8:10:d4:cd:e5:dd:85:39:1a:df:c6:c2:dd:60:d8:7b:b7:36:d2:b5:21:48:4a:a4:7a:0e:be:f6 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl -MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe -U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX -DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy -dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj -YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV -OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr -zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM -VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ -hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO -ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw -awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs -OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 -DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF -coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc -okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 -t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy -1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ -SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 ------END CERTIFICATE----- - -# Issuer: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Subject: CN=Actalis Authentication Root CA O=Actalis S.p.A./03358520967 -# Label: "Actalis Authentication Root CA" -# Serial: 6271844772424770508 -# MD5 Fingerprint: 69:c1:0d:4f:07:a3:1b:c3:fe:56:3d:04:bc:11:f6:a6 -# SHA1 Fingerprint: f3:73:b3:87:06:5a:28:84:8a:f2:f3:4a:ce:19:2b:dd:c7:8e:9c:ac -# SHA256 Fingerprint: 55:92:60:84:ec:96:3a:64:b9:6e:2a:be:01:ce:0b:a8:6a:64:fb:fe:bc:c7:aa:b5:af:c1:55:b3:7f:d7:60:66 ------BEGIN CERTIFICATE----- -MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE -BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w -MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 -IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC -SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 -ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv -UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX -4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 -KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ -gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb -rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ -51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F -be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe -KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F -v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn -fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 -jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz -ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt -ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL -e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 -jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz -WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V -SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j -pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX -X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok -fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R -K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU -ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU -LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT -LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 2 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 2 Root CA" -# Serial: 2 -# MD5 Fingerprint: 46:a7:d2:fe:45:fb:64:5a:a8:59:90:9b:78:44:9b:29 -# SHA1 Fingerprint: 49:0a:75:74:de:87:0a:47:fe:58:ee:f6:c7:6b:eb:c6:0b:12:40:99 -# SHA256 Fingerprint: 9a:11:40:25:19:7c:5b:b9:5d:94:e6:3d:55:cd:43:79:08:47:b6:46:b2:3c:df:11:ad:a4:a0:0e:ff:15:fb:48 ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr -6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV -L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 -1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx -MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ -QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB -arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr -Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi -FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS -P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN -9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz -uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h -9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s -A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t -OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo -+fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 -KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 -DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us -H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ -I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 -5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h -3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz -Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= ------END CERTIFICATE----- - -# Issuer: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Subject: CN=Buypass Class 3 Root CA O=Buypass AS-983163327 -# Label: "Buypass Class 3 Root CA" -# Serial: 2 -# MD5 Fingerprint: 3d:3b:18:9e:2c:64:5a:e8:d5:88:ce:0e:f9:37:c2:ec -# SHA1 Fingerprint: da:fa:f7:fa:66:84:ec:06:8f:14:50:bd:c7:c2:81:a5:bc:a9:64:57 -# SHA256 Fingerprint: ed:f7:eb:bc:a2:7a:2a:38:4d:38:7b:7d:40:10:c6:66:e2:ed:b4:84:3e:4c:29:b4:ae:1d:5b:93:32:e6:b2:4d ------BEGIN CERTIFICATE----- -MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd -MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg -Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow -TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw -HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB -BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y -ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E -N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 -tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX -0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c -/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X -KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY -zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS -O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D -34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP -K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 -AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv -Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj -QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV -cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS -IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 -HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa -O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv -033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u -dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE -kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 -3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD -u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq -4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 3 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 3" -# Serial: 1 -# MD5 Fingerprint: ca:fb:40:a8:4e:39:92:8a:1d:fe:8e:2f:c4:27:ea:ef -# SHA1 Fingerprint: 55:a6:72:3e:cb:f2:ec:cd:c3:23:74:70:19:9d:2a:be:11:e3:81:d1 -# SHA256 Fingerprint: fd:73:da:d3:1c:64:4f:f1:b4:3b:ef:0c:cd:da:96:71:0b:9c:d9:87:5e:ca:7e:31:70:7a:f3:e9:6d:52:2b:bd ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN -8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ -RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 -hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 -ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM -EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 -A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy -WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ -1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 -6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT -91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml -e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p -TpPDpFQUWw== ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 2009" -# Serial: 623603 -# MD5 Fingerprint: cd:e0:25:69:8d:47:ac:9c:89:35:90:f7:fd:51:3d:2f -# SHA1 Fingerprint: 58:e8:ab:b0:36:15:33:fb:80:f7:9b:1b:6d:29:d3:ff:8d:5f:00:f0 -# SHA256 Fingerprint: 49:e7:a4:42:ac:f0:ea:62:87:05:00:54:b5:25:64:b6:50:e4:f4:9e:42:e3:48:d6:aa:38:e0:39:e9:57:b1:c1 ------BEGIN CERTIFICATE----- -MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha -ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM -HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 -UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 -tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R -ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM -lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp -/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G -A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G -A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj -dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy -MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl -cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js -L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL -BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni -acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 -o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K -zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 -PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y -Johw1+qRzT65ysCQblrGXnRl11z+o+I= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Subject: CN=D-TRUST Root Class 3 CA 2 EV 2009 O=D-Trust GmbH -# Label: "D-TRUST Root Class 3 CA 2 EV 2009" -# Serial: 623604 -# MD5 Fingerprint: aa:c6:43:2c:5e:2d:cd:c4:34:c0:50:4f:11:02:4f:b6 -# SHA1 Fingerprint: 96:c9:1b:0b:95:b4:10:98:42:fa:d0:d8:22:79:fe:60:fa:b9:16:83 -# SHA256 Fingerprint: ee:c5:49:6b:98:8c:e9:86:25:b9:34:09:2e:ec:29:08:be:d0:b0:f3:16:c2:d4:73:0c:84:ea:f1:f3:d3:48:81 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF -MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD -bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw -NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV -BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn -ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 -3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z -qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR -p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 -HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw -ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea -HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw -Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh -c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E -RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt -dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku -Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp -3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 -nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF -CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na -xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX -KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 ------END CERTIFICATE----- - -# Issuer: CN=CA Disig Root R2 O=Disig a.s. -# Subject: CN=CA Disig Root R2 O=Disig a.s. -# Label: "CA Disig Root R2" -# Serial: 10572350602393338211 -# MD5 Fingerprint: 26:01:fb:d8:27:a7:17:9a:45:54:38:1a:43:01:3b:03 -# SHA1 Fingerprint: b5:61:eb:ea:a4:de:e4:25:4b:69:1a:98:a5:57:47:c2:34:c7:d9:71 -# SHA256 Fingerprint: e2:3d:4a:03:6d:7b:70:e9:f5:95:b1:42:20:79:d2:b9:1e:df:bb:1f:b6:51:a0:63:3e:aa:8a:9d:c5:f8:07:03 ------BEGIN CERTIFICATE----- -MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV -BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu -MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy -MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx -EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw -ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe -NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH -PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I -x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe -QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR -yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO -QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 -H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ -QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD -i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs -nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 -rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI -hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM -tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf -GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb -lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka -+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal -TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i -nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 -gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr -G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os -zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x -L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL ------END CERTIFICATE----- - -# Issuer: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Subject: CN=ACCVRAIZ1 O=ACCV OU=PKIACCV -# Label: "ACCVRAIZ1" -# Serial: 6828503384748696800 -# MD5 Fingerprint: d0:a0:5a:ee:05:b6:09:94:21:a1:7d:f1:b2:29:82:02 -# SHA1 Fingerprint: 93:05:7a:88:15:c6:4f:ce:88:2f:fa:91:16:52:28:78:bc:53:64:17 -# SHA256 Fingerprint: 9a:6e:c0:12:e1:a7:da:9d:be:34:19:4d:47:8a:d7:c0:db:18:22:fb:07:1d:f1:29:81:49:6e:d1:04:38:41:13 ------BEGIN CERTIFICATE----- -MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UE -AwwJQUNDVlJBSVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQsw -CQYDVQQGEwJFUzAeFw0xMTA1MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQ -BgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwHUEtJQUNDVjENMAsGA1UECgwEQUND -VjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCb -qau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gMjmoY -HtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWo -G2ioPej0RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpA -lHPrzg5XPAOBOp0KoVdDaaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhr -IA8wKFSVf+DuzgpmndFALW4ir50awQUZ0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/ -0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDGWuzndN9wrqODJerWx5eH -k6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs78yM2x/47 -4KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMO -m3WR5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpa -cXpkatcnYGMN285J9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPl -uUsXQA+xtrn13k/c4LOsOxFwYIRKQ26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYI -KwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRwOi8vd3d3LmFjY3YuZXMvZmls -ZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEuY3J0MB8GCCsG -AQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 -VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeT -VfZW6oHlNsyMHj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIG -CCsGAQUFBwICMIIBFB6CARAAQQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUA -cgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBhAO0AegAgAGQAZQAgAGwAYQAgAEEA -QwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUAYwBuAG8AbABvAGcA -7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBjAHQA -cgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAA -QwBQAFMAIABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUA -czAwBggrBgEFBQcCARYkaHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2Mu -aHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRt -aW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2MV9kZXIuY3JsMA4GA1Ud -DwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZIhvcNAQEF -BQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdp -D70ER9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gU -JyCpZET/LtZ1qmxNYEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+m -AM/EKXMRNt6GGT6d7hmKG9Ww7Y49nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepD -vV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJTS+xJlsndQAJxGJ3KQhfnlms -tn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3sCPdK6jT2iWH -7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h -I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szA -h1xA2syVP1XgNce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xF -d3+YJ5oyXSrjhO7FmGYvliAd3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2H -pPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3pEfbRD0tVNEYqi4Y7 ------END CERTIFICATE----- - -# Issuer: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA Global Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA Global Root CA" -# Serial: 3262 -# MD5 Fingerprint: f9:03:7e:cf:e6:9e:3c:73:7a:2a:90:07:69:ff:2b:96 -# SHA1 Fingerprint: 9c:bb:48:53:f6:a4:f6:d3:52:a4:e8:32:52:55:60:13:f5:ad:af:65 -# SHA256 Fingerprint: 59:76:90:07:f7:68:5d:0f:cd:50:87:2f:9f:95:d5:75:5a:5b:2b:45:7d:81:f3:69:2b:61:0a:98:67:2f:0e:1b ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx -EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT -VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 -NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT -B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF -10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz -0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh -MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH -zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc -46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 -yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi -laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP -oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA -BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE -qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm -4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL -1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn -LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF -H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo -RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ -nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh -15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW -6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW -nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j -wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz -aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy -KwbQBM0= ------END CERTIFICATE----- - -# Issuer: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Subject: CN=TeliaSonera Root CA v1 O=TeliaSonera -# Label: "TeliaSonera Root CA v1" -# Serial: 199041966741090107964904287217786801558 -# MD5 Fingerprint: 37:41:49:1b:18:56:9a:26:f5:ad:c2:66:fb:40:a5:4c -# SHA1 Fingerprint: 43:13:bb:96:f1:d5:86:9b:c1:4e:6a:92:f6:cf:f6:34:69:87:82:37 -# SHA256 Fingerprint: dd:69:36:fe:21:f8:f0:77:c1:23:a1:a5:21:c1:22:24:f7:22:55:b7:3e:03:a7:26:06:93:e8:a2:4b:0f:a3:89 ------BEGIN CERTIFICATE----- -MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw -NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv -b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD -VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F -VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 -7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X -Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ -/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs -81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm -dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe -Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu -sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 -pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs -slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ -arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD -VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG -9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl -dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx -0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj -TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed -Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 -Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI -OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 -vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW -t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn -HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx -SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= ------END CERTIFICATE----- - -# Issuer: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Subject: CN=T-TeleSec GlobalRoot Class 2 O=T-Systems Enterprise Services GmbH OU=T-Systems Trust Center -# Label: "T-TeleSec GlobalRoot Class 2" -# Serial: 1 -# MD5 Fingerprint: 2b:9b:9e:e4:7b:6c:1f:00:72:1a:cc:c1:77:79:df:6a -# SHA1 Fingerprint: 59:0d:2d:7d:88:4f:40:2e:61:7e:a5:62:32:17:65:cf:17:d8:94:e9 -# SHA256 Fingerprint: 91:e2:f5:78:8d:58:10:eb:a7:ba:58:73:7d:e1:54:8a:8e:ca:cd:01:45:98:bc:0b:14:3e:04:1b:17:05:25:52 ------BEGIN CERTIFICATE----- -MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx -KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd -BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl -YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 -OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy -aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 -ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd -AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC -FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi -1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq -jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ -wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ -WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy -NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC -uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw -IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 -g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN -9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP -BSeOE6Fuwg== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot 2011 O=Atos -# Subject: CN=Atos TrustedRoot 2011 O=Atos -# Label: "Atos TrustedRoot 2011" -# Serial: 6643877497813316402 -# MD5 Fingerprint: ae:b9:c4:32:4b:ac:7f:5d:66:cc:77:94:bb:2a:77:56 -# SHA1 Fingerprint: 2b:b1:f5:3e:55:0c:1d:c5:f1:d4:e6:b7:6a:46:4b:55:06:02:ac:21 -# SHA256 Fingerprint: f3:56:be:a2:44:b7:a9:1e:b3:5d:53:ca:9a:d7:86:4a:ce:01:8e:2d:35:d5:f8:f9:6d:df:68:a6:f4:1a:a4:74 ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UE -AwwVQXRvcyBUcnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQG -EwJERTAeFw0xMTA3MDcxNDU4MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMM -FUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsGA1UECgwEQXRvczELMAkGA1UEBhMC -REUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCVhTuXbyo7LjvPpvMp -Nb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr54rM -VD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+ -SZFhyBH+DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ -4J7sVaE3IqKHBAUsR320HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0L -cp2AMBYHlT8oDv3FdU9T1nSatCQujgKRz3bFmx5VdJx4IbHwLfELn8LVlhgf8FQi -eowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7Rl+lwrrw7GWzbITAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZbNshMBgG -A1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3 -DQEBCwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8j -vZfza1zv7v1Apt+hk6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kP -DpFrdRbhIfzYJsdHt6bPWHJxfrrhTZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pc -maHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a961qn8FYiqTxlVMYVqL2Gns2D -lmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G3mB/ufNPRJLv -KrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 1 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 1 G3" -# Serial: 687049649626669250736271037606554624078720034195 -# MD5 Fingerprint: a4:bc:5b:3f:fe:37:9a:fa:64:f0:e2:fa:05:3d:0b:ab -# SHA1 Fingerprint: 1b:8e:ea:57:96:29:1a:c9:39:ea:b8:0a:81:1a:73:73:c0:93:79:67 -# SHA256 Fingerprint: 8a:86:6f:d1:b2:76:b5:7e:57:8e:92:1c:65:82:8a:2b:ed:58:e9:f2:f2:88:05:41:34:b7:f1:f4:bf:c9:cc:74 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 -MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV -wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe -rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 -68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh -4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp -UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o -abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc -3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G -KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt -hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO -Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt -zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD -ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC -MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 -cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN -qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 -YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv -b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 -8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k -NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj -ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp -q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt -nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 2 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 2 G3" -# Serial: 390156079458959257446133169266079962026824725800 -# MD5 Fingerprint: af:0c:86:6e:bf:40:2d:7f:0b:3e:12:50:ba:12:3d:06 -# SHA1 Fingerprint: 09:3c:61:f3:8b:8b:dc:7d:55:df:75:38:02:05:00:e1:25:f5:c8:36 -# SHA256 Fingerprint: 8f:e4:fb:0a:f9:3a:4d:0d:67:db:0b:eb:b2:3e:37:c7:1b:f3:25:dc:bc:dd:24:0e:a0:4d:af:58:b4:7e:18:40 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 -MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf -qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW -n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym -c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ -O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 -o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j -IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq -IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz -8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh -vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l -7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG -cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD -ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 -AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC -roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga -W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n -lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE -+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV -csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd -dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg -KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM -HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 -WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M ------END CERTIFICATE----- - -# Issuer: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Subject: CN=QuoVadis Root CA 3 G3 O=QuoVadis Limited -# Label: "QuoVadis Root CA 3 G3" -# Serial: 268090761170461462463995952157327242137089239581 -# MD5 Fingerprint: df:7d:b9:ad:54:6f:68:a1:df:89:57:03:97:43:b0:d7 -# SHA1 Fingerprint: 48:12:bd:92:3c:a8:c4:39:06:e7:30:6d:27:96:e6:a4:cf:22:2e:7d -# SHA256 Fingerprint: 88:ef:81:de:20:2e:b0:18:45:2e:43:f8:64:72:5c:ea:5f:bd:1f:c2:d9:d2:05:73:07:09:c5:d8:b8:69:0f:46 ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL -BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc -BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 -MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM -aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR -/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu -FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR -U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c -ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR -FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k -A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw -eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl -sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp -VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q -A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ -ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD -ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px -KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI -FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv -oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg -u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP -0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf -3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl -8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ -DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN -PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ -ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G2" -# Serial: 15385348160840213938643033620894905419 -# MD5 Fingerprint: 92:38:b9:f8:63:24:82:65:2c:57:33:e6:fe:81:8f:9d -# SHA1 Fingerprint: a1:4b:48:d9:43:ee:0a:0e:40:90:4f:3c:e0:a4:c0:91:93:51:5d:3f -# SHA256 Fingerprint: 7d:05:eb:b6:82:33:9f:8c:94:51:ee:09:4e:eb:fe:fa:79:53:a1:14:ed:b2:f4:49:49:45:2f:ab:7d:2f:c1:85 ------BEGIN CERTIFICATE----- -MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA -n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc -biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp -EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA -bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu -YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB -AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW -BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI -QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I -0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni -lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 -B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv -ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo -IhNzbM8m9Yop5w== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root G3" -# Serial: 15459312981008553731928384953135426796 -# MD5 Fingerprint: 7c:7f:65:31:0c:81:df:8d:ba:3e:99:e2:5c:ad:6e:fb -# SHA1 Fingerprint: f5:17:a2:4f:9a:48:c6:c9:f8:a2:00:26:9f:dc:0f:48:2c:ab:30:89 -# SHA256 Fingerprint: 7e:37:cb:8b:4c:47:09:0c:ab:36:55:1b:a6:f4:5d:b8:40:68:0f:ba:16:6a:95:2d:b1:00:71:7f:43:05:3f:c2 ------BEGIN CERTIFICATE----- -MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg -RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf -Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q -RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD -AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY -JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv -6pZjamVFkpUBtA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G2 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G2" -# Serial: 4293743540046975378534879503202253541 -# MD5 Fingerprint: e4:a6:8a:c8:54:ac:52:42:46:0a:fd:72:48:1b:2a:44 -# SHA1 Fingerprint: df:3c:24:f9:bf:d6:66:76:1b:26:80:73:fe:06:d1:cc:8d:4f:82:a4 -# SHA256 Fingerprint: cb:3c:cb:b7:60:31:e5:e0:13:8f:8d:d3:9a:23:f9:de:47:ff:c3:5e:43:c1:14:4c:ea:27:d4:6a:5a:b1:cb:5f ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root G3 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root G3" -# Serial: 7089244469030293291760083333884364146 -# MD5 Fingerprint: f5:5d:a4:50:a5:fb:28:7e:1e:0f:0d:cc:96:57:56:ca -# SHA1 Fingerprint: 7e:04:de:89:6a:3e:66:6d:00:e6:87:d3:3f:fa:d9:3b:e8:3d:34:9e -# SHA256 Fingerprint: 31:ad:66:48:f8:10:41:38:c7:38:f3:9e:a4:32:01:33:39:3e:3a:18:cc:02:29:6e:f9:7c:2a:c9:ef:67:31:d0 ------BEGIN CERTIFICATE----- -MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw -CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu -ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe -Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw -EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x -IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG -fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO -Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd -BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx -AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ -oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 -sycX ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Trusted Root G4 O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Trusted Root G4" -# Serial: 7451500558977370777930084869016614236 -# MD5 Fingerprint: 78:f2:fc:aa:60:1f:2f:b4:eb:c9:37:ba:53:2e:75:49 -# SHA1 Fingerprint: dd:fb:16:cd:49:31:c9:73:a2:03:7d:3f:c8:3a:4d:7d:77:5d:05:e4 -# SHA256 Fingerprint: 55:2f:7b:dc:f1:a7:af:9e:6c:e6:72:01:7f:4f:12:ab:f7:72:40:c7:8e:76:1a:c2:03:d1:d9:d2:0a:c8:99:88 ------BEGIN CERTIFICATE----- -MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg -RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV -UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu -Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y -ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If -xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV -ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO -DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ -jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ -CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi -EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM -fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY -uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK -chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t -9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB -hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD -ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 -SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd -+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc -fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa -sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N -cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N -0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie -4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI -r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 -/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm -gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ ------END CERTIFICATE----- - -# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited -# Label: "COMODO RSA Certification Authority" -# Serial: 101909084537582093308941363524873193117 -# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18 -# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4 -# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34 ------BEGIN CERTIFICATE----- -MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB -hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV -BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5 -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT -EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR -Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR -6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X -pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC -9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV -/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf -Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z -+pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w -qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah -SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC -u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf -Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq -crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E -FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB -/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl -wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM -4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV -2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna -FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ -CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK -boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke -jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL -S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb -QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl -0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB -NVOFBkpdn627G190 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust RSA Certification Authority O=The USERTRUST Network -# Label: "USERTrust RSA Certification Authority" -# Serial: 2645093764781058787591871645665788717 -# MD5 Fingerprint: 1b:fe:69:d1:91:b7:19:33:a3:72:a8:0f:e1:55:e5:b5 -# SHA1 Fingerprint: 2b:8f:1b:57:33:0d:bb:a2:d0:7a:6c:51:f7:0e:e9:0d:da:b9:ad:8e -# SHA256 Fingerprint: e7:93:c9:b0:2f:d8:aa:13:e2:1c:31:22:8a:cc:b0:81:19:64:3b:74:9c:89:89:64:b1:74:6d:46:c3:d4:cb:d2 ------BEGIN CERTIFICATE----- -MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCB -iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0pl -cnNleSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNV -BAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAw -MjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNV -BAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU -aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCAEmUXNg7D2wiz0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B -3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2jY0K2dvKpOyuR+OJv0OwWIJAJPuLodMkY -tJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFnRghRy4YUVD+8M/5+bJz/ -Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O+T23LLb2 -VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT -79uq/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6 -c0Plfg6lZrEpfDKEY1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmT -Yo61Zs8liM2EuLE/pDkP2QKe6xJMlXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97l -c6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8yexDJtC/QV9AqURE9JnnV4ee -UB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+eLf8ZxXhyVeE -Hg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd -BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPF -Up/L+M+ZBn8b2kMVn54CVVeWFPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KO -VWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ7l8wXEskEVX/JJpuXior7gtNn3/3 -ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQEg9zKC7F4iRO/Fjs -8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM8WcR -iQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYze -Sf7dNXGiFSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZ -XHlKYC6SQK5MNyosycdiyA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/ -qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9cJ2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRB -VXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGwsAvgnEzDHNb842m1R0aB -L6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gxQ+6IHdfG -jjxDah2nGN59PRbxYvnKkKj9 ------END CERTIFICATE----- - -# Issuer: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Subject: CN=USERTrust ECC Certification Authority O=The USERTRUST Network -# Label: "USERTrust ECC Certification Authority" -# Serial: 123013823720199481456569720443997572134 -# MD5 Fingerprint: fa:68:bc:d9:b5:7f:ad:fd:c9:1d:06:83:28:cc:24:c1 -# SHA1 Fingerprint: d1:cb:ca:5d:b2:d5:2a:7f:69:3b:67:4d:e5:f0:5a:1d:0c:95:7d:f0 -# SHA256 Fingerprint: 4f:f4:60:d5:4b:9c:86:da:bf:bc:fc:57:12:e0:40:0d:2b:ed:3f:bc:4d:4f:bd:aa:86:e0:6a:dc:d2:a9:ad:7a ------BEGIN CERTIFICATE----- -MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDEL -MAkGA1UEBhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNl -eSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMT -JVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMjAx -MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgT -Ck5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVUaGUg -VVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqflo -I+d61SRvU8Za2EurxtW20eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinng -o4N+LZfQYcTxmdwlkWOrfzCjtHDix6EznPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0G -A1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBBHU6+4WMB -zzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbW -RNZu9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R5 -# Label: "GlobalSign ECC Root CA - R5" -# Serial: 32785792099990507226680698011560947931244 -# MD5 Fingerprint: 9f:ad:3b:1c:02:1e:8a:ba:17:74:38:81:0c:a2:bc:08 -# SHA1 Fingerprint: 1f:24:c6:30:cd:a4:18:ef:20:69:ff:ad:4f:dd:5f:46:3a:1b:69:aa -# SHA256 Fingerprint: 17:9f:bc:14:8a:3d:d0:0f:d2:4e:a1:34:58:cc:43:bf:a7:f5:9c:81:82:d7:83:a5:13:f6:eb:ec:10:0c:89:24 ------BEGIN CERTIFICATE----- -MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk -MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH -bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX -DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD -QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu -MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc -8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke -hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI -KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg -515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO -xwy8p2Fp8fc74SrL+SvzZpA3 ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Commercial Root CA 1 O=IdenTrust -# Label: "IdenTrust Commercial Root CA 1" -# Serial: 13298821034946342390520003877796839426 -# MD5 Fingerprint: b3:3e:77:73:75:ee:a0:d3:e3:7e:49:63:49:59:bb:c7 -# SHA1 Fingerprint: df:71:7e:aa:4a:d9:4e:c9:55:84:99:60:2d:48:de:5f:bc:f0:3a:25 -# SHA256 Fingerprint: 5d:56:49:9b:e4:d2:e0:8b:cf:ca:d0:8a:3e:38:72:3d:50:50:3b:de:70:69:48:e4:2f:55:60:30:19:e5:28:ae ------BEGIN CERTIFICATE----- -MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu -VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw -MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw -JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT -3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU -+ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp -S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 -bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi -T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL -vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK -Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK -dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT -c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv -l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N -iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB -/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD -ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH -6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt -LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 -nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 -+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK -W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT -AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq -l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG -4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ -mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A -7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H ------END CERTIFICATE----- - -# Issuer: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Subject: CN=IdenTrust Public Sector Root CA 1 O=IdenTrust -# Label: "IdenTrust Public Sector Root CA 1" -# Serial: 13298821034946342390521976156843933698 -# MD5 Fingerprint: 37:06:a5:b0:fc:89:9d:ba:f4:6b:8c:1a:64:cd:d5:ba -# SHA1 Fingerprint: ba:29:41:60:77:98:3f:f4:f3:ef:f2:31:05:3b:2e:ea:6d:4d:45:fd -# SHA256 Fingerprint: 30:d0:89:5a:9a:44:8a:26:20:91:63:55:22:d1:f5:20:10:b5:86:7a:ca:e1:2c:78:ef:95:8f:d4:f4:38:9f:2f ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu -VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN -MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 -MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 -ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy -RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS -bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF -/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R -3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw -EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy -9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V -GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ -2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV -WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD -W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN -AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj -t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV -DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 -TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G -lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW -mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df -WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 -+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ -tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA -GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv -8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - G2 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2009 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - G2" -# Serial: 1246989352 -# MD5 Fingerprint: 4b:e2:c9:91:96:65:0c:f4:0e:5a:93:92:a0:0a:fe:b2 -# SHA1 Fingerprint: 8c:f4:27:fd:79:0c:3a:d1:66:06:8d:e8:1e:57:ef:bb:93:22:72:d4 -# SHA256 Fingerprint: 43:df:57:74:b0:3e:7f:ef:5f:e4:0d:93:1a:7b:ed:f1:bb:2e:6b:42:73:8c:4e:6d:38:41:10:3d:3a:a7:f3:39 ------BEGIN CERTIFICATE----- -MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 -cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs -IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz -dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy -NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu -dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt -dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 -aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK -AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T -RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN -cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW -wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 -U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 -jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP -BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN -BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ -jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ -Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v -1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R -nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH -VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Subject: CN=Entrust Root Certification Authority - EC1 O=Entrust, Inc. OU=See www.entrust.net/legal-terms/(c) 2012 Entrust, Inc. - for authorized use only -# Label: "Entrust Root Certification Authority - EC1" -# Serial: 51543124481930649114116133369 -# MD5 Fingerprint: b6:7e:1d:f0:58:c5:49:6c:24:3b:3d:ed:98:18:ed:bc -# SHA1 Fingerprint: 20:d8:06:40:df:9b:25:f5:12:25:3a:11:ea:f7:59:8a:eb:14:b5:47 -# SHA256 Fingerprint: 02:ed:0e:b2:8c:14:da:45:16:5c:56:67:91:70:0d:64:51:d7:fb:56:f0:b2:ab:1d:3b:8e:b0:70:e5:6e:df:f5 ------BEGIN CERTIFICATE----- -MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG -A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 -d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu -dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq -RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy -MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD -VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 -L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g -Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi -A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt -ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH -Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O -BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC -R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX -hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G ------END CERTIFICATE----- - -# Issuer: CN=CFCA EV ROOT O=China Financial Certification Authority -# Subject: CN=CFCA EV ROOT O=China Financial Certification Authority -# Label: "CFCA EV ROOT" -# Serial: 407555286 -# MD5 Fingerprint: 74:e1:b6:ed:26:7a:7a:44:30:33:94:ab:7b:27:81:30 -# SHA1 Fingerprint: e2:b8:29:4b:55:84:ab:6b:58:c2:90:46:6c:ac:3f:b8:39:8f:84:83 -# SHA256 Fingerprint: 5c:c3:d7:8e:4e:1d:5e:45:54:7a:04:e6:87:3e:64:f9:0c:f9:53:6d:1c:cc:2e:f8:00:f3:55:c4:c5:fd:70:fd ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJD -TjEwMC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y -aXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkx -MjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEwMC4GA1UECgwnQ2hpbmEgRmluYW5j -aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNBIEVWIFJP -T1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnVBU03 -sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpL -TIpTUnrD7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5 -/ZOkVIBMUtRSqy5J35DNuF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp -7hZZLDRJGqgG16iI0gNyejLi6mhNbiyWZXvKWfry4t3uMCz7zEasxGPrb382KzRz -EpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7xzbh72fROdOXW3NiGUgt -hxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9fpy25IGvP -a931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqot -aK8KgWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNg -TnYGmE69g60dWIolhdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfV -PKPtl8MeNPo4+QgO48BdK4PRVmrJtqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hv -cWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAfBgNVHSMEGDAWgBTj/i39KNAL -tbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAd -BgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB -ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObT -ej/tUxPQ4i9qecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdL -jOztUmCypAbqTuv0axn96/Ua4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBS -ESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sGE5uPhnEFtC+NiWYzKXZUmhH4J/qy -P5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfXBDrDMlI1Dlb4pd19 -xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjnaH9d -Ci77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN -5mydLIhyPDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe -/v5WOaHIz16eGWRGENoXkbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+Z -AAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3CekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ -5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GB CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GB CA" -# Serial: 157768595616588414422159278966750757568 -# MD5 Fingerprint: a4:eb:b9:61:28:2e:b7:2f:98:b0:35:26:90:99:51:1d -# SHA1 Fingerprint: 0f:f9:40:76:18:d3:d7:6a:4b:98:f0:a8:35:9e:0c:fd:27:ac:cc:ed -# SHA256 Fingerprint: 6b:9c:08:e8:6e:b0:f7:67:cf:ad:65:cd:98:b6:21:49:e5:49:4a:67:f5:84:5e:7b:d1:ed:01:9f:27:b8:6b:d6 ------BEGIN CERTIFICATE----- -MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt -MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg -Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i -YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x -CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG -b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh -bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 -HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx -WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX -1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk -u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P -99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r -M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB -BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh -cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 -gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO -ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf -aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic -Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= ------END CERTIFICATE----- - -# Issuer: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Subject: CN=SZAFIR ROOT CA2 O=Krajowa Izba Rozliczeniowa S.A. -# Label: "SZAFIR ROOT CA2" -# Serial: 357043034767186914217277344587386743377558296292 -# MD5 Fingerprint: 11:64:c1:89:b0:24:b1:8c:b1:07:7e:89:9e:51:9e:99 -# SHA1 Fingerprint: e2:52:fa:95:3f:ed:db:24:60:bd:6e:28:f3:9c:cc:cf:5e:b3:3f:de -# SHA256 Fingerprint: a1:33:9d:33:28:1a:0b:56:e5:57:d3:d3:2b:1c:e7:f9:36:7e:b0:94:bd:5f:a7:2a:7e:50:04:c8:de:d7:ca:fe ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6 -ZW5pb3dhIFMuQS4xGDAWBgNVBAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkw -NzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L -cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYDVQQDDA9TWkFGSVIg -Uk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5QqEvN -QLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT -3PSQ1hNKDJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw -3gAeqDRHu5rr/gsUvTaE2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr6 -3fE9biCloBK0TXC5ztdyO4mTp4CEHCdJckm1/zuVnsHMyAHs6A6KCpbns6aH5db5 -BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwiieDhZNRnvDF5YTy7ykHN -XGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsF -AAOCAQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw -8PRBEew/R40/cof5O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOG -nXkZ7/e7DDWQw4rtTw/1zBLZpD67oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCP -oky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul4+vJhaAlIDf7js4MNIThPIGy -d05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6+/NNIxuZMzSg -LvWpCz/UXeHPhJ/iGcJfitYgHuNztw== ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Network CA 2 O=Unizeto Technologies S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Network CA 2" -# Serial: 44979900017204383099463764357512596969 -# MD5 Fingerprint: 6d:46:9e:d9:25:6d:08:23:5b:5e:74:7d:1e:27:db:f2 -# SHA1 Fingerprint: d3:dd:48:3e:2b:bf:4c:05:e8:af:10:f5:fa:76:26:cf:d3:dc:30:92 -# SHA256 Fingerprint: b6:76:f2:ed:da:e8:77:5c:d3:6c:b0:f6:3c:d1:d4:60:39:61:f4:9e:62:65:ba:01:3a:2f:03:07:b6:d0:b8:04 ------BEGIN CERTIFICATE----- -MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCB -gDELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMu -QS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIG -A1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29yayBDQSAyMCIYDzIwMTExMDA2MDgz -OTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZ -VW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3 -b3JrIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWA -DGSdhhuWZGc/IjoedQF97/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn -0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+oCgCXhVqqndwpyeI1B+twTUrWwbNWuKFB -OJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40bRr5HMNUuctHFY9rnY3lE -fktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2puTRZCr+E -Sv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1m -o130GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02i -sx7QBlrd9pPPV3WZ9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOW -OZV7bIBaTxNyxtd9KXpEulKkKtVBRgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgez -Tv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pyehizKV/Ma5ciSixqClnrDvFAS -adgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vMBhBgu4M1t15n -3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMC -AQYwDQYJKoZIhvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQ -F/xlhMcQSZDe28cmk4gmb3DWAl45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTf -CVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuAL55MYIR4PSFk1vtBHxgP58l1cb29 -XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMoclm2q8KMZiYcdywm -djWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tMpkT/ -WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jb -AoJnwTnbw3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksq -P/ujmv5zMnHCnsZy4YpoJ/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Ko -b7a6bINDd82Kkhehnlt4Fj1F4jNy3eFmypnTycUm/Q1oBEauttmbjL4ZvrHG8hnj -XALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLXis7VmFxWlgPF7ncGNf/P -5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7zAYspsbi -DrW5viSP ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: ca:ff:e2:db:03:d9:cb:4b:e9:0f:ad:84:fd:7b:18:ce -# SHA1 Fingerprint: 01:0c:06:95:a6:98:19:14:ff:bf:5f:c6:b0:b6:95:ea:29:e9:12:a6 -# SHA256 Fingerprint: a0:40:92:9a:02:ce:53:b4:ac:f4:f2:ff:c6:98:1c:e4:49:6f:75:5e:6d:45:fe:0b:2a:69:2b:cd:52:52:3f:36 ------BEGIN CERTIFICATE----- -MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1Ix -DzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5k -IFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMT -N0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9v -dENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAxMTIxWjCBpjELMAkG -A1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNh -ZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkx -QDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 -dGlvbnMgUm9vdENBIDIwMTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQDC+Kk/G4n8PDwEXT2QNrCROnk8ZlrvbTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA -4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+ehiGsxr/CL0BgzuNtFajT0 -AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+6PAQZe10 -4S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06C -ojXdFPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV -9Cz82XBST3i4vTwri5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrD -gfgXy5I2XdGj2HUb4Ysn6npIQf1FGQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6 -Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2fu/Z8VFRfS0myGlZYeCsargq -NhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9muiNX6hME6wGko -LfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc -Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNV -HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVd -ctA4GGqd83EkVAswDQYJKoZIhvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0I -XtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+D1hYc2Ryx+hFjtyp8iY/xnmMsVMI -M4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrMd/K4kPFox/la/vot -9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+yd+2V -Z5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/ea -j8GsGsVn82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnh -X9izjFk0WaSrT2y7HxjbdavYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQ -l033DlZdwJVqwjbDG2jJ9SrcR5q+ss7FJej6A7na+RZukYT1HCjI/CbM1xyQVqdf -bzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVtJ94Cj8rDtSvK6evIIVM4 -pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGaJI7ZjnHK -e7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0 -vm9qp/UsQu0yrbYhnr68 ------END CERTIFICATE----- - -# Issuer: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Subject: CN=Hellenic Academic and Research Institutions ECC RootCA 2015 O=Hellenic Academic and Research Institutions Cert. Authority -# Label: "Hellenic Academic and Research Institutions ECC RootCA 2015" -# Serial: 0 -# MD5 Fingerprint: 81:e5:b4:17:eb:c2:f5:e1:4b:0d:41:7b:49:92:fe:ef -# SHA1 Fingerprint: 9f:f1:71:8d:92:d5:9a:f3:7d:74:97:b4:bc:6f:84:68:0b:ba:b6:66 -# SHA256 Fingerprint: 44:b5:45:aa:8a:25:e6:5a:73:ca:15:dc:27:fc:36:d2:4c:1c:b9:95:3a:06:65:39:b1:15:82:dc:48:7b:48:33 ------BEGIN CERTIFICATE----- -MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzAN -BgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hl -bGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgRUNDIFJv -b3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEwMzcxMlowgaoxCzAJ -BgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmljIEFj -YWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5 -MUQwQgYDVQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0 -dXRpb25zIEVDQyBSb290Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKg -QehLgoRc4vgxEZmGZE4JJS+dQS8KrjVPdJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJa -jq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoKVlp8aQuqgAkkbH7BRqNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFLQi -C4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaep -lSTAGiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7Sof -TUwJCA3sS61kFyjndc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X1 O=Internet Security Research Group -# Subject: CN=ISRG Root X1 O=Internet Security Research Group -# Label: "ISRG Root X1" -# Serial: 172886928669790476064670243504169061120 -# MD5 Fingerprint: 0c:d2:f9:e0:da:17:73:e9:ed:86:4d:a5:e3:70:e7:4e -# SHA1 Fingerprint: ca:bd:2a:79:a1:07:6a:31:f2:1d:25:36:35:cb:03:9d:43:29:a5:e8 -# SHA256 Fingerprint: 96:bc:ec:06:26:49:76:f3:74:60:77:9a:cf:28:c5:a7:cf:e8:a3:c0:aa:e1:1a:8f:fc:ee:05:c0:bd:df:08:c6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Subject: O=FNMT-RCM OU=AC RAIZ FNMT-RCM -# Label: "AC RAIZ FNMT-RCM" -# Serial: 485876308206448804701554682760554759 -# MD5 Fingerprint: e2:09:04:b4:d3:bd:d1:a0:14:fd:1a:d2:47:c4:57:1d -# SHA1 Fingerprint: ec:50:35:07:b2:15:c4:95:62:19:e2:a8:9a:5b:42:99:2c:4c:2c:20 -# SHA256 Fingerprint: eb:c5:57:0c:29:01:8c:4d:67:b1:aa:12:7b:af:12:f7:03:b4:61:1e:bc:17:b7:da:b5:57:38:94:17:9b:93:fa ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsx -CzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJ -WiBGTk1ULVJDTTAeFw0wODEwMjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJ -BgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBG -Tk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALpxgHpMhm5/ -yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcfqQgf -BBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAz -WHFctPVrbtQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxF -tBDXaEAUwED653cXeuYLj2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z -374jNUUeAlz+taibmSXaXvMiwzn15Cou08YfxGyqxRxqAQVKL9LFwag0Jl1mpdIC -IfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mwWsXmo8RZZUc1g16p6DUL -mbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnTtOmlcYF7 -wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peS -MKGJ47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2 -ZSysV4999AeU14ECll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMet -UqIJ5G+GR4of6ygnXYMgrwTJbFaai0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFPd9xf3E6Jobd2Sn9R2gzL+H -YJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1odHRwOi8vd3d3 -LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD -nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1 -RXxlDPiyN8+sD8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYM -LVN0V2Ue1bLdI4E7pWYjJ2cJj+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf -77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrTQfv6MooqtyuGC2mDOL7Nii4LcK2N -JpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW+YJF1DngoABd15jm -fZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7Ixjp -6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp -1txyM/1d8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B -9kiABdcPUXmsEKvU7ANm5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wok -RqEIr9baRRmW1FMdW4R58MD3R++Lj8UGrp1MYp3/RgT408m2ECVAdf4WqslKYIYv -uu8wd+RU4riEmViAqhOLUTpPSPaLtrM= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 1 O=Amazon -# Subject: CN=Amazon Root CA 1 O=Amazon -# Label: "Amazon Root CA 1" -# Serial: 143266978916655856878034712317230054538369994 -# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6 -# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16 -# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e ------BEGIN CERTIFICATE----- -MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj -ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM -9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw -IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6 -VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L -93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm -jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA -A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI -U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs -N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv -o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU -5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy -rqXRfboQnoZsG4q5WTP468SQvvG5 ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 2 O=Amazon -# Subject: CN=Amazon Root CA 2 O=Amazon -# Label: "Amazon Root CA 2" -# Serial: 143266982885963551818349160658925006970653239 -# MD5 Fingerprint: c8:e5:8d:ce:a8:42:e2:7a:c0:2a:5c:7c:9e:26:bf:66 -# SHA1 Fingerprint: 5a:8c:ef:45:d7:a6:98:59:76:7a:8c:8b:44:96:b5:78:cf:47:4b:1a -# SHA256 Fingerprint: 1b:a5:b2:aa:8c:65:40:1a:82:96:01:18:f8:0b:ec:4f:62:30:4d:83:ce:c4:71:3a:19:c3:9c:01:1e:a4:6d:b4 ------BEGIN CERTIFICATE----- -MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF -ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6 -b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL -MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv -b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK -gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ -W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg -1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K -8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r -2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me -z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR -8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj -mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz -7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6 -+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI -0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm -UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2 -LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY -+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS -k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl -7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm -btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl -urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+ -fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63 -n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE -76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H -9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT -4PsJYGw= ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 3 O=Amazon -# Subject: CN=Amazon Root CA 3 O=Amazon -# Label: "Amazon Root CA 3" -# Serial: 143266986699090766294700635381230934788665930 -# MD5 Fingerprint: a0:d4:ef:0b:f7:b5:d8:49:95:2a:ec:f5:c4:fc:81:87 -# SHA1 Fingerprint: 0d:44:dd:8c:3c:8c:1a:1a:58:75:64:81:e9:0f:2e:2a:ff:b3:d2:6e -# SHA256 Fingerprint: 18:ce:6c:fe:7b:f1:4e:60:b2:e3:47:b8:df:e8:68:cb:31:d0:2e:bb:3a:da:27:15:69:f5:03:43:b4:6d:b3:a4 ------BEGIN CERTIFICATE----- -MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl -ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j -QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr -ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr -BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM -YyRIHN8wfdVoOw== ------END CERTIFICATE----- - -# Issuer: CN=Amazon Root CA 4 O=Amazon -# Subject: CN=Amazon Root CA 4 O=Amazon -# Label: "Amazon Root CA 4" -# Serial: 143266989758080763974105200630763877849284878 -# MD5 Fingerprint: 89:bc:27:d5:eb:17:8d:06:6a:69:d5:fd:89:47:b4:cd -# SHA1 Fingerprint: f6:10:84:07:d6:f8:bb:67:98:0c:c2:e2:44:c2:eb:ae:1c:ef:63:be -# SHA256 Fingerprint: e3:5d:28:41:9e:d0:20:25:cf:a6:90:38:cd:62:39:62:45:8d:a5:c6:95:fb:de:a3:c2:2b:0b:fb:25:89:70:92 ------BEGIN CERTIFICATE----- -MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5 -MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g -Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG -A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg -Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi -9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk -M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB -/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB -MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw -CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW -1KyLa2tJElMzrdfkviT8tQp21KW8EA== ------END CERTIFICATE----- - -# Issuer: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Subject: CN=TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1 O=Turkiye Bilimsel ve Teknolojik Arastirma Kurumu - TUBITAK OU=Kamu Sertifikasyon Merkezi - Kamu SM -# Label: "TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1" -# Serial: 1 -# MD5 Fingerprint: dc:00:81:dc:69:2f:3e:2f:b0:3b:f6:3d:5a:91:8e:49 -# SHA1 Fingerprint: 31:43:64:9b:ec:ce:27:ec:ed:3a:3f:0b:8f:0d:e4:e8:91:dd:ee:ca -# SHA256 Fingerprint: 46:ed:c3:68:90:46:d5:3a:45:3f:b3:10:4a:b8:0d:ca:ec:65:8b:26:60:ea:16:29:dd:7e:86:79:90:64:87:16 ------BEGIN CERTIFICATE----- -MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIx -GDAWBgNVBAcTD0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxp -bXNlbCB2ZSBUZWtub2xvamlrIEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0w -KwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24gTWVya2V6aSAtIEthbXUgU00xNjA0 -BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRpZmlrYXNpIC0gU3Vy -dW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYDVQQG -EwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXll -IEJpbGltc2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklU -QUsxLTArBgNVBAsTJEthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBT -TTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11IFNNIFNTTCBLb2sgU2VydGlmaWthc2kg -LSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr3UwM6q7 -a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y86Ij5iySr -LqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INr -N3wcwv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2X -YacQuFWQfw4tJzh03+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/ -iSIzL+aFCr2lqBs23tPcLG07xxO9WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4f -AJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQUZT/HiobGPN08VFw1+DrtUgxH -V8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh -AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPf -IPP54+M638yclNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4 -lzwDGrpDxpa5RXI4s6ehlj2Re37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c -8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0jq5Rm+K37DwhuJi1/FwcJsoz7UMCf -lo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM= ------END CERTIFICATE----- - -# Issuer: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Subject: CN=GDCA TrustAUTH R5 ROOT O=GUANG DONG CERTIFICATE AUTHORITY CO.,LTD. -# Label: "GDCA TrustAUTH R5 ROOT" -# Serial: 9009899650740120186 -# MD5 Fingerprint: 63:cc:d9:3d:34:35:5c:6f:53:a3:e2:08:70:48:1f:b4 -# SHA1 Fingerprint: 0f:36:38:5b:81:1a:25:c3:9b:31:4e:83:ca:e9:34:66:70:cc:74:b4 -# SHA256 Fingerprint: bf:ff:8f:d0:44:33:48:7d:6a:8a:a6:0c:1a:29:76:7a:9f:c2:bb:b0:5e:42:0f:71:3a:13:b9:92:89:1d:38:93 ------BEGIN CERTIFICATE----- -MIIFiDCCA3CgAwIBAgIIfQmX/vBH6nowDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE -BhMCQ04xMjAwBgNVBAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZ -IENPLixMVEQuMR8wHQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMB4XDTE0 -MTEyNjA1MTMxNVoXDTQwMTIzMTE1NTk1OVowYjELMAkGA1UEBhMCQ04xMjAwBgNV -BAoMKUdVQU5HIERPTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZIENPLixMVEQuMR8w -HQYDVQQDDBZHRENBIFRydXN0QVVUSCBSNSBST09UMIICIjANBgkqhkiG9w0BAQEF -AAOCAg8AMIICCgKCAgEA2aMW8Mh0dHeb7zMNOwZ+Vfy1YI92hhJCfVZmPoiC7XJj -Dp6L3TQsAlFRwxn9WVSEyfFrs0yw6ehGXTjGoqcuEVe6ghWinI9tsJlKCvLriXBj -TnnEt1u9ol2x8kECK62pOqPseQrsXzrj/e+APK00mxqriCZ7VqKChh/rNYmDf1+u -KU49tm7srsHwJ5uu4/Ts765/94Y9cnrrpftZTqfrlYwiOXnhLQiPzLyRuEH3FMEj -qcOtmkVEs7LXLM3GKeJQEK5cy4KOFxg2fZfmiJqwTTQJ9Cy5WmYqsBebnh52nUpm -MUHfP/vFBu8btn4aRjb3ZGM74zkYI+dndRTVdVeSN72+ahsmUPI2JgaQxXABZG12 -ZuGR224HwGGALrIuL4xwp9E7PLOR5G62xDtw8mySlwnNR30YwPO7ng/Wi64HtloP -zgsMR6flPri9fcebNaBhlzpBdRfMK5Z3KpIhHtmVdiBnaM8Nvd/WHwlqmuLMc3Gk -L30SgLdTMEZeS1SZD2fJpcjyIMGC7J0R38IC+xo70e0gmu9lZJIQDSri3nDxGGeC -jGHeuLzRL5z7D9Ar7Rt2ueQ5Vfj4oR24qoAATILnsn8JuLwwoC8N9VKejveSswoA -HQBUlwbgsQfZxw9cZX08bVlX5O2ljelAU58VS6Bx9hoh49pwBiFYFIeFd3mqgnkC -AwEAAaNCMEAwHQYDVR0OBBYEFOLJQJ9NzuiaoXzPDj9lxSmIahlRMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQDRSVfg -p8xoWLoBDysZzY2wYUWsEe1jUGn4H3++Fo/9nesLqjJHdtJnJO29fDMylyrHBYZm -DRd9FBUb1Ov9H5r2XpdptxolpAqzkT9fNqyL7FeoPueBihhXOYV0GkLH6VsTX4/5 -COmSdI31R9KrO9b7eGZONn356ZLpBN79SWP8bfsUcZNnL0dKt7n/HipzcEYwv1ry -L3ml4Y0M2fmyYzeMN2WFcGpcWwlyua1jPLHd+PwyvzeG5LuOmCd+uh8W4XAR8gPf -JWIyJyYYMoSf/wA6E7qaTfRPuBRwIrHKK5DOKcFw9C+df/KQHtZa37dG/OaG+svg -IHZ6uqbL9XzeYqWxi+7egmaKTjowHz+Ay60nugxe19CxVsp3cbK1daFQqUBDF8Io -2c9Si1vIY9RCPqAzekYu9wogRlR+ak8x8YF+QnQ4ZXMn7sZ8uI7XpTrXmKGcjBBV -09tL7ECQ8s1uV9JiDnxXk7Gnbc2dg7sq5+W2O3FYrf3RRbxake5TFW/TRQl1brqQ -XR4EzzffHqhmsYzmIGrv/EhOdJhCrylvLmrH+33RZjEizIYAfmaDDEL0vTSSwxrq -T8p+ck0LcIymSLumoRT2+1hEmRSuqguTaaApJUqlyyvdimYHFngVV3Eb7PVHhPOe -MTd61X8kreS8/f3MboPoDKi3QWwH3b08hpcv0g== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority RSA O=SSL Corporation -# Label: "SSL.com Root Certification Authority RSA" -# Serial: 8875640296558310041 -# MD5 Fingerprint: 86:69:12:c0:70:f1:ec:ac:ac:c2:d5:bc:a5:5b:a1:29 -# SHA1 Fingerprint: b7:ab:33:08:d1:ea:44:77:ba:14:80:12:5a:6f:bd:a9:36:49:0c:bb -# SHA256 Fingerprint: 85:66:6a:56:2e:e0:be:5c:e9:25:c1:d8:89:0a:6f:76:a8:7e:c1:6d:4d:7d:5f:29:ea:74:19:cf:20:12:3b:69 ------BEGIN CERTIFICATE----- -MIIF3TCCA8WgAwIBAgIIeyyb0xaAMpkwDQYJKoZIhvcNAQELBQAwfDELMAkGA1UE -BhMCVVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQK -DA9TU0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBSU0EwHhcNMTYwMjEyMTczOTM5WhcNNDEwMjEyMTcz -OTM5WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNv -bSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFJTQTCCAiIwDQYJKoZIhvcN -AQEBBQADggIPADCCAgoCggIBAPkP3aMrfcvQKv7sZ4Wm5y4bunfh4/WvpOz6Sl2R -xFdHaxh3a3by/ZPkPQ/CFp4LZsNWlJ4Xg4XOVu/yFv0AYvUiCVToZRdOQbngT0aX -qhvIuG5iXmmxX9sqAn78bMrzQdjt0Oj8P2FI7bADFB0QDksZ4LtO7IZl/zbzXmcC -C52GVWH9ejjt/uIZALdvoVBidXQ8oPrIJZK0bnoix/geoeOy3ZExqysdBP+lSgQ3 -6YWkMyv94tZVNHwZpEpox7Ko07fKoZOI68GXvIz5HdkihCR0xwQ9aqkpk8zruFvh -/l8lqjRYyMEjVJ0bmBHDOJx+PYZspQ9AhnwC9FwCTyjLrnGfDzrIM/4RJTXq/LrF -YD3ZfBjVsqnTdXgDciLKOsMf7yzlLqn6niy2UUb9rwPW6mBo6oUWNmuF6R7As93E -JNyAKoFBbZQ+yODJgUEAnl6/f8UImKIYLEJAs/lvOCdLToD0PYFH4Ih86hzOtXVc -US4cK38acijnALXRdMbX5J+tB5O2UzU1/Dfkw/ZdFr4hc96SCvigY2q8lpJqPvi8 -ZVWb3vUNiSYE/CUapiVpy8JtynziWV+XrOvvLsi81xtZPCvM8hnIk2snYxnP/Okm -+Mpxm3+T/jRnhE6Z6/yzeAkzcLpmpnbtG3PrGqUNxCITIJRWCk4sbE6x/c+cCbqi -M+2HAgMBAAGjYzBhMB0GA1UdDgQWBBTdBAkHovV6fVJTEpKV7jiAJQ2mWTAPBgNV -HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFN0ECQei9Xp9UlMSkpXuOIAlDaZZMA4G -A1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAIBgRlCn7Jp0cHh5wYfGV -cpNxJK1ok1iOMq8bs3AD/CUrdIWQPXhq9LmLpZc7tRiRux6n+UBbkflVma8eEdBc -Hadm47GUBwwyOabqG7B52B2ccETjit3E+ZUfijhDPwGFpUenPUayvOUiaPd7nNgs -PgohyC0zrL/FgZkxdMF1ccW+sfAjRfSda/wZY52jvATGGAslu1OJD7OAUN5F7kR/ -q5R4ZJjT9ijdh9hwZXT7DrkT66cPYakylszeu+1jTBi7qUD3oFRuIIhxdRjqerQ0 -cuAjJ3dctpDqhiVAq+8zD8ufgr6iIPv2tS0a5sKFsXQP+8hlAqRSAUfdSSLBv9jr -a6x+3uxjMxW3IwiPxg+NQVrdjsW5j+VFP3jbutIbQLH+cU0/4IGiul607BXgk90I -H37hVZkLId6Tngr75qNJvTYw/ud3sqB1l7UtgYgXZSD32pAAn8lSzDLKNXz1PQ/Y -K9f1JmzJBjSWFupwWRoyeXkLtoh/D1JIPb9s2KJELtFOt3JY04kTlf5Eq/jXixtu -nLwsoFvVagCvXzfh1foQC5ichucmj87w7G6KVwuA406ywKBjYZC6VWg3dGq2ktuf -oYYitmUnDuy2n0Jg5GfCtdpBC8TTi2EbvPofkSvXRAdeuims2cXp71NIWuuA8ShY -Ic2wBlX7Jz9TkHCpBB5XJ7k= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com Root Certification Authority ECC" -# Serial: 8495723813297216424 -# MD5 Fingerprint: 2e:da:e4:39:7f:9c:8f:37:d1:70:9f:26:17:51:3a:8e -# SHA1 Fingerprint: c3:19:7c:39:24:e6:54:af:1b:c4:ab:20:95:7a:e2:c3:0e:13:02:6a -# SHA256 Fingerprint: 34:17:bb:06:cc:60:07:da:1b:96:1c:92:0b:8a:b4:ce:3f:ad:82:0e:4a:a3:0b:9a:cb:c4:a7:4e:bd:ce:bc:65 ------BEGIN CERTIFICATE----- -MIICjTCCAhSgAwIBAgIIdebfy8FoW6gwCgYIKoZIzj0EAwIwfDELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xMTAvBgNVBAMMKFNTTC5jb20gUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNDAzWhcNNDEwMjEyMTgxNDAz -WjB8MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hvdXN0 -b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjExMC8GA1UEAwwoU1NMLmNvbSBS -b290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABEVuqVDEpiM2nl8ojRfLliJkP9x6jh3MCLOicSS6jkm5BBtHllirLZXI -7Z4INcgn64mMU1jrYor+8FsPazFSY0E7ic3s7LaNGdM0B9y7xgZ/wkWV7Mt/qCPg -CemB+vNH06NjMGEwHQYDVR0OBBYEFILRhXMw5zUE044CkvvlpNHEIejNMA8GA1Ud -EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUgtGFczDnNQTTjgKS++Wk0cQh6M0wDgYD -VR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2cAMGQCMG/n61kRpGDPYbCWe+0F+S8T -kdzt5fxQaxFGRrMcIQBiu77D5+jNB5n5DQtdcj7EqgIwH7y6C+IwJPt8bYBVCpk+ -gA0z5Wajs6O7pdWLjwkspl1+4vAHCGht0nxpbl/f5Wpl ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority RSA R2 O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority RSA R2" -# Serial: 6248227494352943350 -# MD5 Fingerprint: e1:1e:31:58:1a:ae:54:53:02:f6:17:6a:11:7b:4d:95 -# SHA1 Fingerprint: 74:3a:f0:52:9b:d0:32:a0:f4:4a:83:cd:d4:ba:a9:7b:7c:2e:c4:9a -# SHA256 Fingerprint: 2e:7b:f1:6c:c2:24:85:a7:bb:e2:aa:86:96:75:07:61:b0:ae:39:be:3b:2f:e9:d0:cc:6d:4e:f7:34:91:42:5c ------BEGIN CERTIFICATE----- -MIIF6zCCA9OgAwIBAgIIVrYpzTS8ePYwDQYJKoZIhvcNAQELBQAwgYIxCzAJBgNV -BAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4GA1UEBwwHSG91c3RvbjEYMBYGA1UE -CgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQDDC5TU0wuY29tIEVWIFJvb3QgQ2Vy -dGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIyMB4XDTE3MDUzMTE4MTQzN1oXDTQy -MDUzMDE4MTQzN1owgYIxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIDAVUZXhhczEQMA4G -A1UEBwwHSG91c3RvbjEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMTcwNQYDVQQD -DC5TU0wuY29tIEVWIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgUlNBIFIy -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjzZlQOHWTcDXtOlG2mvq -M0fNTPl9fb69LT3w23jhhqXZuglXaO1XPqDQCEGD5yhBJB/jchXQARr7XnAjssuf -OePPxU7Gkm0mxnu7s9onnQqG6YE3Bf7wcXHswxzpY6IXFJ3vG2fThVUCAtZJycxa -4bH3bzKfydQ7iEGonL3Lq9ttewkfokxykNorCPzPPFTOZw+oz12WGQvE43LrrdF9 -HSfvkusQv1vrO6/PgN3B0pYEW3p+pKk8OHakYo6gOV7qd89dAFmPZiw+B6KjBSYR -aZfqhbcPlgtLyEDhULouisv3D5oi53+aNxPN8k0TayHRwMwi8qFG9kRpnMphNQcA -b9ZhCBHqurj26bNg5U257J8UZslXWNvNh2n4ioYSA0e/ZhN2rHd9NCSFg83XqpyQ -Gp8hLH94t2S42Oim9HizVcuE0jLEeK6jj2HdzghTreyI/BXkmg3mnxp3zkyPuBQV -PWKchjgGAGYS5Fl2WlPAApiiECtoRHuOec4zSnaqW4EWG7WK2NAAe15itAnWhmMO -pgWVSbooi4iTsjQc2KRVbrcc0N6ZVTsj9CLg+SlmJuwgUHfbSguPvuUCYHBBXtSu -UDkiFCbLsjtzdFVHB3mBOagwE0TlBIqulhMlQg+5U8Sb/M3kHN48+qvWBkofZ6aY -MBzdLNvcGJVXZsb/XItW9XcCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNV -HSMEGDAWgBT5YLvU49U09rj1BoAlp3PbRmmonjAdBgNVHQ4EFgQU+WC71OPVNPa4 -9QaAJadz20ZpqJ4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4ICAQBW -s47LCp1Jjr+kxJG7ZhcFUZh1++VQLHqe8RT6q9OKPv+RKY9ji9i0qVQBDb6Thi/5 -Sm3HXvVX+cpVHBK+Rw82xd9qt9t1wkclf7nxY/hoLVUE0fKNsKTPvDxeH3jnpaAg -cLAExbf3cqfeIg29MyVGjGSSJuM+LmOW2puMPfgYCdcDzH2GguDKBAdRUNf/ktUM -79qGn5nX67evaOI5JpS6aLe/g9Pqemc9YmeuJeVy6OLk7K4S9ksrPJ/psEDzOFSz -/bdoyNrGj1E8svuR3Bznm53htw1yj+KkxKl4+esUrMZDBcJlOSgYAsOCsp0FvmXt -ll9ldDz7CTUue5wT/RsPXcdtgTpWD8w74a8CLyKsRspGPKAcTNZEtF4uXBVmCeEm -Kf7GUmG6sXP/wwyc5WxqlD8UykAWlYTzWamsX0xhk23RO8yilQwipmdnRC652dKK -QbNmC1r7fSOl8hqw/96bg5Qu0T/fkreRrwU7ZcegbLHNYhLDkBvjJc40vG93drEQ -w/cFGsDWr3RiSBd3kmmQYRzelYB0VI8YHMPzA9C/pEN1hlMYegouCRw2n5H9gooi -S9EOUCXdywMMF8mDAAhONU2Ki+3wApRmLER/y5UnlhetCTCstnEXbosX9hwJ1C07 -mKVx01QT2WDz9UtmT/rx7iASjbSsV7FFY6GsdqnC+w== ------END CERTIFICATE----- - -# Issuer: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Subject: CN=SSL.com EV Root Certification Authority ECC O=SSL Corporation -# Label: "SSL.com EV Root Certification Authority ECC" -# Serial: 3182246526754555285 -# MD5 Fingerprint: 59:53:22:65:83:42:01:54:c0:ce:42:b9:5a:7c:f2:90 -# SHA1 Fingerprint: 4c:dd:51:a3:d1:f5:20:32:14:b0:c6:c5:32:23:03:91:c7:46:42:6d -# SHA256 Fingerprint: 22:a2:c1:f7:bd:ed:70:4c:c1:e7:01:b5:f4:08:c3:10:88:0f:e9:56:b5:de:2a:4a:44:f9:9c:87:3a:25:a7:c8 ------BEGIN CERTIFICATE----- -MIIClDCCAhqgAwIBAgIILCmcWxbtBZUwCgYIKoZIzj0EAwIwfzELMAkGA1UEBhMC -VVMxDjAMBgNVBAgMBVRleGFzMRAwDgYDVQQHDAdIb3VzdG9uMRgwFgYDVQQKDA9T -U0wgQ29ycG9yYXRpb24xNDAyBgNVBAMMK1NTTC5jb20gRVYgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSBFQ0MwHhcNMTYwMjEyMTgxNTIzWhcNNDEwMjEyMTgx -NTIzWjB/MQswCQYDVQQGEwJVUzEOMAwGA1UECAwFVGV4YXMxEDAOBgNVBAcMB0hv -dXN0b24xGDAWBgNVBAoMD1NTTCBDb3Jwb3JhdGlvbjE0MDIGA1UEAwwrU1NMLmNv -bSBFViBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IEVDQzB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABKoSR5CYG/vvw0AHgyBO8TCCogbR8pKGYfL2IWjKAMTH6kMA -VIbc/R/fALhBYlzccBYy3h+Z1MzFB8gIH2EWB1E9fVwHU+M1OIzfzZ/ZLg1Kthku -WnBaBu2+8KGwytAJKaNjMGEwHQYDVR0OBBYEFFvKXuXe0oGqzagtZFG22XKbl+ZP -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUW8pe5d7SgarNqC1kUbbZcpuX -5k8wDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMCA2gAMGUCMQCK5kCJN+vp1RPZ -ytRrJPOwPYdGWBrssd9v+1a6cGvHOMzosYxPD/fxZ3YOg9AeUY8CMD32IygmTMZg -h5Mmm7I1HrrW9zzRHM76JTymGoEVW/MSD2zuZYrJh6j5B+BimoxcSg== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R6 -# Label: "GlobalSign Root CA - R6" -# Serial: 1417766617973444989252670301619537 -# MD5 Fingerprint: 4f:dd:07:e4:d4:22:64:39:1e:0c:37:42:ea:d1:c6:ae -# SHA1 Fingerprint: 80:94:64:0e:b5:a7:a1:ca:11:9c:1f:dd:d5:9f:81:02:63:a7:fb:d1 -# SHA256 Fingerprint: 2c:ab:ea:fe:37:d0:6c:a2:2a:ba:73:91:c0:03:3d:25:98:29:52:c4:53:64:73:49:76:3a:3a:b5:ad:6c:cf:69 ------BEGIN CERTIFICATE----- -MIIFgzCCA2ugAwIBAgIORea7A4Mzw4VlSOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEg -MB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTQxMjEwMDAwMDAwWhcNMzQx -MjEwMDAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSNjET -MBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAJUH6HPKZvnsFMp7PPcNCPG0RQssgrRI -xutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ0cay/xTOURQh7ErdG1rG1ofuTToVBu1k -ZguSgMpE3nOUTvOniX9PeGMIyBJQbUJmL025eShNUhqKGoC3GYEOfsSKvGRMIRxD -aNc9PIrFsmbVkJq3MQbFvuJtMgamHvm566qjuL++gmNQ0PAYid/kD3n16qIfKtJw -LnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqMPKq0pPbzlUoSB239jLKJz9CgYXfIWHSw -1CM69106yqLbnQneXUQtkPGBzVeS+n68UARjNN9rkxi+azayOeSsJDa38O+2HBNX -k7besvjihbdzorg1qkXy4J02oW9UivFyVm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2 -SXcwvHE35absIQh1/OZhFj931dmRl4QKbNQCTXTAFO39OfuD8l4UoQSwC+n+7o/h -bguyCLNhZglqsQY6ZZZZwPA1/cnaKI0aEYdwgQqomnUdnjqGBQCe24DWJfncBZ4n -WUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXKbWQULHpYT9NLCEnFlWQaYw55PfWzjMpY -rZxCRXluDocZXFSxZba/jJvcE+kNb7gu3GduyYsRtYQUigAZcIN5kZeR1Bonvzce -MgfYFGM8KEyvAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTAD -AQH/MB0GA1UdDgQWBBSubAWjkxPioufi1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSu -bAWjkxPioufi1xzWx/B/yGdToDANBgkqhkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLN -nsAEoJFp5lzQhN7craJP6Ed41mWYqVuoPId8AorRbrcWc+ZfwFSY1XS+wc3iEZGt -Ixg93eFyRJa0lV7Ae46ZeBZDE1ZXs6KzO7V33EByrKPrmzU+sQghoefEQzd5Mr61 -55wsTLxDKZmOMNOsIeDjHfrYBzN2VAAiKrlNIC5waNrlU/yDXNOd8v9EDERm8tLj -vUYAGm0CuiVdjaExUd1URhxN25mW7xocBFymFe944Hn+Xds+qkxV/ZoVqW/hpvvf -cDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiYrg54NMMl+68KnyBr3TsTjxKM4kEaSHpz -oHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7t+uA/iU3/gKbaKxCXcPu9czc8FB10jZp -nOZ7BN9uBmm23goJSFmH63sUYHpkqmlD75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfs -pA9MRf/TuTAjB0yPEL+GltmZWrSZVxykzLsViVO6LAUP5MSeGbEYNNVMnbrt9x+v -JJUEeKgDu+6B5dpffItKoZB0JaezPkvILFa9x8jvOOJckvB595yEunQtYQEgfn7R -8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+tJDfLRVpOoERIyNiwmcUVhAn21klJwGW4 -5hpxbqCo8YLoRT5s1gLXCmeDBVrJpBA= ------END CERTIFICATE----- - -# Issuer: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Subject: CN=OISTE WISeKey Global Root GC CA O=WISeKey OU=OISTE Foundation Endorsed -# Label: "OISTE WISeKey Global Root GC CA" -# Serial: 44084345621038548146064804565436152554 -# MD5 Fingerprint: a9:d6:b9:2d:2f:93:64:f8:a5:69:ca:91:e9:68:07:23 -# SHA1 Fingerprint: e0:11:84:5e:34:de:be:88:81:b9:9c:f6:16:26:d1:96:1f:c3:b9:31 -# SHA256 Fingerprint: 85:60:f9:1c:36:24:da:ba:95:70:b5:fe:a0:db:e3:6f:f1:1a:83:23:be:94:86:85:4f:b3:f3:4a:55:71:19:8d ------BEGIN CERTIFICATE----- -MIICaTCCAe+gAwIBAgIQISpWDK7aDKtARb8roi066jAKBggqhkjOPQQDAzBtMQsw -CQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91 -bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwg -Um9vdCBHQyBDQTAeFw0xNzA1MDkwOTQ4MzRaFw00MjA1MDkwOTU4MzNaMG0xCzAJ -BgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBGb3Vu -ZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2JhbCBS -b290IEdDIENBMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETOlQwMYPchi82PG6s4ni -eUqjFqdrVCTbUf/q9Akkwwsin8tqJ4KBDdLArzHkdIJuyiXZjHWd8dvQmqJLIX4W -p2OQ0jnUsYd4XxiWD1AbNTcPasbc2RNNpI6QN+a9WzGRo1QwUjAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUSIcUrOPDnpBgOtfKie7T -rYy0UGYwEAYJKwYBBAGCNxUBBAMCAQAwCgYIKoZIzj0EAwMDaAAwZQIwJsdpW9zV -57LnyAyMjMPdeYwbY9XJUpROTYJKcx6ygISpJcBMWm1JKWB4E+J+SOtkAjEA2zQg -Mgj/mkkCtojeFK9dbJlxjRo/i9fgojaGHAeCOnZT/cKi7e97sIBPWA9LUzm9 ------END CERTIFICATE----- - -# Issuer: CN=UCA Global G2 Root O=UniTrust -# Subject: CN=UCA Global G2 Root O=UniTrust -# Label: "UCA Global G2 Root" -# Serial: 124779693093741543919145257850076631279 -# MD5 Fingerprint: 80:fe:f0:c4:4a:f0:5c:62:32:9f:1c:ba:78:a9:50:f8 -# SHA1 Fingerprint: 28:f9:78:16:19:7a:ff:18:25:18:aa:44:fe:c1:a0:ce:5c:b6:4c:8a -# SHA256 Fingerprint: 9b:ea:11:c9:76:fe:01:47:64:c1:be:56:a6:f9:14:b5:a5:60:31:7a:bd:99:88:39:33:82:e5:16:1a:a0:49:3c ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIQXd+x2lqj7V2+WmUgZQOQ7zANBgkqhkiG9w0BAQsFADA9 -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxGzAZBgNVBAMMElVDQSBH -bG9iYWwgRzIgUm9vdDAeFw0xNjAzMTEwMDAwMDBaFw00MDEyMzEwMDAwMDBaMD0x -CzAJBgNVBAYTAkNOMREwDwYDVQQKDAhVbmlUcnVzdDEbMBkGA1UEAwwSVUNBIEds -b2JhbCBHMiBSb290MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxeYr -b3zvJgUno4Ek2m/LAfmZmqkywiKHYUGRO8vDaBsGxUypK8FnFyIdK+35KYmToni9 -kmugow2ifsqTs6bRjDXVdfkX9s9FxeV67HeToI8jrg4aA3++1NDtLnurRiNb/yzm -VHqUwCoV8MmNsHo7JOHXaOIxPAYzRrZUEaalLyJUKlgNAQLx+hVRZ2zA+te2G3/R -VogvGjqNO7uCEeBHANBSh6v7hn4PJGtAnTRnvI3HLYZveT6OqTwXS3+wmeOwcWDc -C/Vkw85DvG1xudLeJ1uK6NjGruFZfc8oLTW4lVYa8bJYS7cSN8h8s+1LgOGN+jIj -tm+3SJUIsUROhYw6AlQgL9+/V087OpAh18EmNVQg7Mc/R+zvWr9LesGtOxdQXGLY -D0tK3Cv6brxzks3sx1DoQZbXqX5t2Okdj4q1uViSukqSKwxW/YDrCPBeKW4bHAyv -j5OJrdu9o54hyokZ7N+1wxrrFv54NkzWbtA+FxyQF2smuvt6L78RHBgOLXMDj6Dl -NaBa4kx1HXHhOThTeEDMg5PXCp6dW4+K5OXgSORIskfNTip1KnvyIvbJvgmRlld6 -iIis7nCs+dwp4wwcOxJORNanTrAmyPPZGpeRaOrvjUYG0lZFWJo8DA+DuAUlwznP -O6Q0ibd5Ei9Hxeepl2n8pndntd978XplFeRhVmUCAwEAAaNCMEAwDgYDVR0PAQH/ -BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIHEjMz15DD/pQwIX4wV -ZyF0Ad/fMA0GCSqGSIb3DQEBCwUAA4ICAQATZSL1jiutROTL/7lo5sOASD0Ee/oj -L3rtNtqyzm325p7lX1iPyzcyochltq44PTUbPrw7tgTQvPlJ9Zv3hcU2tsu8+Mg5 -1eRfB70VVJd0ysrtT7q6ZHafgbiERUlMjW+i67HM0cOU2kTC5uLqGOiiHycFutfl -1qnN3e92mI0ADs0b+gO3joBYDic/UvuUospeZcnWhNq5NXHzJsBPd+aBJ9J3O5oU -b3n09tDh05S60FdRvScFDcH9yBIw7m+NESsIndTUv4BFFJqIRNow6rSn4+7vW4LV -PtateJLbXDzz2K36uGt/xDYotgIVilQsnLAXc47QN6MUPJiVAAwpBVueSUmxX8fj -y88nZY41F7dXyDDZQVu5FLbowg+UMaeUmMxq67XhJ/UQqAHojhJi6IjMtX9Gl8Cb -EGY4GjZGXyJoPd/JxhMnq1MGrKI8hgZlb7F+sSlEmqO6SWkoaY/X5V+tBIZkbxqg -DMUIYs6Ao9Dz7GjevjPHF1t/gMRMTLGmhIrDO7gJzRSBuhjjVFc2/tsvfEehOjPI -+Vg7RE+xygKJBJYoaMVLuCaJu9YzL1DV/pqJuhgyklTGW+Cd+V7lDSKb9triyCGy -YiGqhkCyLmTTX8jjfhFnRR8F/uOi77Oos/N9j/gMHyIfLXC0uAE0djAA5SN4p1bX -UB+K+wb1whnw0A== ------END CERTIFICATE----- - -# Issuer: CN=UCA Extended Validation Root O=UniTrust -# Subject: CN=UCA Extended Validation Root O=UniTrust -# Label: "UCA Extended Validation Root" -# Serial: 106100277556486529736699587978573607008 -# MD5 Fingerprint: a1:f3:5f:43:c6:34:9b:da:bf:8c:7e:05:53:ad:96:e2 -# SHA1 Fingerprint: a3:a1:b0:6f:24:61:23:4a:e3:36:a5:c2:37:fc:a6:ff:dd:f0:d7:3a -# SHA256 Fingerprint: d4:3a:f9:b3:54:73:75:5c:96:84:fc:06:d7:d8:cb:70:ee:5c:28:e7:73:fb:29:4e:b4:1e:e7:17:22:92:4d:24 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgIQT9Irj/VkyDOeTzRYZiNwYDANBgkqhkiG9w0BAQsFADBH -MQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNVBAMMHFVDQSBF -eHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwHhcNMTUwMzEzMDAwMDAwWhcNMzgxMjMx -MDAwMDAwWjBHMQswCQYDVQQGEwJDTjERMA8GA1UECgwIVW5pVHJ1c3QxJTAjBgNV -BAMMHFVDQSBFeHRlbmRlZCBWYWxpZGF0aW9uIFJvb3QwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCpCQcoEwKwmeBkqh5DFnpzsZGgdT6o+uM4AHrsiWog -D4vFsJszA1qGxliG1cGFu0/GnEBNyr7uaZa4rYEwmnySBesFK5pI0Lh2PpbIILvS -sPGP2KxFRv+qZ2C0d35qHzwaUnoEPQc8hQ2E0B92CvdqFN9y4zR8V05WAT558aop -O2z6+I9tTcg1367r3CTueUWnhbYFiN6IXSV8l2RnCdm/WhUFhvMJHuxYMjMR83dk -sHYf5BA1FxvyDrFspCqjc/wJHx4yGVMR59mzLC52LqGj3n5qiAno8geK+LLNEOfi -c0CTuwjRP+H8C5SzJe98ptfRr5//lpr1kXuYC3fUfugH0mK1lTnj8/FtDw5lhIpj -VMWAtuCeS31HJqcBCF3RiJ7XwzJE+oJKCmhUfzhTA8ykADNkUVkLo4KRel7sFsLz -KuZi2irbWWIQJUoqgQtHB0MGcIfS+pMRKXpITeuUx3BNr2fVUbGAIAEBtHoIppB/ -TuDvB0GHr2qlXov7z1CymlSvw4m6WC31MJixNnI5fkkE/SmnTHnkBVfblLkWU41G -sx2VYVdWf6/wFlthWG82UBEL2KwrlRYaDh8IzTY0ZRBiZtWAXxQgXy0MoHgKaNYs -1+lvK9JKBZP8nm9rZ/+I8U6laUpSNwXqxhaN0sSZ0YIrO7o1dfdRUVjzyAfd5LQD -fwIDAQABo0IwQDAdBgNVHQ4EFgQU2XQ65DA9DfcS3H5aBZ8eNJr34RQwDwYDVR0T -AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQADggIBADaN -l8xCFWQpN5smLNb7rhVpLGsaGvdftvkHTFnq88nIua7Mui563MD1sC3AO6+fcAUR -ap8lTwEpcOPlDOHqWnzcSbvBHiqB9RZLcpHIojG5qtr8nR/zXUACE/xOHAbKsxSQ -VBcZEhrxH9cMaVr2cXj0lH2RC47skFSOvG+hTKv8dGT9cZr4QQehzZHkPJrgmzI5 -c6sq1WnIeJEmMX3ixzDx/BR4dxIOE/TdFpS/S2d7cFOFyrC78zhNLJA5wA3CXWvp -4uXViI3WLL+rG761KIcSF3Ru/H38j9CHJrAb+7lsq+KePRXBOy5nAliRn+/4Qh8s -t2j1da3Ptfb/EX3C8CSlrdP6oDyp+l3cpaDvRKS+1ujl5BOWF3sGPjLtx7dCvHaj -2GU4Kzg1USEODm8uNBNA4StnDG1KQTAYI1oyVZnJF+A83vbsea0rWBmirSwiGpWO -vpaQXUJXxPkUAzUrHC1RVwinOt4/5Mi0A3PCwSaAuwtCH60NryZy2sy+s6ODWA2C -xR9GUeOcGMyNm43sSet1UNWMKFnKdDTajAshqx7qG+XH/RU+wBeq+yNuJkbL+vmx -cmtpzyKEC2IPrNkZAJSidjzULZrtBJ4tBmIQN1IchXIbJ+XMxjHsN+xjWZsLHXbM -fjKaiJUINlK73nZfdklJrX+9ZSCyycErdhh2n1ax ------END CERTIFICATE----- - -# Issuer: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Subject: CN=Certigna Root CA O=Dhimyotis OU=0002 48146308100036 -# Label: "Certigna Root CA" -# Serial: 269714418870597844693661054334862075617 -# MD5 Fingerprint: 0e:5c:30:62:27:eb:5b:bc:d7:ae:62:ba:e9:d5:df:77 -# SHA1 Fingerprint: 2d:0d:52:14:ff:9e:ad:99:24:01:74:20:47:6e:6c:85:27:27:f5:43 -# SHA256 Fingerprint: d4:8d:3d:23:ee:db:50:a4:59:e5:51:97:60:1c:27:77:4b:9d:7b:18:c9:4d:5a:05:95:11:a1:02:50:b9:31:68 ------BEGIN CERTIFICATE----- -MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw -WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw -MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x -MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD -VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX -BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw -ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO -ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M -CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu -I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm -TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh -C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf -ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz -IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT -Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k -JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5 -hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB -GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of -1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov -L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo -dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr -aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq -hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L -6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG -HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6 -0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB -lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi -o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1 -gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v -faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63 -Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh -jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw -3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0= ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign Root CA - G1 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign Root CA - G1" -# Serial: 235931866688319308814040 -# MD5 Fingerprint: 9c:42:84:57:dd:cb:0b:a7:2e:95:ad:b6:f3:da:bc:ac -# SHA1 Fingerprint: 8a:c7:ad:8f:73:ac:4e:c1:b5:75:4d:a5:40:f4:fc:cf:7c:b5:8e:8c -# SHA256 Fingerprint: 40:f6:af:03:46:a9:9a:a1:cd:1d:55:5a:4e:9c:ce:62:c7:f9:63:46:03:ee:40:66:15:83:3d:c8:c8:d0:03:67 ------BEGIN CERTIFICATE----- -MIIDlDCCAnygAwIBAgIKMfXkYgxsWO3W2DANBgkqhkiG9w0BAQsFADBnMQswCQYD -VQQGEwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBU -ZWNobm9sb2dpZXMgTGltaXRlZDEcMBoGA1UEAxMTZW1TaWduIFJvb3QgQ0EgLSBH -MTAeFw0xODAyMTgxODMwMDBaFw00MzAyMTgxODMwMDBaMGcxCzAJBgNVBAYTAklO -MRMwEQYDVQQLEwplbVNpZ24gUEtJMSUwIwYDVQQKExxlTXVkaHJhIFRlY2hub2xv -Z2llcyBMaW1pdGVkMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEcxMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk0u76WaK7p1b1TST0Bsew+eeuGQz -f2N4aLTNLnF115sgxk0pvLZoYIr3IZpWNVrzdr3YzZr/k1ZLpVkGoZM0Kd0WNHVO -8oG0x5ZOrRkVUkr+PHB1cM2vK6sVmjM8qrOLqs1D/fXqcP/tzxE7lM5OMhbTI0Aq -d7OvPAEsbO2ZLIvZTmmYsvePQbAyeGHWDV/D+qJAkh1cF+ZwPjXnorfCYuKrpDhM -tTk1b+oDafo6VGiFbdbyL0NVHpENDtjVaqSW0RM8LHhQ6DqS0hdW5TUaQBw+jSzt -Od9C4INBdN+jzcKGYEho42kLVACL5HZpIQ15TjQIXhTCzLG3rdd8cIrHhQIDAQAB -o0IwQDAdBgNVHQ4EFgQU++8Nhp6w492pufEhF38+/PB3KxowDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAFn/8oz1h31x -PaOfG1vR2vjTnGs2vZupYeveFix0PZ7mddrXuqe8QhfnPZHr5X3dPpzxz5KsbEjM -wiI/aTvFthUvozXGaCocV685743QNcMYDHsAVhzNixl03r4PEuDQqqE/AjSxcM6d -GNYIAwlG7mDgfrbESQRRfXBgvKqy/3lyeqYdPV8q+Mri/Tm3R7nrft8EI6/6nAYH -6ftjk4BAtcZsCjEozgyfz7MjNYBBjWzEN3uBL4ChQEKF6dk4jeihU80Bv2noWgby -RQuQ+q7hv53yrlc8pa6yVvSLZUDp/TGBLPQ5Cdjua6e0ph0VpZj3AYHYhX3zUVxx -iN66zB+Afko= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Subject: CN=emSign ECC Root CA - G3 O=eMudhra Technologies Limited OU=emSign PKI -# Label: "emSign ECC Root CA - G3" -# Serial: 287880440101571086945156 -# MD5 Fingerprint: ce:0b:72:d1:9f:88:8e:d0:50:03:e8:e3:b8:8b:67:40 -# SHA1 Fingerprint: 30:43:fa:4f:f2:57:dc:a0:c3:80:ee:2e:58:ea:78:b2:3f:e6:bb:c1 -# SHA256 Fingerprint: 86:a1:ec:ba:08:9c:4a:8d:3b:be:27:34:c6:12:ba:34:1d:81:3e:04:3c:f9:e8:a8:62:cd:5c:57:a3:6b:be:6b ------BEGIN CERTIFICATE----- -MIICTjCCAdOgAwIBAgIKPPYHqWhwDtqLhDAKBggqhkjOPQQDAzBrMQswCQYDVQQG -EwJJTjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNo -bm9sb2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0g -RzMwHhcNMTgwMjE4MTgzMDAwWhcNNDMwMjE4MTgzMDAwWjBrMQswCQYDVQQGEwJJ -TjETMBEGA1UECxMKZW1TaWduIFBLSTElMCMGA1UEChMcZU11ZGhyYSBUZWNobm9s -b2dpZXMgTGltaXRlZDEgMB4GA1UEAxMXZW1TaWduIEVDQyBSb290IENBIC0gRzMw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQjpQy4LRL1KPOxst3iAhKAnjlfSU2fySU0 -WXTsuwYc58Byr+iuL+FBVIcUqEqy6HyC5ltqtdyzdc6LBtCGI79G1Y4PPwT01xyS -fvalY8L1X44uT6EYGQIrMgqCZH0Wk9GjQjBAMB0GA1UdDgQWBBR8XQKEE9TMipuB -zhccLikenEhjQjAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggq -hkjOPQQDAwNpADBmAjEAvvNhzwIQHWSVB7gYboiFBS+DCBeQyh+KTOgNG3qxrdWB -CUfvO6wIBHxcmbHtRwfSAjEAnbpV/KlK6O3t5nYBQnvI+GDZjVGLVTv7jHvrZQnD -+JbNR6iC8hZVdyR+EhCVBCyj ------END CERTIFICATE----- - -# Issuer: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign Root CA - C1 O=eMudhra Inc OU=emSign PKI -# Label: "emSign Root CA - C1" -# Serial: 825510296613316004955058 -# MD5 Fingerprint: d8:e3:5d:01:21:fa:78:5a:b0:df:ba:d2:ee:2a:5f:68 -# SHA1 Fingerprint: e7:2e:f1:df:fc:b2:09:28:cf:5d:d4:d5:67:37:b1:51:cb:86:4f:01 -# SHA256 Fingerprint: 12:56:09:aa:30:1d:a0:a2:49:b9:7a:82:39:cb:6a:34:21:6f:44:dc:ac:9f:39:54:b1:42:92:f2:e8:c8:60:8f ------BEGIN CERTIFICATE----- -MIIDczCCAlugAwIBAgILAK7PALrEzzL4Q7IwDQYJKoZIhvcNAQELBQAwVjELMAkG -A1UEBhMCVVMxEzARBgNVBAsTCmVtU2lnbiBQS0kxFDASBgNVBAoTC2VNdWRocmEg -SW5jMRwwGgYDVQQDExNlbVNpZ24gUm9vdCBDQSAtIEMxMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowVjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMRwwGgYDVQQDExNlbVNpZ24gUm9v -dCBDQSAtIEMxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+upufGZ -BczYKCFK83M0UYRWEPWgTywS4/oTmifQz/l5GnRfHXk5/Fv4cI7gklL35CX5VIPZ -HdPIWoU/Xse2B+4+wM6ar6xWQio5JXDWv7V7Nq2s9nPczdcdioOl+yuQFTdrHCZH -3DspVpNqs8FqOp099cGXOFgFixwR4+S0uF2FHYP+eF8LRWgYSKVGczQ7/g/IdrvH -GPMF0Ybzhe3nudkyrVWIzqa2kbBPrH4VI5b2P/AgNBbeCsbEBEV5f6f9vtKppa+c -xSMq9zwhbL2vj07FOrLzNBL834AaSaTUqZX3noleoomslMuoaJuvimUnzYnu3Yy1 -aylwQ6BpC+S5DwIDAQABo0IwQDAdBgNVHQ4EFgQU/qHgcB4qAzlSWkK+XJGFehiq -TbUwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEL -BQADggEBAMJKVvoVIXsoounlHfv4LcQ5lkFMOycsxGwYFYDGrK9HWS8mC+M2sO87 -/kOXSTKZEhVb3xEp/6tT+LvBeA+snFOvV71ojD1pM/CjoCNjO2RnIkSt1XHLVip4 -kqNPEjE2NuLe/gDEo2APJ62gsIq1NnpSob0n9CAnYuhNlCQT5AoE6TyrLshDCUrG -YQTlSTR+08TI9Q/Aqum6VF7zYytPT1DU/rl7mYw9wC68AivTxEDkigcxHpvOJpkT -+xHqmiIMERnHXhuBUDDIlhJu58tBf5E7oke3VIAb3ADMmpDqw8NQBmIMMMAVSKeo -WXzhriKi4gp6D/piq1JM4fHfyr6DDUI= ------END CERTIFICATE----- - -# Issuer: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Subject: CN=emSign ECC Root CA - C3 O=eMudhra Inc OU=emSign PKI -# Label: "emSign ECC Root CA - C3" -# Serial: 582948710642506000014504 -# MD5 Fingerprint: 3e:53:b3:a3:81:ee:d7:10:f8:d3:b0:1d:17:92:f5:d5 -# SHA1 Fingerprint: b6:af:43:c2:9b:81:53:7d:f6:ef:6b:c3:1f:1f:60:15:0c:ee:48:66 -# SHA256 Fingerprint: bc:4d:80:9b:15:18:9d:78:db:3e:1d:8c:f4:f9:72:6a:79:5d:a1:64:3c:a5:f1:35:8e:1d:db:0e:dc:0d:7e:b3 ------BEGIN CERTIFICATE----- -MIICKzCCAbGgAwIBAgIKe3G2gla4EnycqDAKBggqhkjOPQQDAzBaMQswCQYDVQQG -EwJVUzETMBEGA1UECxMKZW1TaWduIFBLSTEUMBIGA1UEChMLZU11ZGhyYSBJbmMx -IDAeBgNVBAMTF2VtU2lnbiBFQ0MgUm9vdCBDQSAtIEMzMB4XDTE4MDIxODE4MzAw -MFoXDTQzMDIxODE4MzAwMFowWjELMAkGA1UEBhMCVVMxEzARBgNVBAsTCmVtU2ln -biBQS0kxFDASBgNVBAoTC2VNdWRocmEgSW5jMSAwHgYDVQQDExdlbVNpZ24gRUND -IFJvb3QgQ0EgLSBDMzB2MBAGByqGSM49AgEGBSuBBAAiA2IABP2lYa57JhAd6bci -MK4G9IGzsUJxlTm801Ljr6/58pc1kjZGDoeVjbk5Wum739D+yAdBPLtVb4Ojavti -sIGJAnB9SMVK4+kiVCJNk7tCDK93nCOmfddhEc5lx/h//vXyqaNCMEAwHQYDVR0O -BBYEFPtaSNCAIEDyqOkAB2kZd6fmw/TPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB -Af8EBTADAQH/MAoGCCqGSM49BAMDA2gAMGUCMQC02C8Cif22TGK6Q04ThHK1rt0c -3ta13FaPWEBaLd4gTCKDypOofu4SQMfWh0/434UCMBwUZOR8loMRnLDRWmFLpg9J -0wD8ofzkpf9/rdcw0Md3f76BB1UwUCAU9Vc4CqgxUQ== ------END CERTIFICATE----- - -# Issuer: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Subject: CN=Hongkong Post Root CA 3 O=Hongkong Post -# Label: "Hongkong Post Root CA 3" -# Serial: 46170865288971385588281144162979347873371282084 -# MD5 Fingerprint: 11:fc:9f:bd:73:30:02:8a:fd:3f:f3:58:b9:cb:20:f0 -# SHA1 Fingerprint: 58:a2:d0:ec:20:52:81:5b:c1:f3:f8:64:02:24:4e:c2:8e:02:4b:02 -# SHA256 Fingerprint: 5a:2f:c0:3f:0c:83:b0:90:bb:fa:40:60:4b:09:88:44:6c:76:36:18:3d:f9:84:6e:17:10:1a:44:7f:b8:ef:d6 ------BEGIN CERTIFICATE----- -MIIFzzCCA7egAwIBAgIUCBZfikyl7ADJk0DfxMauI7gcWqQwDQYJKoZIhvcNAQEL -BQAwbzELMAkGA1UEBhMCSEsxEjAQBgNVBAgTCUhvbmcgS29uZzESMBAGA1UEBxMJ -SG9uZyBLb25nMRYwFAYDVQQKEw1Ib25na29uZyBQb3N0MSAwHgYDVQQDExdIb25n -a29uZyBQb3N0IFJvb3QgQ0EgMzAeFw0xNzA2MDMwMjI5NDZaFw00MjA2MDMwMjI5 -NDZaMG8xCzAJBgNVBAYTAkhLMRIwEAYDVQQIEwlIb25nIEtvbmcxEjAQBgNVBAcT -CUhvbmcgS29uZzEWMBQGA1UEChMNSG9uZ2tvbmcgUG9zdDEgMB4GA1UEAxMXSG9u -Z2tvbmcgUG9zdCBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK -AoICAQCziNfqzg8gTr7m1gNt7ln8wlffKWihgw4+aMdoWJwcYEuJQwy51BWy7sFO -dem1p+/l6TWZ5Mwc50tfjTMwIDNT2aa71T4Tjukfh0mtUC1Qyhi+AViiE3CWu4mI -VoBc+L0sPOFMV4i707mV78vH9toxdCim5lSJ9UExyuUmGs2C4HDaOym71QP1mbpV -9WTRYA6ziUm4ii8F0oRFKHyPaFASePwLtVPLwpgchKOesL4jpNrcyCse2m5FHomY -2vkALgbpDDtw1VAliJnLzXNg99X/NWfFobxeq81KuEXryGgeDQ0URhLj0mRiikKY -vLTGCAj4/ahMZJx2Ab0vqWwzD9g/KLg8aQFChn5pwckGyuV6RmXpwtZQQS4/t+Tt -bNe/JgERohYpSms0BpDsE9K2+2p20jzt8NYt3eEV7KObLyzJPivkaTv/ciWxNoZb -x39ri1UbSsUgYT2uy1DhCDq+sI9jQVMwCFk8mB13umOResoQUGC/8Ne8lYePl8X+ -l2oBlKN8W4UdKjk60FSh0Tlxnf0h+bV78OLgAo9uliQlLKAeLKjEiafv7ZkGL7YK -TE/bosw3Gq9HhS2KX8Q0NEwA/RiTZxPRN+ZItIsGxVd7GYYKecsAyVKvQv83j+Gj -Hno9UKtjBucVtT+2RTeUN7F+8kjDf8V1/peNRY8apxpyKBpADwIDAQABo2MwYTAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQXnc0e -i9Y5K3DTXNSguB+wAPzFYTAdBgNVHQ4EFgQUF53NHovWOStw01zUoLgfsAD8xWEw -DQYJKoZIhvcNAQELBQADggIBAFbVe27mIgHSQpsY1Q7XZiNc4/6gx5LS6ZStS6LG -7BJ8dNVI0lkUmcDrudHr9EgwW62nV3OZqdPlt9EuWSRY3GguLmLYauRwCy0gUCCk -MpXRAJi70/33MvJJrsZ64Ee+bs7Lo3I6LWldy8joRTnU+kLBEUx3XZL7av9YROXr -gZ6voJmtvqkBZss4HTzfQx/0TW60uhdG/H39h4F5ag0zD/ov+BS5gLNdTaqX4fnk -GMX41TiMJjz98iji7lpJiCzfeT2OnpA8vUFKOt1b9pq0zj8lMH8yfaIDlNDceqFS -3m6TjRgm/VWsvY+b0s+v54Ysyx8Jb6NvqYTUc79NoXQbTiNg8swOqn+knEwlqLJm -Ozj/2ZQw9nKEvmhVEA/GcywWaZMH/rFF7buiVWqw2rVKAiUnhde3t4ZEFolsgCs+ -l6mc1X5VTMbeRRAc6uk7nwNT7u56AQIWeNTowr5GdogTPyK7SBIdUgC0An4hGh6c -JfTzPV4e0hz5sy229zdcxsshTrD3mUcYhcErulWuBurQB7Lcq9CClnXO0lD+mefP -L5/ndtFhKvshuzHQqp9HpLIiyhY6UFfEW0NnxWViA0kB60PZ2Pierc+xYw5F9KBa -LJstxabArahH9CdMOA0uG0k7UvToiIMrVCjU8jVStDKDYmlkDJGcn5fqdBb9HxEG -mpv0 ------END CERTIFICATE----- - -# Issuer: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft ECC Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft ECC Root Certificate Authority 2017" -# Serial: 136839042543790627607696632466672567020 -# MD5 Fingerprint: dd:a1:03:e6:4a:93:10:d1:bf:f0:19:42:cb:fe:ed:67 -# SHA1 Fingerprint: 99:9a:64:c3:7f:f4:7d:9f:ab:95:f1:47:69:89:14:60:ee:c4:c3:c5 -# SHA256 Fingerprint: 35:8d:f3:9d:76:4a:f9:e1:b7:66:e9:c9:72:df:35:2e:e1:5c:fa:c2:27:af:6a:d1:d7:0e:8e:4a:6e:dc:ba:02 ------BEGIN CERTIFICATE----- -MIICWTCCAd+gAwIBAgIQZvI9r4fei7FK6gxXMQHC7DAKBggqhkjOPQQDAzBlMQsw -CQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYD -VQQDEy1NaWNyb3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIw -MTcwHhcNMTkxMjE4MjMwNjQ1WhcNNDIwNzE4MjMxNjA0WjBlMQswCQYDVQQGEwJV -UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1NaWNy -b3NvZnQgRUNDIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwdjAQBgcq -hkjOPQIBBgUrgQQAIgNiAATUvD0CQnVBEyPNgASGAlEvaqiBYgtlzPbKnR5vSmZR -ogPZnZH6thaxjG7efM3beaYvzrvOcS/lpaso7GMEZpn4+vKTEAXhgShC48Zo9OYb -hGBKia/teQ87zvH2RPUBeMCjVDBSMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBTIy5lycFIM+Oa+sgRXKSrPQhDtNTAQBgkrBgEEAYI3 -FQEEAwIBADAKBggqhkjOPQQDAwNoADBlAjBY8k3qDPlfXu5gKcs68tvWMoQZP3zV -L8KxzJOuULsJMsbG7X7JNpQS5GiFBqIb0C8CMQCZ6Ra0DvpWSNSkMBaReNtUjGUB -iudQZsIxtzm6uBoiB078a1QWIP8rtedMDE2mT3M= ------END CERTIFICATE----- - -# Issuer: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Subject: CN=Microsoft RSA Root Certificate Authority 2017 O=Microsoft Corporation -# Label: "Microsoft RSA Root Certificate Authority 2017" -# Serial: 40975477897264996090493496164228220339 -# MD5 Fingerprint: 10:ff:00:ff:cf:c9:f8:c7:7a:c0:ee:35:8e:c9:0f:47 -# SHA1 Fingerprint: 73:a5:e6:4a:3b:ff:83:16:ff:0e:dc:cc:61:8a:90:6e:4e:ae:4d:74 -# SHA256 Fingerprint: c7:41:f7:0f:4b:2a:8d:88:bf:2e:71:c1:41:22:ef:53:ef:10:eb:a0:cf:a5:e6:4c:fa:20:f4:18:85:30:73:e0 ------BEGIN CERTIFICATE----- -MIIFqDCCA5CgAwIBAgIQHtOXCV/YtLNHcB6qvn9FszANBgkqhkiG9w0BAQwFADBl -MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYw -NAYDVQQDEy1NaWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -IDIwMTcwHhcNMTkxMjE4MjI1MTIyWhcNNDIwNzE4MjMwMDIzWjBlMQswCQYDVQQG -EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTYwNAYDVQQDEy1N -aWNyb3NvZnQgUlNBIFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTcwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKW76UM4wplZEWCpW9R2LBifOZ -Nt9GkMml7Xhqb0eRaPgnZ1AzHaGm++DlQ6OEAlcBXZxIQIJTELy/xztokLaCLeX0 -ZdDMbRnMlfl7rEqUrQ7eS0MdhweSE5CAg2Q1OQT85elss7YfUJQ4ZVBcF0a5toW1 -HLUX6NZFndiyJrDKxHBKrmCk3bPZ7Pw71VdyvD/IybLeS2v4I2wDwAW9lcfNcztm -gGTjGqwu+UcF8ga2m3P1eDNbx6H7JyqhtJqRjJHTOoI+dkC0zVJhUXAoP8XFWvLJ -jEm7FFtNyP9nTUwSlq31/niol4fX/V4ggNyhSyL71Imtus5Hl0dVe49FyGcohJUc -aDDv70ngNXtk55iwlNpNhTs+VcQor1fznhPbRiefHqJeRIOkpcrVE7NLP8TjwuaG -YaRSMLl6IE9vDzhTyzMMEyuP1pq9KsgtsRx9S1HKR9FIJ3Jdh+vVReZIZZ2vUpC6 -W6IYZVcSn2i51BVrlMRpIpj0M+Dt+VGOQVDJNE92kKz8OMHY4Xu54+OU4UZpyw4K -UGsTuqwPN1q3ErWQgR5WrlcihtnJ0tHXUeOrO8ZV/R4O03QK0dqq6mm4lyiPSMQH -+FJDOvTKVTUssKZqwJz58oHhEmrARdlns87/I6KJClTUFLkqqNfs+avNJVgyeY+Q -W5g5xAgGwax/Dj0ApQIDAQABo1QwUjAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/ -BAUwAwEB/zAdBgNVHQ4EFgQUCctZf4aycI8awznjwNnpv7tNsiMwEAYJKwYBBAGC -NxUBBAMCAQAwDQYJKoZIhvcNAQEMBQADggIBAKyvPl3CEZaJjqPnktaXFbgToqZC -LgLNFgVZJ8og6Lq46BrsTaiXVq5lQ7GPAJtSzVXNUzltYkyLDVt8LkS/gxCP81OC -gMNPOsduET/m4xaRhPtthH80dK2Jp86519efhGSSvpWhrQlTM93uCupKUY5vVau6 -tZRGrox/2KJQJWVggEbbMwSubLWYdFQl3JPk+ONVFT24bcMKpBLBaYVu32TxU5nh -SnUgnZUP5NbcA/FZGOhHibJXWpS2qdgXKxdJ5XbLwVaZOjex/2kskZGT4d9Mozd2 -TaGf+G0eHdP67Pv0RR0Tbc/3WeUiJ3IrhvNXuzDtJE3cfVa7o7P4NHmJweDyAmH3 -pvwPuxwXC65B2Xy9J6P9LjrRk5Sxcx0ki69bIImtt2dmefU6xqaWM/5TkshGsRGR -xpl/j8nWZjEgQRCHLQzWwa80mMpkg/sTV9HB8Dx6jKXB/ZUhoHHBk2dxEuqPiApp -GWSZI1b7rCoucL5mxAyE7+WL85MB+GqQk2dLsmijtWKP6T+MejteD+eMuMZ87zf9 -dOLITzNy4ZQ5bb0Sr74MTnB8G2+NszKTc0QWbej09+CVgI+WXTik9KveCjCHk9hN -AHFiRSdLOkKEW39lt2c0Ui2cFmuqqNh7o0JMcccMyj6D5KbvtwEwXlGjefVwaaZB -RA+GsCyRxj3qrg+E ------END CERTIFICATE----- - -# Issuer: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Subject: CN=e-Szigno Root CA 2017 O=Microsec Ltd. -# Label: "e-Szigno Root CA 2017" -# Serial: 411379200276854331539784714 -# MD5 Fingerprint: de:1f:f6:9e:84:ae:a7:b4:21:ce:1e:58:7d:d1:84:98 -# SHA1 Fingerprint: 89:d4:83:03:4f:9e:9a:48:80:5f:72:37:d4:a9:a6:ef:cb:7c:1f:d1 -# SHA256 Fingerprint: be:b0:0b:30:83:9b:9b:c3:2c:32:e4:44:79:05:95:06:41:f2:64:21:b1:5e:d0:89:19:8b:51:8a:e2:ea:1b:99 ------BEGIN CERTIFICATE----- -MIICQDCCAeWgAwIBAgIMAVRI7yH9l1kN9QQKMAoGCCqGSM49BAMCMHExCzAJBgNV -BAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMgTHRk -LjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25vIFJv -b3QgQ0EgMjAxNzAeFw0xNzA4MjIxMjA3MDZaFw00MjA4MjIxMjA3MDZaMHExCzAJ -BgNVBAYTAkhVMREwDwYDVQQHDAhCdWRhcGVzdDEWMBQGA1UECgwNTWljcm9zZWMg -THRkLjEXMBUGA1UEYQwOVkFUSFUtMjM1ODQ0OTcxHjAcBgNVBAMMFWUtU3ppZ25v -IFJvb3QgQ0EgMjAxNzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJbcPYrYsHtv -xie+RJCxs1YVe45DJH0ahFnuY2iyxl6H0BVIHqiQrb1TotreOpCmYF9oMrWGQd+H -Wyx7xf58etqjYzBhMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G -A1UdDgQWBBSHERUI0arBeAyxr87GyZDvvzAEwDAfBgNVHSMEGDAWgBSHERUI0arB -eAyxr87GyZDvvzAEwDAKBggqhkjOPQQDAgNJADBGAiEAtVfd14pVCzbhhkT61Nlo -jbjcI4qKDdQvfepz7L9NbKgCIQDLpbQS+ue16M9+k/zzNY9vTlp8tLxOsvxyqltZ -+efcMQ== ------END CERTIFICATE----- - -# Issuer: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Subject: O=CERTSIGN SA OU=certSIGN ROOT CA G2 -# Label: "certSIGN Root CA G2" -# Serial: 313609486401300475190 -# MD5 Fingerprint: 8c:f1:75:8a:c6:19:cf:94:b7:f7:65:20:87:c3:97:c7 -# SHA1 Fingerprint: 26:f9:93:b4:ed:3d:28:27:b0:b9:4b:a7:e9:15:1d:a3:8d:92:e5:32 -# SHA256 Fingerprint: 65:7c:fe:2f:a7:3f:aa:38:46:25:71:f3:32:a2:36:3a:46:fc:e7:02:09:51:71:07:02:cd:fb:b6:ee:da:33:05 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIJEQA0tk7GNi02MA0GCSqGSIb3DQEBCwUAMEExCzAJBgNV -BAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJR04g -Uk9PVCBDQSBHMjAeFw0xNzAyMDYwOTI3MzVaFw00MjAyMDYwOTI3MzVaMEExCzAJ -BgNVBAYTAlJPMRQwEgYDVQQKEwtDRVJUU0lHTiBTQTEcMBoGA1UECxMTY2VydFNJ -R04gUk9PVCBDQSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDF -dRmRfUR0dIf+DjuW3NgBFszuY5HnC2/OOwppGnzC46+CjobXXo9X69MhWf05N0Iw -vlDqtg+piNguLWkh59E3GE59kdUWX2tbAMI5Qw02hVK5U2UPHULlj88F0+7cDBrZ -uIt4ImfkabBoxTzkbFpG583H+u/E7Eu9aqSs/cwoUe+StCmrqzWaTOTECMYmzPhp -n+Sc8CnTXPnGFiWeI8MgwT0PPzhAsP6CRDiqWhqKa2NYOLQV07YRaXseVO6MGiKs -cpc/I1mbySKEwQdPzH/iV8oScLumZfNpdWO9lfsbl83kqK/20U6o2YpxJM02PbyW -xPFsqa7lzw1uKA2wDrXKUXt4FMMgL3/7FFXhEZn91QqhngLjYl/rNUssuHLoPj1P -rCy7Lobio3aP5ZMqz6WryFyNSwb/EkaseMsUBzXgqd+L6a8VTxaJW732jcZZroiF -DsGJ6x9nxUWO/203Nit4ZoORUSs9/1F3dmKh7Gc+PoGD4FapUB8fepmrY7+EF3fx -DTvf95xhszWYijqy7DwaNz9+j5LP2RIUZNoQAhVB/0/E6xyjyfqZ90bp4RjZsbgy -LcsUDFDYg2WD7rlcz8sFWkz6GZdr1l0T08JcVLwyc6B49fFtHsufpaafItzRUZ6C -eWRgKRM+o/1Pcmqr4tTluCRVLERLiohEnMqE0yo7AgMBAAGjQjBAMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSCIS1mxteg4BXrzkwJ -d8RgnlRuAzANBgkqhkiG9w0BAQsFAAOCAgEAYN4auOfyYILVAzOBywaK8SJJ6ejq -kX/GM15oGQOGO0MBzwdw5AgeZYWR5hEit/UCI46uuR59H35s5r0l1ZUa8gWmr4UC -b6741jH/JclKyMeKqdmfS0mbEVeZkkMR3rYzpMzXjWR91M08KCy0mpbqTfXERMQl -qiCA2ClV9+BB/AYm/7k29UMUA2Z44RGx2iBfRgB4ACGlHgAoYXhvqAEBj500mv/0 -OJD7uNGzcgbJceaBxXntC6Z58hMLnPddDnskk7RI24Zf3lCGeOdA5jGokHZwYa+c -NywRtYK3qq4kNFtyDGkNzVmf9nGvnAvRCjj5BiKDUyUM/FHE5r7iOZULJK2v0ZXk -ltd0ZGtxTgI8qoXzIKNDOXZbbFD+mpwUHmUUihW9o4JFWklWatKcsWMy5WHgUyIO -pwpJ6st+H6jiYoD2EEVSmAYY3qXNL3+q1Ok+CHLsIwMCPKaq2LxndD0UF/tUSxfj -03k9bWtJySgOLnRQvwzZRjoQhsmnP+mg7H/rpXdYaXHmgwo38oZJar55CJD2AhZk -PuXaTH4MNMn5X7azKFGnpyuqSfqNZSlO42sTp5SjLVFteAxEy9/eCG/Oo2Sr05WE -1LlSVHJ7liXMvGnjSG4N0MedJ5qq+BOS3R7fY581qRY27Iy4g/Q9iY/NtBde17MX -QRBdJ3NghVdJIgc= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global Certification Authority" -# Serial: 1846098327275375458322922162 -# MD5 Fingerprint: f8:1c:18:2d:2f:ba:5f:6d:a1:6c:bc:c7:ab:91:c7:0e -# SHA1 Fingerprint: 2f:8f:36:4f:e1:58:97:44:21:59:87:a5:2a:9a:d0:69:95:26:7f:b5 -# SHA256 Fingerprint: 97:55:20:15:f5:dd:fc:3c:87:88:c0:06:94:45:55:40:88:94:45:00:84:f1:00:86:70:86:bc:1a:2b:b5:8d:c8 ------BEGIN CERTIFICATE----- -MIIF2jCCA8KgAwIBAgIMBfcOhtpJ80Y1LrqyMA0GCSqGSIb3DQEBCwUAMIGIMQsw -CQYDVQQGEwJVUzERMA8GA1UECAwISWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28x -ITAfBgNVBAoMGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1 -c3R3YXZlIEdsb2JhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0xNzA4MjMx -OTM0MTJaFw00MjA4MjMxOTM0MTJaMIGIMQswCQYDVQQGEwJVUzERMA8GA1UECAwI -SWxsaW5vaXMxEDAOBgNVBAcMB0NoaWNhZ28xITAfBgNVBAoMGFRydXN0d2F2ZSBI -b2xkaW5ncywgSW5jLjExMC8GA1UEAwwoVHJ1c3R3YXZlIEdsb2JhbCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB -ALldUShLPDeS0YLOvR29zd24q88KPuFd5dyqCblXAj7mY2Hf8g+CY66j96xz0Xzn -swuvCAAJWX/NKSqIk4cXGIDtiLK0thAfLdZfVaITXdHG6wZWiYj+rDKd/VzDBcdu -7oaJuogDnXIhhpCujwOl3J+IKMujkkkP7NAP4m1ET4BqstTnoApTAbqOl5F2brz8 -1Ws25kCI1nsvXwXoLG0R8+eyvpJETNKXpP7ScoFDB5zpET71ixpZfR9oWN0EACyW -80OzfpgZdNmcc9kYvkHHNHnZ9GLCQ7mzJ7Aiy/k9UscwR7PJPrhq4ufogXBeQotP -JqX+OsIgbrv4Fo7NDKm0G2x2EOFYeUY+VM6AqFcJNykbmROPDMjWLBz7BegIlT1l -RtzuzWniTY+HKE40Cz7PFNm73bZQmq131BnW2hqIyE4bJ3XYsgjxroMwuREOzYfw -hI0Vcnyh78zyiGG69Gm7DIwLdVcEuE4qFC49DxweMqZiNu5m4iK4BUBjECLzMx10 -coos9TkpoNPnG4CELcU9402x/RpvumUHO1jsQkUm+9jaJXLE9gCxInm943xZYkqc -BW89zubWR2OZxiRvchLIrH+QtAuRcOi35hYQcRfO3gZPSEF9NUqjifLJS3tBEW1n -twiYTOURGa5CgNz7kAXU+FDKvuStx8KU1xad5hePrzb7AgMBAAGjQjBAMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFJngGWcNYtt2s9o9uFvo/ULSMQ6HMA4GA1Ud -DwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAmHNw4rDT7TnsTGDZqRKGFx6W -0OhUKDtkLSGm+J1WE2pIPU/HPinbbViDVD2HfSMF1OQc3Og4ZYbFdada2zUFvXfe -uyk3QAUHw5RSn8pk3fEbK9xGChACMf1KaA0HZJDmHvUqoai7PF35owgLEQzxPy0Q -lG/+4jSHg9bP5Rs1bdID4bANqKCqRieCNqcVtgimQlRXtpla4gt5kNdXElE1GYhB -aCXUNxeEFfsBctyV3lImIJgm4nb1J2/6ADtKYdkNy1GTKv0WBpanI5ojSP5RvbbE -sLFUzt5sQa0WZ37b/TjNuThOssFgy50X31ieemKyJo90lZvkWx3SD92YHJtZuSPT -MaCm/zjdzyBP6VhWOmfD0faZmZ26NraAL4hHT4a/RDqA5Dccprrql5gR0IRiR2Qe -qu5AvzSxnI9O4fKSTx+O856X3vOmeWqJcU9LJxdI/uz0UA9PSX3MReO9ekDFQdxh -VicGaeVyQYHTtgGJoC86cnn+OjC/QezHYj6RS8fZMXZC+fc8Y+wmjHMMfRod6qh8 -h6jCJ3zhM0EPz8/8AKAigJ5Kp28AsEFFtyLKaEjFQqKu3R3y4G5OBVixwJAWKqQ9 -EEC+j2Jjg6mcgn0tAumDMHzLJ8n9HmYAsC7TIS+OMxZsmO0QqAfWzJPP29FpHOTK -yeC2nOnOcXHebD8WpHk= ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P256 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P256 Certification Authority" -# Serial: 4151900041497450638097112925 -# MD5 Fingerprint: 5b:44:e3:8d:5d:36:86:26:e8:0d:05:d2:59:a7:83:54 -# SHA1 Fingerprint: b4:90:82:dd:45:0c:be:8b:5b:b1:66:d3:e2:a4:08:26:cd:ed:42:cf -# SHA256 Fingerprint: 94:5b:bc:82:5e:a5:54:f4:89:d1:fd:51:a7:3d:df:2e:a6:24:ac:70:19:a0:52:05:22:5c:22:a7:8c:cf:a8:b4 ------BEGIN CERTIFICATE----- -MIICYDCCAgegAwIBAgIMDWpfCD8oXD5Rld9dMAoGCCqGSM49BAMCMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM1MTBaFw00MjA4MjMxOTM1MTBaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDI1NiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTBZMBMGByqGSM49AgEGCCqG -SM49AwEHA0IABH77bOYj43MyCMpg5lOcunSNGLB4kFKA3TjASh3RqMyTpJcGOMoN -FWLGjgEqZZ2q3zSRLoHB5DOSMcT9CTqmP62jQzBBMA8GA1UdEwEB/wQFMAMBAf8w -DwYDVR0PAQH/BAUDAwcGADAdBgNVHQ4EFgQUo0EGrJBt0UrrdaVKEJmzsaGLSvcw -CgYIKoZIzj0EAwIDRwAwRAIgB+ZU2g6gWrKuEZ+Hxbb/ad4lvvigtwjzRM4q3wgh -DDcCIC0mA6AFvWvR9lz4ZcyGbbOcNEhjhAnFjXca4syc4XR7 ------END CERTIFICATE----- - -# Issuer: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Subject: CN=Trustwave Global ECC P384 Certification Authority O=Trustwave Holdings, Inc. -# Label: "Trustwave Global ECC P384 Certification Authority" -# Serial: 2704997926503831671788816187 -# MD5 Fingerprint: ea:cf:60:c4:3b:b9:15:29:40:a1:97:ed:78:27:93:d6 -# SHA1 Fingerprint: e7:f3:a3:c8:cf:6f:c3:04:2e:6d:0e:67:32:c5:9e:68:95:0d:5e:d2 -# SHA256 Fingerprint: 55:90:38:59:c8:c0:c3:eb:b8:75:9e:ce:4e:25:57:22:5f:f5:75:8b:bd:38:eb:d4:82:76:60:1e:1b:d5:80:97 ------BEGIN CERTIFICATE----- -MIICnTCCAiSgAwIBAgIMCL2Fl2yZJ6SAaEc7MAoGCCqGSM49BAMDMIGRMQswCQYD -VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAf -BgNVBAoTGFRydXN0d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3 -YXZlIEdsb2JhbCBFQ0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0x -NzA4MjMxOTM2NDNaFw00MjA4MjMxOTM2NDNaMIGRMQswCQYDVQQGEwJVUzERMA8G -A1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB0NoaWNhZ28xITAfBgNVBAoTGFRydXN0 -d2F2ZSBIb2xkaW5ncywgSW5jLjE6MDgGA1UEAxMxVHJ1c3R3YXZlIEdsb2JhbCBF -Q0MgUDM4NCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTB2MBAGByqGSM49AgEGBSuB -BAAiA2IABGvaDXU1CDFHBa5FmVXxERMuSvgQMSOjfoPTfygIOiYaOs+Xgh+AtycJ -j9GOMMQKmw6sWASr9zZ9lCOkmwqKi6vr/TklZvFe/oyujUF5nQlgziip04pt89ZF -1PKYhDhloKNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwYAMB0G -A1UdDgQWBBRVqYSJ0sEyvRjLbKYHTsjnnb6CkDAKBggqhkjOPQQDAwNnADBkAjA3 -AZKXRRJ+oPM+rRk6ct30UJMDEr5E0k9BpIycnR+j9sKS50gU/k6bpZFXrsY3crsC -MGclCrEMXu6pY5Jv5ZAL/mYiykf9ijH3g/56vxC+GCsej/YpHpRZ744hN8tRmKVu -Sw== ------END CERTIFICATE----- - -# Issuer: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Subject: CN=NAVER Global Root Certification Authority O=NAVER BUSINESS PLATFORM Corp. -# Label: "NAVER Global Root Certification Authority" -# Serial: 9013692873798656336226253319739695165984492813 -# MD5 Fingerprint: c8:7e:41:f6:25:3b:f5:09:b3:17:e8:46:3d:bf:d0:9b -# SHA1 Fingerprint: 8f:6b:f2:a9:27:4a:da:14:a0:c4:f4:8e:61:27:f9:c0:1e:78:5d:d1 -# SHA256 Fingerprint: 88:f4:38:dc:f8:ff:d1:fa:8f:42:91:15:ff:e5:f8:2a:e1:e0:6e:0c:70:c3:75:fa:ad:71:7b:34:a4:9e:72:65 ------BEGIN CERTIFICATE----- -MIIFojCCA4qgAwIBAgIUAZQwHqIL3fXFMyqxQ0Rx+NZQTQ0wDQYJKoZIhvcNAQEM -BQAwaTELMAkGA1UEBhMCS1IxJjAkBgNVBAoMHU5BVkVSIEJVU0lORVNTIFBMQVRG -T1JNIENvcnAuMTIwMAYDVQQDDClOQVZFUiBHbG9iYWwgUm9vdCBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eTAeFw0xNzA4MTgwODU4NDJaFw0zNzA4MTgyMzU5NTlaMGkx -CzAJBgNVBAYTAktSMSYwJAYDVQQKDB1OQVZFUiBCVVNJTkVTUyBQTEFURk9STSBD -b3JwLjEyMDAGA1UEAwwpTkFWRVIgR2xvYmFsIFJvb3QgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC21PGTXLVA -iQqrDZBbUGOukJR0F0Vy1ntlWilLp1agS7gvQnXp2XskWjFlqxcX0TM62RHcQDaH -38dq6SZeWYp34+hInDEW+j6RscrJo+KfziFTowI2MMtSAuXaMl3Dxeb57hHHi8lE -HoSTGEq0n+USZGnQJoViAbbJAh2+g1G7XNr4rRVqmfeSVPc0W+m/6imBEtRTkZaz -kVrd/pBzKPswRrXKCAfHcXLJZtM0l/aM9BhK4dA9WkW2aacp+yPOiNgSnABIqKYP -szuSjXEOdMWLyEz59JuOuDxp7W87UC9Y7cSw0BwbagzivESq2M0UXZR4Yb8Obtoq -vC8MC3GmsxY/nOb5zJ9TNeIDoKAYv7vxvvTWjIcNQvcGufFt7QSUqP620wbGQGHf -nZ3zVHbOUzoBppJB7ASjjw2i1QnK1sua8e9DXcCrpUHPXFNwcMmIpi3Ua2FzUCaG -YQ5fG8Ir4ozVu53BA0K6lNpfqbDKzE0K70dpAy8i+/Eozr9dUGWokG2zdLAIx6yo -0es+nPxdGoMuK8u180SdOqcXYZaicdNwlhVNt0xz7hlcxVs+Qf6sdWA7G2POAN3a -CJBitOUt7kinaxeZVL6HSuOpXgRM6xBtVNbv8ejyYhbLgGvtPe31HzClrkvJE+2K -AQHJuFFYwGY6sWZLxNUxAmLpdIQM201GLQIDAQABo0IwQDAdBgNVHQ4EFgQU0p+I -36HNLL3s9TsBAZMzJ7LrYEswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMB -Af8wDQYJKoZIhvcNAQEMBQADggIBADLKgLOdPVQG3dLSLvCkASELZ0jKbY7gyKoN -qo0hV4/GPnrK21HUUrPUloSlWGB/5QuOH/XcChWB5Tu2tyIvCZwTFrFsDDUIbatj -cu3cvuzHV+YwIHHW1xDBE1UBjCpD5EHxzzp6U5LOogMFDTjfArsQLtk70pt6wKGm -+LUx5vR1yblTmXVHIloUFcd4G7ad6Qz4G3bxhYTeodoS76TiEJd6eN4MUZeoIUCL -hr0N8F5OSza7OyAfikJW4Qsav3vQIkMsRIz75Sq0bBwcupTgE34h5prCy8VCZLQe -lHsIJchxzIdFV4XTnyliIoNRlwAYl3dqmJLJfGBs32x9SuRwTMKeuB330DTHD8z7 -p/8Dvq1wkNoL3chtl1+afwkyQf3NosxabUzyqkn+Zvjp2DXrDige7kgvOtB5CTh8 -piKCk5XQA76+AqAF3SAi428diDRgxuYKuQl1C/AH6GmWNcf7I4GOODm4RStDeKLR -LBT/DShycpWbXgnbiUSYqqFJu3FS8r/2/yehNq+4tneI3TqkbZs0kNwUXTC/t+sX -5Ie3cdCh13cV1ELX8vMxmV2b3RZtP+oGI/hGoiLtk/bdmuYqh7GYVPEi92tF4+KO -dh2ajcQGjTa3FPOdVGm3jjzVpG2Tgbet9r1ke8LJaDmgkpzNNIaRkPpkUZ3+/uul -9XXeifdy ------END CERTIFICATE----- - -# Issuer: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Subject: CN=AC RAIZ FNMT-RCM SERVIDORES SEGUROS O=FNMT-RCM OU=Ceres -# Label: "AC RAIZ FNMT-RCM SERVIDORES SEGUROS" -# Serial: 131542671362353147877283741781055151509 -# MD5 Fingerprint: 19:36:9c:52:03:2f:d2:d1:bb:23:cc:dd:1e:12:55:bb -# SHA1 Fingerprint: 62:ff:d9:9e:c0:65:0d:03:ce:75:93:d2:ed:3f:2d:32:c9:e3:e5:4a -# SHA256 Fingerprint: 55:41:53:b1:3d:2c:f9:dd:b7:53:bf:be:1a:4e:0a:e0:8d:0a:a4:18:70:58:fe:60:a2:b8:62:b2:e4:b8:7b:cb ------BEGIN CERTIFICATE----- -MIICbjCCAfOgAwIBAgIQYvYybOXE42hcG2LdnC6dlTAKBggqhkjOPQQDAzB4MQsw -CQYDVQQGEwJFUzERMA8GA1UECgwIRk5NVC1SQ00xDjAMBgNVBAsMBUNlcmVzMRgw -FgYDVQRhDA9WQVRFUy1RMjgyNjAwNEoxLDAqBgNVBAMMI0FDIFJBSVogRk5NVC1S -Q00gU0VSVklET1JFUyBTRUdVUk9TMB4XDTE4MTIyMDA5MzczM1oXDTQzMTIyMDA5 -MzczM1oweDELMAkGA1UEBhMCRVMxETAPBgNVBAoMCEZOTVQtUkNNMQ4wDAYDVQQL -DAVDZXJlczEYMBYGA1UEYQwPVkFURVMtUTI4MjYwMDRKMSwwKgYDVQQDDCNBQyBS -QUlaIEZOTVQtUkNNIFNFUlZJRE9SRVMgU0VHVVJPUzB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPa6V1PIyqvfNkpSIeSX0oNnnvBlUdBeh8dHsVnyV0ebAAKTRBdp20LH -sbI6GA60XYyzZl2hNPk2LEnb80b8s0RpRBNm/dfF/a82Tc4DTQdxz69qBdKiQ1oK -Um8BA06Oi6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFAG5L++/EYZg8k/QQW6rcx/n0m5JMAoGCCqGSM49BAMDA2kAMGYCMQCu -SuMrQMN0EfKVrRYj3k4MGuZdpSRea0R7/DjiT8ucRRcRTBQnJlU5dUoDzBOQn5IC -MQD6SmxgiHPz7riYYqnOK8LZiqZwMR2vsJRM60/G49HzYqc8/5MuB1xJAWdpEgJy -v+c= ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root R46 O=GlobalSign nv-sa -# Label: "GlobalSign Root R46" -# Serial: 1552617688466950547958867513931858518042577 -# MD5 Fingerprint: c4:14:30:e4:fa:66:43:94:2a:6a:1b:24:5f:19:d0:ef -# SHA1 Fingerprint: 53:a2:b0:4b:ca:6b:d6:45:e6:39:8a:8e:c4:0d:d2:bf:77:c3:a2:90 -# SHA256 Fingerprint: 4f:a3:12:6d:8d:3a:11:d1:c4:85:5a:4f:80:7c:ba:d6:cf:91:9d:3a:5a:88:b0:3b:ea:2c:63:72:d9:3c:40:c9 ------BEGIN CERTIFICATE----- -MIIFWjCCA0KgAwIBAgISEdK7udcjGJ5AXwqdLdDfJWfRMA0GCSqGSIb3DQEBDAUA -MEYxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYD -VQQDExNHbG9iYWxTaWduIFJvb3QgUjQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMy -MDAwMDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYt -c2ExHDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCsrHQy6LNl5brtQyYdpokNRbopiLKkHWPd08EsCVeJ -OaFV6Wc0dwxu5FUdUiXSE2te4R2pt32JMl8Nnp8semNgQB+msLZ4j5lUlghYruQG -vGIFAha/r6gjA7aUD7xubMLL1aa7DOn2wQL7Id5m3RerdELv8HQvJfTqa1VbkNud -316HCkD7rRlr+/fKYIje2sGP1q7Vf9Q8g+7XFkyDRTNrJ9CG0Bwta/OrffGFqfUo -0q3v84RLHIf8E6M6cqJaESvWJ3En7YEtbWaBkoe0G1h6zD8K+kZPTXhc+CtI4wSE -y132tGqzZfxCnlEmIyDLPRT5ge1lFgBPGmSXZgjPjHvjK8Cd+RTyG/FWaha/LIWF -zXg4mutCagI0GIMXTpRW+LaCtfOW3T3zvn8gdz57GSNrLNRyc0NXfeD412lPFzYE -+cCQYDdF3uYM2HSNrpyibXRdQr4G9dlkbgIQrImwTDsHTUB+JMWKmIJ5jqSngiCN -I/onccnfxkF0oE32kRbcRoxfKWMxWXEM2G/CtjJ9++ZdU6Z+Ffy7dXxd7Pj2Fxzs -x2sZy/N78CsHpdlseVR2bJ0cpm4O6XkMqCNqo98bMDGfsVR7/mrLZqrcZdCinkqa -ByFrgY/bxFn63iLABJzjqls2k+g9vXqhnQt2sQvHnf3PmKgGwvgqo6GDoLclcqUC -4wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQUA1yrc4GHqMywptWU4jaWSf8FmSwwDQYJKoZIhvcNAQEMBQADggIBAHx4 -7PYCLLtbfpIrXTncvtgdokIzTfnvpCo7RGkerNlFo048p9gkUbJUHJNOxO97k4Vg -JuoJSOD1u8fpaNK7ajFxzHmuEajwmf3lH7wvqMxX63bEIaZHU1VNaL8FpO7XJqti -2kM3S+LGteWygxk6x9PbTZ4IevPuzz5i+6zoYMzRx6Fcg0XERczzF2sUyQQCPtIk -pnnpHs6i58FZFZ8d4kuaPp92CC1r2LpXFNqD6v6MVenQTqnMdzGxRBF6XLE+0xRF -FRhiJBPSy03OXIPBNvIQtQ6IbbjhVp+J3pZmOUdkLG5NrmJ7v2B0GbhWrJKsFjLt -rWhV/pi60zTe9Mlhww6G9kuEYO4Ne7UyWHmRVSyBQ7N0H3qqJZ4d16GLuc1CLgSk -ZoNNiTW2bKg2SnkheCLQQrzRQDGQob4Ez8pn7fXwgNNgyYMqIgXQBztSvwyeqiv5 -u+YfjyW6hY0XHgL+XVAEV8/+LbzvXMAaq7afJMbfc2hIkCwU9D9SGuTSyxTDYWnP -4vkYxboznxSjBF25cfe1lNj2M8FawTSLfJvdkzrnE6JwYZ+vj+vYxXX4M2bUdGc6 -N3ec592kD3ZDZopD8p/7DEJ4Y9HiD2971KE9dJeFt0g5QdYg/NA6s/rob8SKunE3 -vouXsXgxT7PntgMTzlSdriVZzH81Xwj3QEUxeCp6 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Subject: CN=GlobalSign Root E46 O=GlobalSign nv-sa -# Label: "GlobalSign Root E46" -# Serial: 1552617690338932563915843282459653771421763 -# MD5 Fingerprint: b5:b8:66:ed:de:08:83:e3:c9:e2:01:34:06:ac:51:6f -# SHA1 Fingerprint: 39:b4:6c:d5:fe:80:06:eb:e2:2f:4a:bb:08:33:a0:af:db:b9:dd:84 -# SHA256 Fingerprint: cb:b9:c4:4d:84:b8:04:3e:10:50:ea:31:a6:9f:51:49:55:d7:bf:d2:e2:c6:b4:93:01:01:9a:d6:1d:9f:50:58 ------BEGIN CERTIFICATE----- -MIICCzCCAZGgAwIBAgISEdK7ujNu1LzmJGjFDYQdmOhDMAoGCCqGSM49BAMDMEYx -CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRwwGgYDVQQD -ExNHbG9iYWxTaWduIFJvb3QgRTQ2MB4XDTE5MDMyMDAwMDAwMFoXDTQ2MDMyMDAw -MDAwMFowRjELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2Ex -HDAaBgNVBAMTE0dsb2JhbFNpZ24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAScDrHPt+ieUnd1NPqlRqetMhkytAepJ8qUuwzSChDH2omwlwxwEwkBjtjq -R+q+soArzfwoDdusvKSGN+1wCAB16pMLey5SnCNoIwZD7JIvU4Tb+0cUB+hflGdd -yXqBPCCjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud -DgQWBBQxCpCPtsad0kRLgLWi5h+xEk8blTAKBggqhkjOPQQDAwNoADBlAjEA31SQ -7Zvvi5QCkxeCmb6zniz2C5GMn0oUsfZkvLtoURMMA/cVi4RguYv/Uo7njLwcAjA8 -+RHUjE7AwWHCFUyqqx0LMV87HOIAl0Qx5v5zli/altP+CAezNIm8BZ/3Hobui3A= ------END CERTIFICATE----- - -# Issuer: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH -# Subject: CN=GLOBALTRUST 2020 O=e-commerce monitoring GmbH -# Label: "GLOBALTRUST 2020" -# Serial: 109160994242082918454945253 -# MD5 Fingerprint: 8a:c7:6f:cb:6d:e3:cc:a2:f1:7c:83:fa:0e:78:d7:e8 -# SHA1 Fingerprint: d0:67:c1:13:51:01:0c:aa:d0:c7:6a:65:37:31:16:26:4f:53:71:a2 -# SHA256 Fingerprint: 9a:29:6a:51:82:d1:d4:51:a2:e3:7f:43:9b:74:da:af:a2:67:52:33:29:f9:0f:9a:0d:20:07:c3:34:e2:3c:9a ------BEGIN CERTIFICATE----- -MIIFgjCCA2qgAwIBAgILWku9WvtPilv6ZeUwDQYJKoZIhvcNAQELBQAwTTELMAkG -A1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9uaXRvcmluZyBHbWJIMRkw -FwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMB4XDTIwMDIxMDAwMDAwMFoXDTQwMDYx -MDAwMDAwMFowTTELMAkGA1UEBhMCQVQxIzAhBgNVBAoTGmUtY29tbWVyY2UgbW9u -aXRvcmluZyBHbWJIMRkwFwYDVQQDExBHTE9CQUxUUlVTVCAyMDIwMIICIjANBgkq -hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAri5WrRsc7/aVj6B3GyvTY4+ETUWiD59b -RatZe1E0+eyLinjF3WuvvcTfk0Uev5E4C64OFudBc/jbu9G4UeDLgztzOG53ig9Z -YybNpyrOVPu44sB8R85gfD+yc/LAGbaKkoc1DZAoouQVBGM+uq/ufF7MpotQsjj3 -QWPKzv9pj2gOlTblzLmMCcpL3TGQlsjMH/1WljTbjhzqLL6FLmPdqqmV0/0plRPw -yJiT2S0WR5ARg6I6IqIoV6Lr/sCMKKCmfecqQjuCgGOlYx8ZzHyyZqjC0203b+J+ -BlHZRYQfEs4kUmSFC0iAToexIiIwquuuvuAC4EDosEKAA1GqtH6qRNdDYfOiaxaJ -SaSjpCuKAsR49GiKweR6NrFvG5Ybd0mN1MkGco/PU+PcF4UgStyYJ9ORJitHHmkH -r96i5OTUawuzXnzUJIBHKWk7buis/UDr2O1xcSvy6Fgd60GXIsUf1DnQJ4+H4xj0 -4KlGDfV0OoIu0G4skaMxXDtG6nsEEFZegB31pWXogvziB4xiRfUg3kZwhqG8k9Me -dKZssCz3AwyIDMvUclOGvGBG85hqwvG/Q/lwIHfKN0F5VVJjjVsSn8VoxIidrPIw -q7ejMZdnrY8XD2zHc+0klGvIg5rQmjdJBKuxFshsSUktq6HQjJLyQUp5ISXbY9e2 -nKd+Qmn7OmMCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AQYwHQYDVR0OBBYEFNwuH9FhN3nkq9XVsxJxaD1qaJwiMB8GA1UdIwQYMBaAFNwu -H9FhN3nkq9XVsxJxaD1qaJwiMA0GCSqGSIb3DQEBCwUAA4ICAQCR8EICaEDuw2jA -VC/f7GLDw56KoDEoqoOOpFaWEhCGVrqXctJUMHytGdUdaG/7FELYjQ7ztdGl4wJC -XtzoRlgHNQIw4Lx0SsFDKv/bGtCwr2zD/cuz9X9tAy5ZVp0tLTWMstZDFyySCstd -6IwPS3BD0IL/qMy/pJTAvoe9iuOTe8aPmxadJ2W8esVCgmxcB9CpwYhgROmYhRZf -+I/KARDOJcP5YBugxZfD0yyIMaK9MOzQ0MAS8cE54+X1+NZK3TTN+2/BT+MAi1bi -kvcoskJ3ciNnxz8RFbLEAwW+uxF7Cr+obuf/WEPPm2eggAe2HcqtbepBEX4tdJP7 -wry+UUTF72glJ4DjyKDUEuzZpTcdN3y0kcra1LGWge9oXHYQSa9+pTeAsRxSvTOB -TI/53WXZFM2KJVj04sWDpQmQ1GwUY7VA3+vA/MRYfg0UFodUJ25W5HCEuGwyEn6C -MUO+1918oa2u1qsgEu8KwxCMSZY13At1XrFP1U80DhEgB3VDRemjEdqso5nCtnkn -4rnvyOL2NSl6dPrFf4IFYqYK6miyeUcGbvJXqBUzxvd4Sj1Ce2t+/vdG6tHrju+I -aFvowdlxfv1k7/9nR4hYJS8+hge9+6jlgqispdNpQ80xiEmEU5LAsTkbOYMBMMTy -qfrQA71yN2BWHzZ8vTmR9W0Nv3vXkg== ------END CERTIFICATE----- - -# Issuer: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Subject: CN=ANF Secure Server Root CA O=ANF Autoridad de Certificacion OU=ANF CA Raiz -# Label: "ANF Secure Server Root CA" -# Serial: 996390341000653745 -# MD5 Fingerprint: 26:a6:44:5a:d9:af:4e:2f:b2:1d:b6:65:b0:4e:e8:96 -# SHA1 Fingerprint: 5b:6e:68:d0:cc:15:b6:a0:5f:1e:c1:5f:ae:02:fc:6b:2f:5d:6f:74 -# SHA256 Fingerprint: fb:8f:ec:75:91:69:b9:10:6b:1e:51:16:44:c6:18:c5:13:04:37:3f:6c:06:43:08:8d:8b:ef:fd:1b:99:75:99 ------BEGIN CERTIFICATE----- -MIIF7zCCA9egAwIBAgIIDdPjvGz5a7EwDQYJKoZIhvcNAQELBQAwgYQxEjAQBgNV -BAUTCUc2MzI4NzUxMDELMAkGA1UEBhMCRVMxJzAlBgNVBAoTHkFORiBBdXRvcmlk -YWQgZGUgQ2VydGlmaWNhY2lvbjEUMBIGA1UECxMLQU5GIENBIFJhaXoxIjAgBgNV -BAMTGUFORiBTZWN1cmUgU2VydmVyIFJvb3QgQ0EwHhcNMTkwOTA0MTAwMDM4WhcN -MzkwODMwMTAwMDM4WjCBhDESMBAGA1UEBRMJRzYzMjg3NTEwMQswCQYDVQQGEwJF -UzEnMCUGA1UEChMeQU5GIEF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uMRQwEgYD -VQQLEwtBTkYgQ0EgUmFpejEiMCAGA1UEAxMZQU5GIFNlY3VyZSBTZXJ2ZXIgUm9v -dCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANvrayvmZFSVgpCj -cqQZAZ2cC4Ffc0m6p6zzBE57lgvsEeBbphzOG9INgxwruJ4dfkUyYA8H6XdYfp9q -yGFOtibBTI3/TO80sh9l2Ll49a2pcbnvT1gdpd50IJeh7WhM3pIXS7yr/2WanvtH -2Vdy8wmhrnZEE26cLUQ5vPnHO6RYPUG9tMJJo8gN0pcvB2VSAKduyK9o7PQUlrZX -H1bDOZ8rbeTzPvY1ZNoMHKGESy9LS+IsJJ1tk0DrtSOOMspvRdOoiXsezx76W0OL -zc2oD2rKDF65nkeP8Nm2CgtYZRczuSPkdxl9y0oukntPLxB3sY0vaJxizOBQ+OyR -p1RMVwnVdmPF6GUe7m1qzwmd+nxPrWAI/VaZDxUse6mAq4xhj0oHdkLePfTdsiQz -W7i1o0TJrH93PB0j7IKppuLIBkwC/qxcmZkLLxCKpvR/1Yd0DVlJRfbwcVw5Kda/ -SiOL9V8BY9KHcyi1Swr1+KuCLH5zJTIdC2MKF4EA/7Z2Xue0sUDKIbvVgFHlSFJn -LNJhiQcND85Cd8BEc5xEUKDbEAotlRyBr+Qc5RQe8TZBAQIvfXOn3kLMTOmJDVb3 -n5HUA8ZsyY/b2BzgQJhdZpmYgG4t/wHFzstGH6wCxkPmrqKEPMVOHj1tyRRM4y5B -u8o5vzY8KhmqQYdOpc5LMnndkEl/AgMBAAGjYzBhMB8GA1UdIwQYMBaAFJxf0Gxj -o1+TypOYCK2Mh6UsXME3MB0GA1UdDgQWBBScX9BsY6Nfk8qTmAitjIelLFzBNzAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOC -AgEATh65isagmD9uw2nAalxJUqzLK114OMHVVISfk/CHGT0sZonrDUL8zPB1hT+L -9IBdeeUXZ701guLyPI59WzbLWoAAKfLOKyzxj6ptBZNscsdW699QIyjlRRA96Gej -rw5VD5AJYu9LWaL2U/HANeQvwSS9eS9OICI7/RogsKQOLHDtdD+4E5UGUcjohybK -pFtqFiGS3XNgnhAY3jyB6ugYw3yJ8otQPr0R4hUDqDZ9MwFsSBXXiJCZBMXM5gf0 -vPSQ7RPi6ovDj6MzD8EpTBNO2hVWcXNyglD2mjN8orGoGjR0ZVzO0eurU+AagNjq -OknkJjCb5RyKqKkVMoaZkgoQI1YS4PbOTOK7vtuNknMBZi9iPrJyJ0U27U1W45eZ -/zo1PqVUSlJZS2Db7v54EX9K3BR5YLZrZAPbFYPhor72I5dQ8AkzNqdxliXzuUJ9 -2zg/LFis6ELhDtjTO0wugumDLmsx2d1Hhk9tl5EuT+IocTUW0fJz/iUrB0ckYyfI -+PbZa/wSMVYIwFNCr5zQM378BvAxRAMU8Vjq8moNqRGyg77FGr8H6lnco4g175x2 -MjxNBiLOFeXdntiP2t7SxDnlF4HPOEfrf4htWRvfn0IUrn7PqLBmZdo3r5+qPeoo -tt7VMVgWglvquxl1AnMaykgaIZOQCo6ThKd9OyMYkomgjaw= ------END CERTIFICATE----- - -# Issuer: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum EC-384 CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum EC-384 CA" -# Serial: 160250656287871593594747141429395092468 -# MD5 Fingerprint: b6:65:b3:96:60:97:12:a1:ec:4e:e1:3d:a3:c6:c9:f1 -# SHA1 Fingerprint: f3:3e:78:3c:ac:df:f4:a2:cc:ac:67:55:69:56:d7:e5:16:3c:e1:ed -# SHA256 Fingerprint: 6b:32:80:85:62:53:18:aa:50:d1:73:c9:8d:8b:da:09:d5:7e:27:41:3d:11:4c:f7:87:a0:f5:d0:6c:03:0c:f6 ------BEGIN CERTIFICATE----- -MIICZTCCAeugAwIBAgIQeI8nXIESUiClBNAt3bpz9DAKBggqhkjOPQQDAzB0MQsw -CQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEuMScw -JQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAXBgNVBAMT -EENlcnR1bSBFQy0zODQgQ0EwHhcNMTgwMzI2MDcyNDU0WhcNNDMwMzI2MDcyNDU0 -WjB0MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBT -LkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxGTAX -BgNVBAMTEENlcnR1bSBFQy0zODQgQ0EwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATE -KI6rGFtqvm5kN2PkzeyrOvfMobgOgknXhimfoZTy42B4mIF4Bk3y7JoOV2CDn7Tm -Fy8as10CW4kjPMIRBSqniBMY81CE1700LCeJVf/OTOffph8oxPBUw7l8t1Ot68Kj -QjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI0GZnQkdjrzife81r1HfS+8 -EF9LMA4GA1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNoADBlAjADVS2m5hjEfO/J -UG7BJw+ch69u1RsIGL2SKcHvlJF40jocVYli5RsJHrpka/F2tNQCMQC0QoSZ/6vn -nvuRlydd3LBbMHHOXjgaatkl5+r3YZJW+OraNsKHZZYuciUvf9/DE8k= ------END CERTIFICATE----- - -# Issuer: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Subject: CN=Certum Trusted Root CA O=Asseco Data Systems S.A. OU=Certum Certification Authority -# Label: "Certum Trusted Root CA" -# Serial: 40870380103424195783807378461123655149 -# MD5 Fingerprint: 51:e1:c2:e7:fe:4c:84:af:59:0e:2f:f4:54:6f:ea:29 -# SHA1 Fingerprint: c8:83:44:c0:18:ae:9f:cc:f1:87:b7:8f:22:d1:c5:d7:45:84:ba:e5 -# SHA256 Fingerprint: fe:76:96:57:38:55:77:3e:37:a9:5e:7a:d4:d9:cc:96:c3:01:57:c1:5d:31:76:5b:a9:b1:57:04:e1:ae:78:fd ------BEGIN CERTIFICATE----- -MIIFwDCCA6igAwIBAgIQHr9ZULjJgDdMBvfrVU+17TANBgkqhkiG9w0BAQ0FADB6 -MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEgU3lzdGVtcyBTLkEu -MScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHzAdBgNV -BAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwHhcNMTgwMzE2MTIxMDEzWhcNNDMw -MzE2MTIxMDEzWjB6MQswCQYDVQQGEwJQTDEhMB8GA1UEChMYQXNzZWNvIERhdGEg -U3lzdGVtcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRo -b3JpdHkxHzAdBgNVBAMTFkNlcnR1bSBUcnVzdGVkIFJvb3QgQ0EwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQDRLY67tzbqbTeRn06TpwXkKQMlzhyC93yZ -n0EGze2jusDbCSzBfN8pfktlL5On1AFrAygYo9idBcEq2EXxkd7fO9CAAozPOA/q -p1x4EaTByIVcJdPTsuclzxFUl6s1wB52HO8AU5853BSlLCIls3Jy/I2z5T4IHhQq -NwuIPMqw9MjCoa68wb4pZ1Xi/K1ZXP69VyywkI3C7Te2fJmItdUDmj0VDT06qKhF -8JVOJVkdzZhpu9PMMsmN74H+rX2Ju7pgE8pllWeg8xn2A1bUatMn4qGtg/BKEiJ3 -HAVz4hlxQsDsdUaakFjgao4rpUYwBI4Zshfjvqm6f1bxJAPXsiEodg42MEx51UGa -mqi4NboMOvJEGyCI98Ul1z3G4z5D3Yf+xOr1Uz5MZf87Sst4WmsXXw3Hw09Omiqi -7VdNIuJGmj8PkTQkfVXjjJU30xrwCSss0smNtA0Aq2cpKNgB9RkEth2+dv5yXMSF -ytKAQd8FqKPVhJBPC/PgP5sZ0jeJP/J7UhyM9uH3PAeXjA6iWYEMspA90+NZRu0P -qafegGtaqge2Gcu8V/OXIXoMsSt0Puvap2ctTMSYnjYJdmZm/Bo/6khUHL4wvYBQ -v3y1zgD2DGHZ5yQD4OMBgQ692IU0iL2yNqh7XAjlRICMb/gv1SHKHRzQ+8S1h9E6 -Tsd2tTVItQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSM+xx1 -vALTn04uSNn5YFSqxLNP+jAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQENBQAD -ggIBAEii1QALLtA/vBzVtVRJHlpr9OTy4EA34MwUe7nJ+jW1dReTagVphZzNTxl4 -WxmB82M+w85bj/UvXgF2Ez8sALnNllI5SW0ETsXpD4YN4fqzX4IS8TrOZgYkNCvo -zMrnadyHncI013nR03e4qllY/p0m+jiGPp2Kh2RX5Rc64vmNueMzeMGQ2Ljdt4NR -5MTMI9UGfOZR0800McD2RrsLrfw9EAUqO0qRJe6M1ISHgCq8CYyqOhNf6DR5UMEQ -GfnTKB7U0VEwKbOukGfWHwpjscWpxkIxYxeU72nLL/qMFH3EQxiJ2fAyQOaA4kZf -5ePBAFmo+eggvIksDkc0C+pXwlM2/KfUrzHN/gLldfq5Jwn58/U7yn2fqSLLiMmq -0Uc9NneoWWRrJ8/vJ8HjJLWG965+Mk2weWjROeiQWMODvA8s1pfrzgzhIMfatz7D -P78v3DSk+yshzWePS/Tj6tQ/50+6uaWTRRxmHyH6ZF5v4HaUMst19W7l9o/HuKTM -qJZ9ZPskWkoDbGs4xugDQ5r3V7mzKWmTOPQD8rv7gmsHINFSH5pkAnuYZttcTVoP -0ISVoDwUQwbKytu4QTbaakRnh6+v40URFWkIsr4WOZckbxJF0WddCajJFdr60qZf -E2Efv4WstK2tBZQIgx51F9NxO5NQI1mg7TyRVJ12AMXDuDjb ------END CERTIFICATE----- - -# Issuer: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Subject: CN=TunTrust Root CA O=Agence Nationale de Certification Electronique -# Label: "TunTrust Root CA" -# Serial: 108534058042236574382096126452369648152337120275 -# MD5 Fingerprint: 85:13:b9:90:5b:36:5c:b6:5e:b8:5a:f8:e0:31:57:b4 -# SHA1 Fingerprint: cf:e9:70:84:0f:e0:73:0f:9d:f6:0c:7f:2c:4b:ee:20:46:34:9c:bb -# SHA256 Fingerprint: 2e:44:10:2a:b5:8c:b8:54:19:45:1c:8e:19:d9:ac:f3:66:2c:af:bc:61:4b:6a:53:96:0a:30:f7:d0:e2:eb:41 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIUEwLV4kBMkkaGFmddtLu7sms+/BMwDQYJKoZIhvcNAQEL -BQAwYTELMAkGA1UEBhMCVE4xNzA1BgNVBAoMLkFnZW5jZSBOYXRpb25hbGUgZGUg -Q2VydGlmaWNhdGlvbiBFbGVjdHJvbmlxdWUxGTAXBgNVBAMMEFR1blRydXN0IFJv -b3QgQ0EwHhcNMTkwNDI2MDg1NzU2WhcNNDQwNDI2MDg1NzU2WjBhMQswCQYDVQQG -EwJUTjE3MDUGA1UECgwuQWdlbmNlIE5hdGlvbmFsZSBkZSBDZXJ0aWZpY2F0aW9u -IEVsZWN0cm9uaXF1ZTEZMBcGA1UEAwwQVHVuVHJ1c3QgUm9vdCBDQTCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMPN0/y9BFPdDCA61YguBUtB9YOCfvdZ -n56eY+hz2vYGqU8ftPkLHzmMmiDQfgbU7DTZhrx1W4eI8NLZ1KMKsmwb60ksPqxd -2JQDoOw05TDENX37Jk0bbjBU2PWARZw5rZzJJQRNmpA+TkBuimvNKWfGzC3gdOgF -VwpIUPp6Q9p+7FuaDmJ2/uqdHYVy7BG7NegfJ7/Boce7SBbdVtfMTqDhuazb1YMZ -GoXRlJfXyqNlC/M4+QKu3fZnz8k/9YosRxqZbwUN/dAdgjH8KcwAWJeRTIAAHDOF -li/LQcKLEITDCSSJH7UP2dl3RxiSlGBcx5kDPP73lad9UKGAwqmDrViWVSHbhlnU -r8a83YFuB9tgYv7sEG7aaAH0gxupPqJbI9dkxt/con3YS7qC0lH4Zr8GRuR5KiY2 -eY8fTpkdso8MDhz/yV3A/ZAQprE38806JG60hZC/gLkMjNWb1sjxVj8agIl6qeIb -MlEsPvLfe/ZdeikZjuXIvTZxi11Mwh0/rViizz1wTaZQmCXcI/m4WEEIcb9PuISg -jwBUFfyRbVinljvrS5YnzWuioYasDXxU5mZMZl+QviGaAkYt5IPCgLnPSz7ofzwB -7I9ezX/SKEIBlYrilz0QIX32nRzFNKHsLA4KUiwSVXAkPcvCFDVDXSdOvsC9qnyW -5/yeYa1E0wCXAgMBAAGjYzBhMB0GA1UdDgQWBBQGmpsfU33x9aTI04Y+oXNZtPdE -ITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFAaamx9TffH1pMjThj6hc1m0 -90QhMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAqgVutt0Vyb+z -xiD2BkewhpMl0425yAA/l/VSJ4hxyXT968pk21vvHl26v9Hr7lxpuhbI87mP0zYu -QEkHDVneixCwSQXi/5E/S7fdAo74gShczNxtr18UnH1YeA32gAm56Q6XKRm4t+v4 -FstVEuTGfbvE7Pi1HE4+Z7/FXxttbUcoqgRYYdZ2vyJ/0Adqp2RT8JeNnYA/u8EH -22Wv5psymsNUk8QcCMNE+3tjEUPRahphanltkE8pjkcFwRJpadbGNjHh/PqAulxP -xOu3Mqz4dWEX1xAZufHSCe96Qp1bWgvUxpVOKs7/B9dPfhgGiPEZtdmYu65xxBzn -dFlY7wyJz4sfdZMaBBSSSFCp61cpABbjNhzI+L/wM9VBD8TMPN3pM0MBkRArHtG5 -Xc0yGYuPjCB31yLEQtyEFpslbei0VXF/sHyz03FJuc9SpAQ/3D2gu68zngowYI7b -nV2UqL1g52KAdoGDDIzMMEZJ4gzSqK/rYXHv5yJiqfdcZGyfFoxnNidF9Ql7v/YQ -CvGwjVRDjAS6oz/v4jXH+XTgbzRB0L9zZVcg+ZtnemZoJE6AZb0QmQZZ8mWvuMZH -u/2QeItBcy6vVR/cO5JyboTT0GFMDcx2V+IthSIVNg3rAZ3r2OvEhJn7wAzMMujj -d9qDRIueVSjAi1jTkD5OGwDxFa2DK5o= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS RSA Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS RSA Root CA 2021" -# Serial: 76817823531813593706434026085292783742 -# MD5 Fingerprint: 65:47:9b:58:86:dd:2c:f0:fc:a2:84:1f:1e:96:c4:91 -# SHA1 Fingerprint: 02:2d:05:82:fa:88:ce:14:0c:06:79:de:7f:14:10:e9:45:d7:a5:6d -# SHA256 Fingerprint: d9:5d:0e:8e:da:79:52:5b:f9:be:b1:1b:14:d2:10:0d:32:94:98:5f:0c:62:d9:fa:bd:9c:d9:99:ec:cb:7b:1d ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIQOcqTHO9D88aOk8f0ZIk4fjANBgkqhkiG9w0BAQsFADBs -MQswCQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl -c2VhcmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBSU0Eg -Um9vdCBDQSAyMDIxMB4XDTIxMDIxOTEwNTUzOFoXDTQ1MDIxMzEwNTUzN1owbDEL -MAkGA1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl -YXJjaCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgUlNBIFJv -b3QgQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAIvC569l -mwVnlskNJLnQDmT8zuIkGCyEf3dRywQRNrhe7Wlxp57kJQmXZ8FHws+RFjZiPTgE -4VGC/6zStGndLuwRo0Xua2s7TL+MjaQenRG56Tj5eg4MmOIjHdFOY9TnuEFE+2uv -a9of08WRiFukiZLRgeaMOVig1mlDqa2YUlhu2wr7a89o+uOkXjpFc5gH6l8Cct4M -pbOfrqkdtx2z/IpZ525yZa31MJQjB/OCFks1mJxTuy/K5FrZx40d/JiZ+yykgmvw -Kh+OC19xXFyuQnspiYHLA6OZyoieC0AJQTPb5lh6/a6ZcMBaD9YThnEvdmn8kN3b -LW7R8pv1GmuebxWMevBLKKAiOIAkbDakO/IwkfN4E8/BPzWr8R0RI7VDIp4BkrcY -AuUR0YLbFQDMYTfBKnya4dC6s1BG7oKsnTH4+yPiAwBIcKMJJnkVU2DzOFytOOqB -AGMUuTNe3QvboEUHGjMJ+E20pwKmafTCWQWIZYVWrkvL4N48fS0ayOn7H6NhStYq -E613TBoYm5EPWNgGVMWX+Ko/IIqmhaZ39qb8HOLubpQzKoNQhArlT4b4UEV4AIHr -W2jjJo3Me1xR9BQsQL4aYB16cmEdH2MtiKrOokWQCPxrvrNQKlr9qEgYRtaQQJKQ -CoReaDH46+0N0x3GfZkYVVYnZS6NRcUk7M7jAgMBAAGjQjBAMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFApII6ZgpJIKM+qTW8VX6iVNvRLuMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAPpBIqm5iFSVmewzVjIuJndftTgfvnNAU -X15QvWiWkKQUEapobQk1OUAJ2vQJLDSle1mESSmXdMgHHkdt8s4cUCbjnj1AUz/3 -f5Z2EMVGpdAgS1D0NTsY9FVqQRtHBmg8uwkIYtlfVUKqrFOFrJVWNlar5AWMxaja -H6NpvVMPxP/cyuN+8kyIhkdGGvMA9YCRotxDQpSbIPDRzbLrLFPCU3hKTwSUQZqP -JzLB5UkZv/HywouoCjkxKLR9YjYsTewfM7Z+d21+UPCfDtcRj88YxeMn/ibvBZ3P -zzfF0HvaO7AWhAw6k9a+F9sPPg4ZeAnHqQJyIkv3N3a6dcSFA1pj1bF1BcK5vZSt -jBWZp5N99sXzqnTPBIWUmAD04vnKJGW/4GKvyMX6ssmeVkjaef2WdhW+o45WxLM0 -/L5H9MG0qPzVMIho7suuyWPEdr6sOBjhXlzPrjoiUevRi7PzKzMHVIf6tLITe7pT -BGIBnfHAT+7hOtSLIBD6Alfm78ELt5BGnBkpjNxvoEppaZS3JGWg/6w/zgH7IS79 -aPib8qXPMThcFarmlwDB31qlpzmq6YR/PFGoOtmUW4y/Twhx5duoXNTSpv4Ao8YW -xw/ogM4cKGR0GQjTQuPOAF1/sdwTsOEFy9EgqoZ0njnnkf3/W9b3raYvAwtt41dU -63ZTGI0RmLo= ------END CERTIFICATE----- - -# Issuer: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Subject: CN=HARICA TLS ECC Root CA 2021 O=Hellenic Academic and Research Institutions CA -# Label: "HARICA TLS ECC Root CA 2021" -# Serial: 137515985548005187474074462014555733966 -# MD5 Fingerprint: ae:f7:4c:e5:66:35:d1:b7:9b:8c:22:93:74:d3:4b:b0 -# SHA1 Fingerprint: bc:b0:c1:9d:e9:98:92:70:19:38:57:e9:8d:a7:b4:5d:6e:ee:01:48 -# SHA256 Fingerprint: 3f:99:cc:47:4a:cf:ce:4d:fe:d5:87:94:66:5e:47:8d:15:47:73:9f:2e:78:0f:1b:b4:ca:9b:13:30:97:d4:01 ------BEGIN CERTIFICATE----- -MIICVDCCAdugAwIBAgIQZ3SdjXfYO2rbIvT/WeK/zjAKBggqhkjOPQQDAzBsMQsw -CQYDVQQGEwJHUjE3MDUGA1UECgwuSGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2Vh -cmNoIEluc3RpdHV0aW9ucyBDQTEkMCIGA1UEAwwbSEFSSUNBIFRMUyBFQ0MgUm9v -dCBDQSAyMDIxMB4XDTIxMDIxOTExMDExMFoXDTQ1MDIxMzExMDEwOVowbDELMAkG -A1UEBhMCR1IxNzA1BgNVBAoMLkhlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj -aCBJbnN0aXR1dGlvbnMgQ0ExJDAiBgNVBAMMG0hBUklDQSBUTFMgRUNDIFJvb3Qg -Q0EgMjAyMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDgI/rGgltJ6rK9JOtDA4MM7 -KKrxcm1lAEeIhPyaJmuqS7psBAqIXhfyVYf8MLA04jRYVxqEU+kw2anylnTDUR9Y -STHMmE5gEYd103KUkE+bECUqqHgtvpBBWJAVcqeht6NCMEAwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUyRtTgRL+BNUW0aq8mm+3oJUZbsowDgYDVR0PAQH/BAQD -AgGGMAoGCCqGSM49BAMDA2cAMGQCMBHervjcToiwqfAircJRQO9gcS3ujwLEXQNw -SaSS6sUUiHCm0w2wqsosQJz76YJumgIwK0eaB8bRwoF8yguWGEEbo/QwCZ61IygN -nxS2PFOiTAZpffpskcYqSUXm7LcT4Tps ------END CERTIFICATE----- - -# Issuer: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Subject: CN=Autoridad de Certificacion Firmaprofesional CIF A62634068 -# Label: "Autoridad de Certificacion Firmaprofesional CIF A62634068" -# Serial: 1977337328857672817 -# MD5 Fingerprint: 4e:6e:9b:54:4c:ca:b7:fa:48:e4:90:b1:15:4b:1c:a3 -# SHA1 Fingerprint: 0b:be:c2:27:22:49:cb:39:aa:db:35:5c:53:e3:8c:ae:78:ff:b6:fe -# SHA256 Fingerprint: 57:de:05:83:ef:d2:b2:6e:03:61:da:99:da:9d:f4:64:8d:ef:7e:e8:44:1c:3b:72:8a:fa:9b:cd:e0:f9:b2:6a ------BEGIN CERTIFICATE----- -MIIGFDCCA/ygAwIBAgIIG3Dp0v+ubHEwDQYJKoZIhvcNAQELBQAwUTELMAkGA1UE -BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h -cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0xNDA5MjMxNTIyMDdaFw0zNjA1 -MDUxNTIyMDdaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg -Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 -thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM -cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG -L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i -NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h -X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b -m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy -Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja -EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T -KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF -6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh -OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMB0GA1UdDgQWBBRlzeurNR4APn7VdMAc -tHNHDhpkLzASBgNVHRMBAf8ECDAGAQH/AgEBMIGmBgNVHSAEgZ4wgZswgZgGBFUd -IAAwgY8wLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuZmlybWFwcm9mZXNpb25hbC5j -b20vY3BzMFwGCCsGAQUFBwICMFAeTgBQAGEAcwBlAG8AIABkAGUAIABsAGEAIABC -AG8AbgBhAG4AbwB2AGEAIAA0ADcAIABCAGEAcgBjAGUAbABvAG4AYQAgADAAOAAw -ADEANzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAHSHKAIrdx9m -iWTtj3QuRhy7qPj4Cx2Dtjqn6EWKB7fgPiDL4QjbEwj4KKE1soCzC1HA01aajTNF -Sa9J8OA9B3pFE1r/yJfY0xgsfZb43aJlQ3CTkBW6kN/oGbDbLIpgD7dvlAceHabJ -hfa9NPhAeGIQcDq+fUs5gakQ1JZBu/hfHAsdCPKxsIl68veg4MSPi3i1O1ilI45P -Vf42O+AMt8oqMEEgtIDNrvx2ZnOorm7hfNoD6JQg5iKj0B+QXSBTFCZX2lSX3xZE -EAEeiGaPcjiT3SC3NL7X8e5jjkd5KAb881lFJWAiMxujX6i6KtoaPc1A6ozuBRWV -1aUsIC+nmCjuRfzxuIgALI9C2lHVnOUTaHFFQ4ueCyE8S1wF3BqfmI7avSKecs2t -CsvMo2ebKHTEm9caPARYpoKdrcd7b/+Alun4jWq9GJAd/0kakFI3ky88Al2CdgtR -5xbHV/g4+afNmyJU72OwFW1TZQNKXkqgsqeOSQBZONXH9IBk9W6VULgRfhVwOEqw -f9DEMnDAGf/JOC0ULGb0QkTmVXYbgBVX/8Cnp6o5qtjTcNAuuuuUavpfNIbnYrX9 -ivAwhZTJryQCL2/W3Wf+47BVTwSYT6RBVuKT0Gro1vP7ZeDOdcQxWQzugsgMYDNK -GbqEZycPvEJdvSRUDewdcAZfpLz6IHxV ------END CERTIFICATE----- - -# Issuer: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus ECC Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus ECC Root CA" -# Serial: 630369271402956006249506845124680065938238527194 -# MD5 Fingerprint: de:4b:c1:f5:52:8c:9b:43:e1:3e:8f:55:54:17:8d:85 -# SHA1 Fingerprint: f6:9c:db:b0:fc:f6:02:13:b6:52:32:a6:a3:91:3f:16:70:da:c3:e1 -# SHA256 Fingerprint: 30:fb:ba:2c:32:23:8e:2a:98:54:7a:f9:79:31:e5:50:42:8b:9b:3f:1c:8e:eb:66:33:dc:fa:86:c5:b2:7d:d3 ------BEGIN CERTIFICATE----- -MIICDzCCAZWgAwIBAgIUbmq8WapTvpg5Z6LSa6Q75m0c1towCgYIKoZIzj0EAwMw -RzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4xGjAY -BgNVBAMTEXZUcnVzIEVDQyBSb290IENBMB4XDTE4MDczMTA3MjY0NFoXDTQzMDcz -MTA3MjY0NFowRzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28u -LEx0ZC4xGjAYBgNVBAMTEXZUcnVzIEVDQyBSb290IENBMHYwEAYHKoZIzj0CAQYF -K4EEACIDYgAEZVBKrox5lkqqHAjDo6LN/llWQXf9JpRCux3NCNtzslt188+cToL0 -v/hhJoVs1oVbcnDS/dtitN9Ti72xRFhiQgnH+n9bEOf+QP3A2MMrMudwpremIFUd -e4BdS49nTPEQo0IwQDAdBgNVHQ4EFgQUmDnNvtiyjPeyq+GtJK97fKHbH88wDwYD -VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwCgYIKoZIzj0EAwMDaAAwZQIw -V53dVvHH4+m4SVBrm2nDb+zDfSXkV5UTQJtS0zvzQBm8JsctBp61ezaf9SXUY2sA -AjEA6dPGnlaaKsyh2j/IZivTWJwghfqrkYpwcBE4YGQLYgmRWAD5Tfs0aNoJrSEG -GJTO ------END CERTIFICATE----- - -# Issuer: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Subject: CN=vTrus Root CA O=iTrusChina Co.,Ltd. -# Label: "vTrus Root CA" -# Serial: 387574501246983434957692974888460947164905180485 -# MD5 Fingerprint: b8:c9:37:df:fa:6b:31:84:64:c5:ea:11:6a:1b:75:fc -# SHA1 Fingerprint: 84:1a:69:fb:f5:cd:1a:25:34:13:3d:e3:f8:fc:b8:99:d0:c9:14:b7 -# SHA256 Fingerprint: 8a:71:de:65:59:33:6f:42:6c:26:e5:38:80:d0:0d:88:a1:8d:a4:c6:a9:1f:0d:cb:61:94:e2:06:c5:c9:63:87 ------BEGIN CERTIFICATE----- -MIIFVjCCAz6gAwIBAgIUQ+NxE9izWRRdt86M/TX9b7wFjUUwDQYJKoZIhvcNAQEL -BQAwQzELMAkGA1UEBhMCQ04xHDAaBgNVBAoTE2lUcnVzQ2hpbmEgQ28uLEx0ZC4x -FjAUBgNVBAMTDXZUcnVzIFJvb3QgQ0EwHhcNMTgwNzMxMDcyNDA1WhcNNDMwNzMx -MDcyNDA1WjBDMQswCQYDVQQGEwJDTjEcMBoGA1UEChMTaVRydXNDaGluYSBDby4s -THRkLjEWMBQGA1UEAxMNdlRydXMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAL1VfGHTuB0EYgWgrmy3cLRB6ksDXhA/kFocizuwZotsSKYc -IrrVQJLuM7IjWcmOvFjai57QGfIvWcaMY1q6n6MLsLOaXLoRuBLpDLvPbmyAhykU -AyyNJJrIZIO1aqwTLDPxn9wsYTwaP3BVm60AUn/PBLn+NvqcwBauYv6WTEN+VRS+ -GrPSbcKvdmaVayqwlHeFXgQPYh1jdfdr58tbmnDsPmcF8P4HCIDPKNsFxhQnL4Z9 -8Cfe/+Z+M0jnCx5Y0ScrUw5XSmXX+6KAYPxMvDVTAWqXcoKv8R1w6Jz1717CbMdH -flqUhSZNO7rrTOiwCcJlwp2dCZtOtZcFrPUGoPc2BX70kLJrxLT5ZOrpGgrIDajt -J8nU57O5q4IikCc9Kuh8kO+8T/3iCiSn3mUkpF3qwHYw03dQ+A0Em5Q2AXPKBlim -0zvc+gRGE1WKyURHuFE5Gi7oNOJ5y1lKCn+8pu8fA2dqWSslYpPZUxlmPCdiKYZN -pGvu/9ROutW04o5IWgAZCfEF2c6Rsffr6TlP9m8EQ5pV9T4FFL2/s1m02I4zhKOQ -UqqzApVg+QxMaPnu1RcN+HFXtSXkKe5lXa/R7jwXC1pDxaWG6iSe4gUH3DRCEpHW -OXSuTEGC2/KmSNGzm/MzqvOmwMVO9fSddmPmAsYiS8GVP1BkLFTltvA8Kc9XAgMB -AAGjQjBAMB0GA1UdDgQWBBRUYnBj8XWEQ1iO0RYgscasGrz2iTAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAKbqSSaet -8PFww+SX8J+pJdVrnjT+5hpk9jprUrIQeBqfTNqK2uwcN1LgQkv7bHbKJAs5EhWd -nxEt/Hlk3ODg9d3gV8mlsnZwUKT+twpw1aA08XXXTUm6EdGz2OyC/+sOxL9kLX1j -bhd47F18iMjrjld22VkE+rxSH0Ws8HqA7Oxvdq6R2xCOBNyS36D25q5J08FsEhvM -Kar5CKXiNxTKsbhm7xqC5PD48acWabfbqWE8n/Uxy+QARsIvdLGx14HuqCaVvIiv -TDUHKgLKeBRtRytAVunLKmChZwOgzoy8sHJnxDHO2zTlJQNgJXtxmOTAGytfdELS -S8VZCAeHvsXDf+eW2eHcKJfWjwXj9ZtOyh1QRwVTsMo554WgicEFOwE30z9J4nfr -I8iIZjs9OXYhRvHsXyO466JmdXTBQPfYaJqT4i2pLr0cox7IdMakLXogqzu4sEb9 -b91fUlV1YvCXoHzXOP0l382gmxDPi7g4Xl7FtKYCNqEeXxzP4padKar9mK5S4fNB -UvupLnKWnyfjqnN9+BojZns7q2WwMgFLFT49ok8MKzWixtlnEjUwzXYuFrOZnk1P -Ti07NEPhmg4NpGaXutIcSkwsKouLgU9xGqndXHt7CMUADTdA43x7VF8vhV929ven -sBxXVsFy6K2ir40zSbofitzmdHxghm+Hl3s= ------END CERTIFICATE----- - -# Issuer: CN=ISRG Root X2 O=Internet Security Research Group -# Subject: CN=ISRG Root X2 O=Internet Security Research Group -# Label: "ISRG Root X2" -# Serial: 87493402998870891108772069816698636114 -# MD5 Fingerprint: d3:9e:c4:1e:23:3c:a6:df:cf:a3:7e:6d:e0:14:e6:e5 -# SHA1 Fingerprint: bd:b1:b9:3c:d5:97:8d:45:c6:26:14:55:f8:db:95:c7:5a:d1:53:af -# SHA256 Fingerprint: 69:72:9b:8e:15:a8:6e:fc:17:7a:57:af:b7:17:1d:fc:64:ad:d2:8c:2f:ca:8c:f1:50:7e:34:45:3c:cb:14:70 ------BEGIN CERTIFICATE----- -MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw -CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg -R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 -MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT -ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw -EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW -+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 -ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI -zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW -tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 -/q4AaOeMSQ+2b1tbFfLn ------END CERTIFICATE----- - -# Issuer: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Subject: CN=HiPKI Root CA - G1 O=Chunghwa Telecom Co., Ltd. -# Label: "HiPKI Root CA - G1" -# Serial: 60966262342023497858655262305426234976 -# MD5 Fingerprint: 69:45:df:16:65:4b:e8:68:9a:8f:76:5f:ff:80:9e:d3 -# SHA1 Fingerprint: 6a:92:e4:a8:ee:1b:ec:96:45:37:e3:29:57:49:cd:96:e3:e5:d2:60 -# SHA256 Fingerprint: f0:15:ce:3c:c2:39:bf:ef:06:4b:e9:f1:d2:c4:17:e1:a0:26:4a:0a:94:be:1f:0c:8d:12:18:64:eb:69:49:cc ------BEGIN CERTIFICATE----- -MIIFajCCA1KgAwIBAgIQLd2szmKXlKFD6LDNdmpeYDANBgkqhkiG9w0BAQsFADBP -MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 -ZC4xGzAZBgNVBAMMEkhpUEtJIFJvb3QgQ0EgLSBHMTAeFw0xOTAyMjIwOTQ2MDRa -Fw0zNzEyMzExNTU5NTlaME8xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3 -YSBUZWxlY29tIENvLiwgTHRkLjEbMBkGA1UEAwwSSGlQS0kgUm9vdCBDQSAtIEcx -MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA9B5/UnMyDHPkvRN0o9Qw -qNCuS9i233VHZvR85zkEHmpwINJaR3JnVfSl6J3VHiGh8Ge6zCFovkRTv4354twv -Vcg3Px+kwJyz5HdcoEb+d/oaoDjq7Zpy3iu9lFc6uux55199QmQ5eiY29yTw1S+6 -lZgRZq2XNdZ1AYDgr/SEYYwNHl98h5ZeQa/rh+r4XfEuiAU+TCK72h8q3VJGZDnz -Qs7ZngyzsHeXZJzA9KMuH5UHsBffMNsAGJZMoYFL3QRtU6M9/Aes1MU3guvklQgZ -KILSQjqj2FPseYlgSGDIcpJQ3AOPgz+yQlda22rpEZfdhSi8MEyr48KxRURHH+CK -FgeW0iEPU8DtqX7UTuybCeyvQqww1r/REEXgphaypcXTT3OUM3ECoWqj1jOXTyFj -HluP2cFeRXF3D4FdXyGarYPM+l7WjSNfGz1BryB1ZlpK9p/7qxj3ccC2HTHsOyDr -y+K49a6SsvfhhEvyovKTmiKe0xRvNlS9H15ZFblzqMF8b3ti6RZsR1pl8w4Rm0bZ -/W3c1pzAtH2lsN0/Vm+h+fbkEkj9Bn8SV7apI09bA8PgcSojt/ewsTu8mL3WmKgM -a/aOEmem8rJY5AIJEzypuxC00jBF8ez3ABHfZfjcK0NVvxaXxA/VLGGEqnKG/uY6 -fsI/fe78LxQ+5oXdUG+3Se0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNV -HQ4EFgQU8ncX+l6o/vY9cdVouslGDDjYr7AwDgYDVR0PAQH/BAQDAgGGMA0GCSqG -SIb3DQEBCwUAA4ICAQBQUfB13HAE4/+qddRxosuej6ip0691x1TPOhwEmSKsxBHi -7zNKpiMdDg1H2DfHb680f0+BazVP6XKlMeJ45/dOlBhbQH3PayFUhuaVevvGyuqc -SE5XCV0vrPSltJczWNWseanMX/mF+lLFjfiRFOs6DRfQUsJ748JzjkZ4Bjgs6Fza -ZsT0pPBWGTMpWmWSBUdGSquEwx4noR8RkpkndZMPvDY7l1ePJlsMu5wP1G4wB9Tc -XzZoZjmDlicmisjEOf6aIW/Vcobpf2Lll07QJNBAsNB1CI69aO4I1258EHBGG3zg -iLKecoaZAeO/n0kZtCW+VmWuF2PlHt/o/0elv+EmBYTksMCv5wiZqAxeJoBF1Pho -L5aPruJKHJwWDBNvOIf2u8g0X5IDUXlwpt/L9ZlNec1OvFefQ05rLisY+GpzjLrF -Ne85akEez3GoorKGB1s6yeHvP2UEgEcyRHCVTjFnanRbEEV16rCf0OY1/k6fi8wr -kkVbbiVghUbN0aqwdmaTd5a+g744tiROJgvM7XpWGuDpWsZkrUx6AEhEL7lAuxM+ -vhV4nYWBSipX3tUZQ9rbyltHhoMLP7YNdnhzeSJesYAfz77RP1YQmCuVh6EfnWQU -YDksswBVLuT1sw5XxJFBAJw/6KXf6vb/yPCtbVKoF6ubYfwSUTXkJf2vqmqGOQ== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign ECC Root CA - R4 -# Label: "GlobalSign ECC Root CA - R4" -# Serial: 159662223612894884239637590694 -# MD5 Fingerprint: 26:29:f8:6d:e1:88:bf:a2:65:7f:aa:c4:cd:0f:7f:fc -# SHA1 Fingerprint: 6b:a0:b0:98:e1:71:ef:5a:ad:fe:48:15:80:77:10:f4:bd:6f:0b:28 -# SHA256 Fingerprint: b0:85:d7:0b:96:4f:19:1a:73:e4:af:0d:54:ae:7a:0e:07:aa:fd:af:9b:71:dd:08:62:13:8a:b7:32:5a:24:a2 ------BEGIN CERTIFICATE----- -MIIB3DCCAYOgAwIBAgINAgPlfvU/k/2lCSGypjAKBggqhkjOPQQDAjBQMSQwIgYD -VQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0gUjQxEzARBgNVBAoTCkdsb2Jh -bFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTIxMTEzMDAwMDAwWhcNMzgw -MTE5MDMxNDA3WjBQMSQwIgYDVQQLExtHbG9iYWxTaWduIEVDQyBSb290IENBIC0g -UjQxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wWTAT -BgcqhkjOPQIBBggqhkjOPQMBBwNCAAS4xnnTj2wlDp8uORkcA6SumuU5BwkWymOx -uYb4ilfBV85C+nOh92VC/x7BALJucw7/xyHlGKSq2XE/qNS5zowdo0IwQDAOBgNV -HQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVLB7rUW44kB/ -+wpu+74zyTyjhNUwCgYIKoZIzj0EAwIDRwAwRAIgIk90crlgr/HmnKAWBVBfw147 -bmF0774BxL4YSFlhgjICICadVGNA3jdgUM/I2O2dgq43mLyjj0xMqTQrbO/7lZsm ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R1 O=Google Trust Services LLC -# Subject: CN=GTS Root R1 O=Google Trust Services LLC -# Label: "GTS Root R1" -# Serial: 159662320309726417404178440727 -# MD5 Fingerprint: 05:fe:d0:bf:71:a8:a3:76:63:da:01:e0:d8:52:dc:40 -# SHA1 Fingerprint: e5:8c:1c:c4:91:3b:38:63:4b:e9:10:6e:e3:ad:8e:6b:9d:d9:81:4a -# SHA256 Fingerprint: d9:47:43:2a:bd:e7:b7:fa:90:fc:2e:6b:59:10:1b:12:80:e0:e1:c7:e4:e4:0f:a3:c6:88:7f:ff:57:a7:f4:cf ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlk28xsBNJiGuiFzANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjEwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQC2EQKLHuOhd5s73L+UPreVp0A8of2C+X0yBoJx9vaMf/vo -27xqLpeXo4xL+Sv2sfnOhB2x+cWX3u+58qPpvBKJXqeqUqv4IyfLpLGcY9vXmX7w -Cl7raKb0xlpHDU0QM+NOsROjyBhsS+z8CZDfnWQpJSMHobTSPS5g4M/SCYe7zUjw -TcLCeoiKu7rPWRnWr4+wB7CeMfGCwcDfLqZtbBkOtdh+JhpFAz2weaSUKK0Pfybl -qAj+lug8aJRT7oM6iCsVlgmy4HqMLnXWnOunVmSPlk9orj2XwoSPwLxAwAtcvfaH -szVsrBhQf4TgTM2S0yDpM7xSma8ytSmzJSq0SPly4cpk9+aCEI3oncKKiPo4Zor8 -Y/kB+Xj9e1x3+naH+uzfsQ55lVe0vSbv1gHR6xYKu44LtcXFilWr06zqkUspzBmk -MiVOKvFlRNACzqrOSbTqn3yDsEB750Orp2yjj32JgfpMpf/VjsPOS+C12LOORc92 -wO1AK/1TD7Cn1TsNsYqiA94xrcx36m97PtbfkSIS5r762DL8EGMUUXLeXdYWk70p -aDPvOmbsB4om3xPXV2V4J95eSRQAogB/mqghtqmxlbCluQ0WEdrHbEg8QOB+DVrN -VjzRlwW5y0vtOUucxD/SVRNuJLDWcfr0wbrM7Rv1/oFB2ACYPTrIrnqYNxgFlQID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQU5K8rJnEaK0gnhS9SZizv8IkTcT4wDQYJKoZIhvcNAQEMBQADggIBAJ+qQibb -C5u+/x6Wki4+omVKapi6Ist9wTrYggoGxval3sBOh2Z5ofmmWJyq+bXmYOfg6LEe -QkEzCzc9zolwFcq1JKjPa7XSQCGYzyI0zzvFIoTgxQ6KfF2I5DUkzps+GlQebtuy -h6f88/qBVRRiClmpIgUxPoLW7ttXNLwzldMXG+gnoot7TiYaelpkttGsN/H9oPM4 -7HLwEXWdyzRSjeZ2axfG34arJ45JK3VmgRAhpuo+9K4l/3wV3s6MJT/KYnAK9y8J -ZgfIPxz88NtFMN9iiMG1D53Dn0reWVlHxYciNuaCp+0KueIHoI17eko8cdLiA6Ef -MgfdG+RCzgwARWGAtQsgWSl4vflVy2PFPEz0tv/bal8xa5meLMFrUKTX5hgUvYU/ -Z6tGn6D/Qqc6f1zLXbBwHSs09dR2CQzreExZBfMzQsNhFRAbd03OIozUhfJFfbdT -6u9AWpQKXCBfTkBdYiJ23//OYb2MI3jSNwLgjt7RETeJ9r/tSQdirpLsQBqvFAnZ -0E6yove+7u7Y/9waLd64NnHi/Hm3lCXRSHNboTXns5lndcEZOitHTtNCjv0xyBZm -2tIMPNuzjsmhDYAPexZ3FL//2wmUspO8IFgV6dtxQ/PeEMMA3KgqlbbC1j+Qa3bb -bP6MvPJwNQzcmRk13NfIRmPVNnGuV/u3gm3c ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R2 O=Google Trust Services LLC -# Subject: CN=GTS Root R2 O=Google Trust Services LLC -# Label: "GTS Root R2" -# Serial: 159662449406622349769042896298 -# MD5 Fingerprint: 1e:39:c0:53:e6:1e:29:82:0b:ca:52:55:36:5d:57:dc -# SHA1 Fingerprint: 9a:44:49:76:32:db:de:fa:d0:bc:fb:5a:7b:17:bd:9e:56:09:24:94 -# SHA256 Fingerprint: 8d:25:cd:97:22:9d:bf:70:35:6b:da:4e:b3:cc:73:40:31:e2:4c:f0:0f:af:cf:d3:2d:c7:6e:b5:84:1c:7e:a8 ------BEGIN CERTIFICATE----- -MIIFVzCCAz+gAwIBAgINAgPlrsWNBCUaqxElqjANBgkqhkiG9w0BAQwFADBHMQsw -CQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEU -MBIGA1UEAxMLR1RTIFJvb3QgUjIwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAw -MDAwWjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZp -Y2VzIExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDO3v2m++zsFDQ8BwZabFn3GTXd98GdVarTzTukk3LvCvpt -nfbwhYBboUhSnznFt+4orO/LdmgUud+tAWyZH8QiHZ/+cnfgLFuv5AS/T3KgGjSY -6Dlo7JUle3ah5mm5hRm9iYz+re026nO8/4Piy33B0s5Ks40FnotJk9/BW9BuXvAu -MC6C/Pq8tBcKSOWIm8Wba96wyrQD8Nr0kLhlZPdcTK3ofmZemde4wj7I0BOdre7k -RXuJVfeKH2JShBKzwkCX44ofR5GmdFrS+LFjKBC4swm4VndAoiaYecb+3yXuPuWg -f9RhD1FLPD+M2uFwdNjCaKH5wQzpoeJ/u1U8dgbuak7MkogwTZq9TwtImoS1mKPV -+3PBV2HdKFZ1E66HjucMUQkQdYhMvI35ezzUIkgfKtzra7tEscszcTJGr61K8Yzo -dDqs5xoic4DSMPclQsciOzsSrZYuxsN2B6ogtzVJV+mSSeh2FnIxZyuWfoqjx5RW -Ir9qS34BIbIjMt/kmkRtWVtd9QCgHJvGeJeNkP+byKq0rxFROV7Z+2et1VsRnTKa -G73VululycslaVNVJ1zgyjbLiGH7HrfQy+4W+9OmTN6SpdTi3/UGVN4unUu0kzCq -gc7dGtxRcw1PcOnlthYhGXmy5okLdWTK1au8CcEYof/UVKGFPP0UJAOyh9OktwID -AQABo0IwQDAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E -FgQUu//KjiOfT5nK2+JopqUVJxce2Q4wDQYJKoZIhvcNAQEMBQADggIBAB/Kzt3H -vqGf2SdMC9wXmBFqiN495nFWcrKeGk6c1SuYJF2ba3uwM4IJvd8lRuqYnrYb/oM8 -0mJhwQTtzuDFycgTE1XnqGOtjHsB/ncw4c5omwX4Eu55MaBBRTUoCnGkJE+M3DyC -B19m3H0Q/gxhswWV7uGugQ+o+MePTagjAiZrHYNSVc61LwDKgEDg4XSsYPWHgJ2u -NmSRXbBoGOqKYcl3qJfEycel/FVL8/B/uWU9J2jQzGv6U53hkRrJXRqWbTKH7QMg -yALOWr7Z6v2yTcQvG99fevX4i8buMTolUVVnjWQye+mew4K6Ki3pHrTgSAai/Gev -HyICc/sgCq+dVEuhzf9gR7A/Xe8bVr2XIZYtCtFenTgCR2y59PYjJbigapordwj6 -xLEokCZYCDzifqrXPW+6MYgKBesntaFJ7qBFVHvmJ2WZICGoo7z7GJa7Um8M7YNR -TOlZ4iBgxcJlkoKM8xAfDoqXvneCbT+PHV28SSe9zE8P4c52hgQjxcCMElv924Sg -JPFI/2R80L5cFtHvma3AH/vLrrw4IgYmZNralw4/KBVEqE8AyvCazM90arQ+POuV -7LXTWtiBmelDGDfrs7vRWGJB82bSj6p4lVQgw1oudCvV0b4YacCs1aTPObpRhANl -6WLAYv7YTVWW4tAR+kg0Eeye7QUd5MjWHYbL ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R3 O=Google Trust Services LLC -# Subject: CN=GTS Root R3 O=Google Trust Services LLC -# Label: "GTS Root R3" -# Serial: 159662495401136852707857743206 -# MD5 Fingerprint: 3e:e7:9d:58:02:94:46:51:94:e5:e0:22:4a:8b:e7:73 -# SHA1 Fingerprint: ed:e5:71:80:2b:c8:92:b9:5b:83:3c:d2:32:68:3f:09:cd:a0:1e:46 -# SHA256 Fingerprint: 34:d8:a7:3e:e2:08:d9:bc:db:0d:95:65:20:93:4b:4e:40:e6:94:82:59:6e:8b:6f:73:c8:42:6b:01:0a:6f:48 ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPluILrIPglJ209ZjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjMwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjMwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AAQfTzOHMymKoYTey8chWEGJ6ladK0uFxh1MJ7x/JlFyb+Kf1qPKzEUURout736G -jOyxfi//qXGdGIRFBEFVbivqJn+7kAHjSxm65FSWRQmx1WyRRK2EE46ajA2ADDL2 -4CejQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBTB8Sa6oC2uhYHP0/EqEr24Cmf9vDAKBggqhkjOPQQDAwNpADBmAjEA9uEglRR7 -VKOQFhG/hMjqb2sXnh5GmCCbn9MN2azTL818+FsuVbu/3ZL3pAzcMeGiAjEA/Jdm -ZuVDFhOD3cffL74UOO0BzrEXGhF16b0DjyZ+hOXJYKaV11RZt+cRLInUue4X ------END CERTIFICATE----- - -# Issuer: CN=GTS Root R4 O=Google Trust Services LLC -# Subject: CN=GTS Root R4 O=Google Trust Services LLC -# Label: "GTS Root R4" -# Serial: 159662532700760215368942768210 -# MD5 Fingerprint: 43:96:83:77:19:4d:76:b3:9d:65:52:e4:1d:22:a5:e8 -# SHA1 Fingerprint: 77:d3:03:67:b5:e0:0c:15:f6:0c:38:61:df:7c:e1:3b:92:46:4d:47 -# SHA256 Fingerprint: 34:9d:fa:40:58:c5:e2:63:12:3b:39:8a:e7:95:57:3c:4e:13:13:c8:3f:e6:8f:93:55:6c:d5:e8:03:1b:3c:7d ------BEGIN CERTIFICATE----- -MIICCTCCAY6gAwIBAgINAgPlwGjvYxqccpBQUjAKBggqhkjOPQQDAzBHMQswCQYD -VQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2VzIExMQzEUMBIG -A1UEAxMLR1RTIFJvb3QgUjQwHhcNMTYwNjIyMDAwMDAwWhcNMzYwNjIyMDAwMDAw -WjBHMQswCQYDVQQGEwJVUzEiMCAGA1UEChMZR29vZ2xlIFRydXN0IFNlcnZpY2Vz -IExMQzEUMBIGA1UEAxMLR1RTIFJvb3QgUjQwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AATzdHOnaItgrkO4NcWBMHtLSZ37wWHO5t5GvWvVYRg1rkDdc/eJkTBa6zzuhXyi -QHY7qca4R9gq55KRanPpsXI5nymfopjTX15YhmUPoYRlBtHci8nHc8iMai/lxKvR -HYqjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBSATNbrdP9JNqPV2Py1PsVq8JQdjDAKBggqhkjOPQQDAwNpADBmAjEA6ED/g94D -9J+uHXqnLrmvT/aDHQ4thQEd0dlq7A/Cr8deVl5c1RxYIigL9zC2L7F8AjEA8GE8 -p/SgguMh1YQdc4acLa/KNJvxn7kjNuK8YAOdgLOaVsjh4rsUecrNIdSUtUlD ------END CERTIFICATE----- - -# Issuer: CN=Telia Root CA v2 O=Telia Finland Oyj -# Subject: CN=Telia Root CA v2 O=Telia Finland Oyj -# Label: "Telia Root CA v2" -# Serial: 7288924052977061235122729490515358 -# MD5 Fingerprint: 0e:8f:ac:aa:82:df:85:b1:f4:dc:10:1c:fc:99:d9:48 -# SHA1 Fingerprint: b9:99:cd:d1:73:50:8a:c4:47:05:08:9c:8c:88:fb:be:a0:2b:40:cd -# SHA256 Fingerprint: 24:2b:69:74:2f:cb:1e:5b:2a:bf:98:89:8b:94:57:21:87:54:4e:5b:4d:99:11:78:65:73:62:1f:6a:74:b8:2c ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIPAWdfJ9b+euPkrL4JWwWeMA0GCSqGSIb3DQEBCwUAMEQx -CzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZMBcGA1UE -AwwQVGVsaWEgUm9vdCBDQSB2MjAeFw0xODExMjkxMTU1NTRaFw00MzExMjkxMTU1 -NTRaMEQxCzAJBgNVBAYTAkZJMRowGAYDVQQKDBFUZWxpYSBGaW5sYW5kIE95ajEZ -MBcGA1UEAwwQVGVsaWEgUm9vdCBDQSB2MjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBALLQPwe84nvQa5n44ndp586dpAO8gm2h/oFlH0wnrI4AuhZ76zBq -AMCzdGh+sq/H1WKzej9Qyow2RCRj0jbpDIX2Q3bVTKFgcmfiKDOlyzG4OiIjNLh9 -vVYiQJ3q9HsDrWj8soFPmNB06o3lfc1jw6P23pLCWBnglrvFxKk9pXSW/q/5iaq9 -lRdU2HhE8Qx3FZLgmEKnpNaqIJLNwaCzlrI6hEKNfdWV5Nbb6WLEWLN5xYzTNTOD -n3WhUidhOPFZPY5Q4L15POdslv5e2QJltI5c0BE0312/UqeBAMN/mUWZFdUXyApT -7GPzmX3MaRKGwhfwAZ6/hLzRUssbkmbOpFPlob/E2wnW5olWK8jjfN7j/4nlNW4o -6GwLI1GpJQXrSPjdscr6bAhR77cYbETKJuFzxokGgeWKrLDiKca5JLNrRBH0pUPC -TEPlcDaMtjNXepUugqD0XBCzYYP2AgWGLnwtbNwDRm41k9V6lS/eINhbfpSQBGq6 -WT0EBXWdN6IOLj3rwaRSg/7Qa9RmjtzG6RJOHSpXqhC8fF6CfaamyfItufUXJ63R -DolUK5X6wK0dmBR4M0KGCqlztft0DbcbMBnEWg4cJ7faGND/isgFuvGqHKI3t+ZI -pEYslOqodmJHixBTB0hXbOKSTbauBcvcwUpej6w9GU7C7WB1K9vBykLVAgMBAAGj -YzBhMB8GA1UdIwQYMBaAFHKs5DN5qkWH9v2sHZ7Wxy+G2CQ5MB0GA1UdDgQWBBRy -rOQzeapFh/b9rB2e1scvhtgkOTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAoDtZpwmUPjaE0n4vOaWWl/oRrfxn83EJ -8rKJhGdEr7nv7ZbsnGTbMjBvZ5qsfl+yqwE2foH65IRe0qw24GtixX1LDoJt0nZi -0f6X+J8wfBj5tFJ3gh1229MdqfDBmgC9bXXYfef6xzijnHDoRnkDry5023X4blMM -A8iZGok1GTzTyVR8qPAs5m4HeW9q4ebqkYJpCh3DflminmtGFZhb069GHWLIzoBS -SRE/yQQSwxN8PzuKlts8oB4KtItUsiRnDe+Cy748fdHif64W1lZYudogsYMVoe+K -TTJvQS8TUoKU1xrBeKJR3Stwbbca+few4GeXVtt8YVMJAygCQMez2P2ccGrGKMOF -6eLtGpOg3kuYooQ+BXcBlj37tCAPnHICehIv1aO6UXivKitEZU61/Qrowc15h2Er -3oBXRb9n8ZuRXqWk7FlIEA04x7D6w0RtBPV4UBySllva9bguulvP5fBqnUsvWHMt -Ty3EHD70sz+rFQ47GUGKpMFXEmZxTPpT41frYpUJnlTd0cI8Vzy9OK2YZLe4A5pT -VmBds9hCG1xLEooc6+t9xnppxyd/pPiL8uSUZodL6ZQHCRJ5irLrdATczvREWeAW -ysUsWNc8e89ihmpQfTU2Zqf7N+cox9jQraVplI/owd8k+BsHMYeB2F326CjYSlKA -rBPuUBQemMc= ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST BR Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST BR Root CA 1 2020" -# Serial: 165870826978392376648679885835942448534 -# MD5 Fingerprint: b5:aa:4b:d5:ed:f7:e3:55:2e:8f:72:0a:f3:75:b8:ed -# SHA1 Fingerprint: 1f:5b:98:f0:e3:b5:f7:74:3c:ed:e6:b0:36:7d:32:cd:f4:09:41:67 -# SHA256 Fingerprint: e5:9a:aa:81:60:09:c2:2b:ff:5b:25:ba:d3:7d:f3:06:f0:49:79:7c:1f:81:d8:5a:b0:89:e6:57:bd:8f:00:44 ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQfMmPK4TX3+oPyWWa00tNljAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEJSIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTA5NDUwMFoXDTM1MDIxMTA5 -NDQ1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBCUiBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABMbLxyjR+4T1mu9CFCDhQ2tuda38KwOE1HaTJddZO0Flax7mNCq7dPYS -zuht56vkPE4/RAiLzRZxy7+SmfSk1zxQVFKQhYN4lGdnoxwJGT11NIXe7WB9xwy0 -QVK5buXuQqOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHOREKv/ -VbNafAkl1bK6CKBrqx9tMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2JyX3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwQlIlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAlJAtE/rhY/hhY+ithXhUkZy4kzg+GkHaQBZTQgjKL47xPoFW -wKrY7RjEsK70PvomAjEA8yjixtsrmfu3Ubgko6SUeho/5jbiA1czijDLgsfWFBHV -dWNbFJWcHwHP2NVypw87 ------END CERTIFICATE----- - -# Issuer: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Subject: CN=D-TRUST EV Root CA 1 2020 O=D-Trust GmbH -# Label: "D-TRUST EV Root CA 1 2020" -# Serial: 126288379621884218666039612629459926992 -# MD5 Fingerprint: 8c:2d:9d:70:9f:48:99:11:06:11:fb:e9:cb:30:c0:6e -# SHA1 Fingerprint: 61:db:8c:21:59:69:03:90:d8:7c:9c:12:86:54:cf:9d:3d:f4:dd:07 -# SHA256 Fingerprint: 08:17:0d:1a:a3:64:53:90:1a:2f:95:92:45:e3:47:db:0c:8d:37:ab:aa:bc:56:b8:1a:a1:00:dc:95:89:70:db ------BEGIN CERTIFICATE----- -MIIC2zCCAmCgAwIBAgIQXwJB13qHfEwDo6yWjfv/0DAKBggqhkjOPQQDAzBIMQsw -CQYDVQQGEwJERTEVMBMGA1UEChMMRC1UcnVzdCBHbWJIMSIwIAYDVQQDExlELVRS -VVNUIEVWIFJvb3QgQ0EgMSAyMDIwMB4XDTIwMDIxMTEwMDAwMFoXDTM1MDIxMTA5 -NTk1OVowSDELMAkGA1UEBhMCREUxFTATBgNVBAoTDEQtVHJ1c3QgR21iSDEiMCAG -A1UEAxMZRC1UUlVTVCBFViBSb290IENBIDEgMjAyMDB2MBAGByqGSM49AgEGBSuB -BAAiA2IABPEL3YZDIBnfl4XoIkqbz52Yv7QFJsnL46bSj8WeeHsxiamJrSc8ZRCC -/N/DnU7wMyPE0jL1HLDfMxddxfCxivnvubcUyilKwg+pf3VlSSowZ/Rk99Yad9rD -wpdhQntJraOCAQ0wggEJMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFH8QARY3 -OqQo5FD4pPfsazK2/umLMA4GA1UdDwEB/wQEAwIBBjCBxgYDVR0fBIG+MIG7MD6g -PKA6hjhodHRwOi8vY3JsLmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X2V2X3Jvb3Rf -Y2FfMV8yMDIwLmNybDB5oHegdYZzbGRhcDovL2RpcmVjdG9yeS5kLXRydXN0Lm5l -dC9DTj1ELVRSVVNUJTIwRVYlMjBSb290JTIwQ0ElMjAxJTIwMjAyMCxPPUQtVHJ1 -c3QlMjBHbWJILEM9REU/Y2VydGlmaWNhdGVyZXZvY2F0aW9ubGlzdDAKBggqhkjO -PQQDAwNpADBmAjEAyjzGKnXCXnViOTYAYFqLwZOZzNnbQTs7h5kXO9XMT8oi96CA -y/m0sRtW9XLS/BnRAjEAkfcwkz8QRitxpNA7RJvAKQIFskF3UfN5Wp6OFKBOQtJb -gfM0agPnIjhQW+0ZT0MW ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS ECC P384 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS ECC P384 Root G5" -# Serial: 13129116028163249804115411775095713523 -# MD5 Fingerprint: d3:71:04:6a:43:1c:db:a6:59:e1:a8:a3:aa:c5:71:ed -# SHA1 Fingerprint: 17:f3:de:5e:9f:0f:19:e9:8e:f6:1f:32:26:6e:20:c4:07:ae:30:ee -# SHA256 Fingerprint: 01:8e:13:f0:77:25:32:cf:80:9b:d1:b1:72:81:86:72:83:fc:48:c6:e1:3b:e9:c6:98:12:85:4a:49:0c:1b:05 ------BEGIN CERTIFICATE----- -MIICGTCCAZ+gAwIBAgIQCeCTZaz32ci5PhwLBCou8zAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJjAkBgNVBAMTHURp -Z2lDZXJ0IFRMUyBFQ0MgUDM4NCBSb290IEc1MB4XDTIxMDExNTAwMDAwMFoXDTQ2 -MDExNDIzNTk1OVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ -bmMuMSYwJAYDVQQDEx1EaWdpQ2VydCBUTFMgRUNDIFAzODQgUm9vdCBHNTB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABMFEoc8Rl1Ca3iOCNQfN0MsYndLxf3c1TzvdlHJS -7cI7+Oz6e2tYIOyZrsn8aLN1udsJ7MgT9U7GCh1mMEy7H0cKPGEQQil8pQgO4CLp -0zVozptjn4S1mU1YoI71VOeVyaNCMEAwHQYDVR0OBBYEFMFRRVBZqz7nLFr6ICIS -B4CIfBFqMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49 -BAMDA2gAMGUCMQCJao1H5+z8blUD2WdsJk6Dxv3J+ysTvLd6jLRl0mlpYxNjOyZQ -LgGheQaRnUi/wr4CMEfDFXuxoJGZSZOoPHzoRgaLLPIxAJSdYsiJvRmEFOml+wG4 -DXZDjC5Ty3zfDBeWUA== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Subject: CN=DigiCert TLS RSA4096 Root G5 O=DigiCert, Inc. -# Label: "DigiCert TLS RSA4096 Root G5" -# Serial: 11930366277458970227240571539258396554 -# MD5 Fingerprint: ac:fe:f7:34:96:a9:f2:b3:b4:12:4b:e4:27:41:6f:e1 -# SHA1 Fingerprint: a7:88:49:dc:5d:7c:75:8c:8c:de:39:98:56:b3:aa:d0:b2:a5:71:35 -# SHA256 Fingerprint: 37:1a:00:dc:05:33:b3:72:1a:7e:eb:40:e8:41:9e:70:79:9d:2b:0a:0f:2c:1d:80:69:31:65:f7:ce:c4:ad:75 ------BEGIN CERTIFICATE----- -MIIFZjCCA06gAwIBAgIQCPm0eKj6ftpqMzeJ3nzPijANBgkqhkiG9w0BAQwFADBN -MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xJTAjBgNVBAMT -HERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwHhcNMjEwMTE1MDAwMDAwWhcN -NDYwMTE0MjM1OTU5WjBNMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQs -IEluYy4xJTAjBgNVBAMTHERpZ2lDZXJ0IFRMUyBSU0E0MDk2IFJvb3QgRzUwggIi -MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCz0PTJeRGd/fxmgefM1eS87IE+ -ajWOLrfn3q/5B03PMJ3qCQuZvWxX2hhKuHisOjmopkisLnLlvevxGs3npAOpPxG0 -2C+JFvuUAT27L/gTBaF4HI4o4EXgg/RZG5Wzrn4DReW+wkL+7vI8toUTmDKdFqgp -wgscONyfMXdcvyej/Cestyu9dJsXLfKB2l2w4SMXPohKEiPQ6s+d3gMXsUJKoBZM -pG2T6T867jp8nVid9E6P/DsjyG244gXazOvswzH016cpVIDPRFtMbzCe88zdH5RD -nU1/cHAN1DrRN/BsnZvAFJNY781BOHW8EwOVfH/jXOnVDdXifBBiqmvwPXbzP6Po -sMH976pXTayGpxi0KcEsDr9kvimM2AItzVwv8n/vFfQMFawKsPHTDU9qTXeXAaDx -Zre3zu/O7Oyldcqs4+Fj97ihBMi8ez9dLRYiVu1ISf6nL3kwJZu6ay0/nTvEF+cd -Lvvyz6b84xQslpghjLSR6Rlgg/IwKwZzUNWYOwbpx4oMYIwo+FKbbuH2TbsGJJvX -KyY//SovcfXWJL5/MZ4PbeiPT02jP/816t9JXkGPhvnxd3lLG7SjXi/7RgLQZhNe -XoVPzthwiHvOAbWWl9fNff2C+MIkwcoBOU+NosEUQB+cZtUMCUbW8tDRSHZWOkPL -tgoRObqME2wGtZ7P6wIDAQABo0IwQDAdBgNVHQ4EFgQUUTMc7TZArxfTJc1paPKv -TiM+s0EwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcN -AQEMBQADggIBAGCmr1tfV9qJ20tQqcQjNSH/0GEwhJG3PxDPJY7Jv0Y02cEhJhxw -GXIeo8mH/qlDZJY6yFMECrZBu8RHANmfGBg7sg7zNOok992vIGCukihfNudd5N7H -PNtQOa27PShNlnx2xlv0wdsUpasZYgcYQF+Xkdycx6u1UQ3maVNVzDl92sURVXLF -O4uJ+DQtpBflF+aZfTCIITfNMBc9uPK8qHWgQ9w+iUuQrm0D4ByjoJYJu32jtyoQ -REtGBzRj7TG5BO6jm5qu5jF49OokYTurWGT/u4cnYiWB39yhL/btp/96j1EuMPik -AdKFOV8BmZZvWltwGUb+hmA+rYAQCd05JS9Yf7vSdPD3Rh9GOUrYU9DzLjtxpdRv -/PNn5AeP3SYZ4Y1b+qOTEZvpyDrDVWiakuFSdjjo4bq9+0/V77PnSIMx8IIh47a+ -p6tv75/fTM8BuGJqIz3nCU2AG3swpMPdB380vqQmsvZB6Akd4yCYqjdP//fx4ilw -MUc/dNAUFvohigLVigmUdy7yWSiLfFCSCmZ4OIN1xLVaqBHG5cGdZlXPU8Sv13WF -qUITVuwhd4GTWgzqltlJyqEI8pc7bZsEGCREjnwB8twl2F6GmrE52/WRMmrRpnCK -ovfepEWFJqgejF0pW8hL2JpqA15w8oVPbEtoL8pU9ozaMv7Da4M/OMZ+ ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root R1 O=Certainly -# Subject: CN=Certainly Root R1 O=Certainly -# Label: "Certainly Root R1" -# Serial: 188833316161142517227353805653483829216 -# MD5 Fingerprint: 07:70:d4:3e:82:87:a0:fa:33:36:13:f4:fa:33:e7:12 -# SHA1 Fingerprint: a0:50:ee:0f:28:71:f4:27:b2:12:6d:6f:50:96:25:ba:cc:86:42:af -# SHA256 Fingerprint: 77:b8:2c:d8:64:4c:43:05:f7:ac:c5:cb:15:6b:45:67:50:04:03:3d:51:c6:0c:62:02:a8:e0:c3:34:67:d3:a0 ------BEGIN CERTIFICATE----- -MIIFRzCCAy+gAwIBAgIRAI4P+UuQcWhlM1T01EQ5t+AwDQYJKoZIhvcNAQELBQAw -PTELMAkGA1UEBhMCVVMxEjAQBgNVBAoTCUNlcnRhaW5seTEaMBgGA1UEAxMRQ2Vy -dGFpbmx5IFJvb3QgUjEwHhcNMjEwNDAxMDAwMDAwWhcNNDYwNDAxMDAwMDAwWjA9 -MQswCQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0 -YWlubHkgUm9vdCBSMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANA2 -1B/q3avk0bbm+yLA3RMNansiExyXPGhjZjKcA7WNpIGD2ngwEc/csiu+kr+O5MQT -vqRoTNoCaBZ0vrLdBORrKt03H2As2/X3oXyVtwxwhi7xOu9S98zTm/mLvg7fMbed -aFySpvXl8wo0tf97ouSHocavFwDvA5HtqRxOcT3Si2yJ9HiG5mpJoM610rCrm/b0 -1C7jcvk2xusVtyWMOvwlDbMicyF0yEqWYZL1LwsYpfSt4u5BvQF5+paMjRcCMLT5 -r3gajLQ2EBAHBXDQ9DGQilHFhiZ5shGIXsXwClTNSaa/ApzSRKft43jvRl5tcdF5 -cBxGX1HpyTfcX35pe0HfNEXgO4T0oYoKNp43zGJS4YkNKPl6I7ENPT2a/Z2B7yyQ -wHtETrtJ4A5KVpK8y7XdeReJkd5hiXSSqOMyhb5OhaRLWcsrxXiOcVTQAjeZjOVJ -6uBUcqQRBi8LjMFbvrWhsFNunLhgkR9Za/kt9JQKl7XsxXYDVBtlUrpMklZRNaBA -2CnbrlJ2Oy0wQJuK0EJWtLeIAaSHO1OWzaMWj/Nmqhexx2DgwUMFDO6bW2BvBlyH -Wyf5QBGenDPBt+U1VwV/J84XIIwc/PH72jEpSe31C4SnT8H2TsIonPru4K8H+zMR -eiFPCyEQtkA6qyI6BJyLm4SGcprSp6XEtHWRqSsjAgMBAAGjQjBAMA4GA1UdDwEB -/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTgqj8ljZ9EXME66C6u -d0yEPmcM9DANBgkqhkiG9w0BAQsFAAOCAgEAuVevuBLaV4OPaAszHQNTVfSVcOQr -PbA56/qJYv331hgELyE03fFo8NWWWt7CgKPBjcZq91l3rhVkz1t5BXdm6ozTaw3d -8VkswTOlMIAVRQdFGjEitpIAq5lNOo93r6kiyi9jyhXWx8bwPWz8HA2YEGGeEaIi -1wrykXprOQ4vMMM2SZ/g6Q8CRFA3lFV96p/2O7qUpUzpvD5RtOjKkjZUbVwlKNrd -rRT90+7iIgXr0PK3aBLXWopBGsaSpVo7Y0VPv+E6dyIvXL9G+VoDhRNCX8reU9di -taY1BMJH/5n9hN9czulegChB8n3nHpDYT3Y+gjwN/KUD+nsa2UUeYNrEjvn8K8l7 -lcUq/6qJ34IxD3L/DCfXCh5WAFAeDJDBlrXYFIW7pw0WwfgHJBu6haEaBQmAupVj -yTrsJZ9/nbqkRxWbRHDxakvWOF5D8xh+UG7pWijmZeZ3Gzr9Hb4DJqPb1OG7fpYn -Kx3upPvaJVQTA945xsMfTZDsjxtK0hzthZU4UHlG1sGQUDGpXJpuHfUzVounmdLy -yCwzk5Iwx06MZTMQZBf9JBeW0Y3COmor6xOLRPIh80oat3df1+2IpHLlOR+Vnb5n -wXARPbv0+Em34yaXOp/SX3z7wJl8OSngex2/DaeP0ik0biQVy96QXr8axGbqwua6 -OV+KmalBWQewLK8= ------END CERTIFICATE----- - -# Issuer: CN=Certainly Root E1 O=Certainly -# Subject: CN=Certainly Root E1 O=Certainly -# Label: "Certainly Root E1" -# Serial: 8168531406727139161245376702891150584 -# MD5 Fingerprint: 0a:9e:ca:cd:3e:52:50:c6:36:f3:4b:a3:ed:a7:53:e9 -# SHA1 Fingerprint: f9:e1:6d:dc:01:89:cf:d5:82:45:63:3e:c5:37:7d:c2:eb:93:6f:2b -# SHA256 Fingerprint: b4:58:5f:22:e4:ac:75:6a:4e:86:12:a1:36:1c:5d:9d:03:1a:93:fd:84:fe:bb:77:8f:a3:06:8b:0f:c4:2d:c2 ------BEGIN CERTIFICATE----- -MIIB9zCCAX2gAwIBAgIQBiUzsUcDMydc+Y2aub/M+DAKBggqhkjOPQQDAzA9MQsw -CQYDVQQGEwJVUzESMBAGA1UEChMJQ2VydGFpbmx5MRowGAYDVQQDExFDZXJ0YWlu -bHkgUm9vdCBFMTAeFw0yMTA0MDEwMDAwMDBaFw00NjA0MDEwMDAwMDBaMD0xCzAJ -BgNVBAYTAlVTMRIwEAYDVQQKEwlDZXJ0YWlubHkxGjAYBgNVBAMTEUNlcnRhaW5s -eSBSb290IEUxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE3m/4fxzf7flHh4axpMCK -+IKXgOqPyEpeKn2IaKcBYhSRJHpcnqMXfYqGITQYUBsQ3tA3SybHGWCA6TS9YBk2 -QNYphwk8kXr2vBMj3VlOBF7PyAIcGFPBMdjaIOlEjeR2o0IwQDAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU8ygYy2R17ikq6+2uI1g4 -hevIIgcwCgYIKoZIzj0EAwMDaAAwZQIxALGOWiDDshliTd6wT99u0nCK8Z9+aozm -ut6Dacpps6kFtZaSF4fC0urQe87YQVt8rgIwRt7qy12a7DLCZRawTDBcMPPaTnOG -BtjOiQRINzf43TNRnXCve1XYAS59BWQOhriR ------END CERTIFICATE----- - -# Issuer: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Subject: CN=Security Communication ECC RootCA1 O=SECOM Trust Systems CO.,LTD. -# Label: "Security Communication ECC RootCA1" -# Serial: 15446673492073852651 -# MD5 Fingerprint: 7e:43:b0:92:68:ec:05:43:4c:98:ab:5d:35:2e:7e:86 -# SHA1 Fingerprint: b8:0e:26:a9:bf:d2:b2:3b:c0:ef:46:c9:ba:c7:bb:f6:1d:0d:41:41 -# SHA256 Fingerprint: e7:4f:bd:a5:5b:d5:64:c4:73:a3:6b:44:1a:a7:99:c8:a6:8e:07:74:40:e8:28:8b:9f:a1:e5:0e:4b:ba:ca:11 ------BEGIN CERTIFICATE----- -MIICODCCAb6gAwIBAgIJANZdm7N4gS7rMAoGCCqGSM49BAMDMGExCzAJBgNVBAYT -AkpQMSUwIwYDVQQKExxTRUNPTSBUcnVzdCBTeXN0ZW1zIENPLixMVEQuMSswKQYD -VQQDEyJTZWN1cml0eSBDb21tdW5pY2F0aW9uIEVDQyBSb290Q0ExMB4XDTE2MDYx -NjA1MTUyOFoXDTM4MDExODA1MTUyOFowYTELMAkGA1UEBhMCSlAxJTAjBgNVBAoT -HFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKzApBgNVBAMTIlNlY3VyaXR5 -IENvbW11bmljYXRpb24gRUNDIFJvb3RDQTEwdjAQBgcqhkjOPQIBBgUrgQQAIgNi -AASkpW9gAwPDvTH00xecK4R1rOX9PVdu12O/5gSJko6BnOPpR27KkBLIE+Cnnfdl -dB9sELLo5OnvbYUymUSxXv3MdhDYW72ixvnWQuRXdtyQwjWpS4g8EkdtXP9JTxpK -ULGjQjBAMB0GA1UdDgQWBBSGHOf+LaVKiwj+KBH6vqNm+GBZLzAOBgNVHQ8BAf8E -BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjAVXUI9/Lbu -9zuxNuie9sRGKEkz0FhDKmMpzE2xtHqiuQ04pV1IKv3LsnNdo4gIxwwCMQDAqy0O -be0YottT6SXbVQjgUMzfRGEWgqtJsLKB7HOHeLRMsmIbEvoWTSVLY70eN9k= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA1 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA1" -# Serial: 113562791157148395269083148143378328608 -# MD5 Fingerprint: 42:32:99:76:43:33:36:24:35:07:82:9b:28:f9:d0:90 -# SHA1 Fingerprint: d5:ec:8d:7b:4c:ba:79:f4:e7:e8:cb:9d:6b:ae:77:83:10:03:21:6a -# SHA256 Fingerprint: f3:89:6f:88:fe:7c:0a:88:27:66:a7:fa:6a:d2:74:9f:b5:7a:7f:3e:98:fb:76:9c:1f:a7:b0:9c:2c:44:d5:ae ------BEGIN CERTIFICATE----- -MIIFdDCCA1ygAwIBAgIQVW9l47TZkGobCdFsPsBsIDANBgkqhkiG9w0BAQsFADBU -MQswCQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRI -T1JJVFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0ExMB4XDTE5MTIxOTAz -MTYxN1oXDTQ0MTIxMjAzMTYxN1owVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJF -SUpJTkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2Jh -bCBSb290IENBMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPFmCL3Z -xRVhy4QEQaVpN3cdwbB7+sN3SJATcmTRuHyQNZ0YeYjjlwE8R4HyDqKYDZ4/N+AZ -spDyRhySsTphzvq3Rp4Dhtczbu33RYx2N95ulpH3134rhxfVizXuhJFyV9xgw8O5 -58dnJCNPYwpj9mZ9S1WnP3hkSWkSl+BMDdMJoDIwOvqfwPKcxRIqLhy1BDPapDgR -at7GGPZHOiJBhyL8xIkoVNiMpTAK+BcWyqw3/XmnkRd4OJmtWO2y3syJfQOcs4ll -5+M7sSKGjwZteAf9kRJ/sGsciQ35uMt0WwfCyPQ10WRjeulumijWML3mG90Vr4Tq -nMfK9Q7q8l0ph49pczm+LiRvRSGsxdRpJQaDrXpIhRMsDQa4bHlW/KNnMoH1V6XK -V0Jp6VwkYe/iMBhORJhVb3rCk9gZtt58R4oRTklH2yiUAguUSiz5EtBP6DF+bHq/ -pj+bOT0CFqMYs2esWz8sgytnOYFcuX6U1WTdno9uruh8W7TXakdI136z1C2OVnZO -z2nxbkRs1CTqjSShGL+9V/6pmTW12xB3uD1IutbB5/EjPtffhZ0nPNRAvQoMvfXn -jSXWgXSHRtQpdaJCbPdzied9v3pKH9MiyRVVz99vfFXQpIsHETdfg6YmV6YBW37+ -WGgHqel62bno/1Afq8K0wM7o6v0PvY1NuLxxAgMBAAGjQjBAMB0GA1UdDgQWBBTF -7+3M2I0hxkjk49cULqcWk+WYATAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAUoKsITQfI/Ki2Pm4rzc2IInRNwPWaZ+4 -YRC6ojGYWUfo0Q0lHhVBDOAqVdVXUsv45Mdpox1NcQJeXyFFYEhcCY5JEMEE3Kli -awLwQ8hOnThJdMkycFRtwUf8jrQ2ntScvd0g1lPJGKm1Vrl2i5VnZu69mP6u775u -+2D2/VnGKhs/I0qUJDAnyIm860Qkmss9vk/Ves6OF8tiwdneHg56/0OGNFK8YT88 -X7vZdrRTvJez/opMEi4r89fO4aL/3Xtw+zuhTaRjAv04l5U/BXCga99igUOLtFkN -SoxUnMW7gZ/NfaXvCyUeOiDbHPwfmGcCCtRzRBPbUYQaVQNW4AB+dAb/OMRyHdOo -P2gxXdMJxy6MW2Pg6Nwe0uxhHvLe5e/2mXZgLR6UcnHGCyoyx5JO1UbXHfmpGQrI -+pXObSOYqgs4rZpWDW+N8TEAiMEXnM0ZNjX+VVOg4DwzX5Ze4jLp3zO7Bkqp2IRz -znfSxqxx4VyjHQy7Ct9f4qNx2No3WqB4K/TUfet27fJhcKVlmtOJNBir+3I+17Q9 -eVzYH6Eze9mCUAyTF6ps3MKCuwJXNq+YJyo5UOGwifUll35HaBC07HPKs5fRJNz2 -YqAo07WjuGS3iGJCz51TzZm+ZGiPTx4SSPfSKcOYKMryMguTjClPPGAyzQWWYezy -r/6zcCwupvI= ------END CERTIFICATE----- - -# Issuer: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Subject: CN=BJCA Global Root CA2 O=BEIJING CERTIFICATE AUTHORITY -# Label: "BJCA Global Root CA2" -# Serial: 58605626836079930195615843123109055211 -# MD5 Fingerprint: 5e:0a:f6:47:5f:a6:14:e8:11:01:95:3f:4d:01:eb:3c -# SHA1 Fingerprint: f4:27:86:eb:6e:b8:6d:88:31:67:02:fb:ba:66:a4:53:00:aa:7a:a6 -# SHA256 Fingerprint: 57:4d:f6:93:1e:27:80:39:66:7b:72:0a:fd:c1:60:0f:c2:7e:b6:6d:d3:09:29:79:fb:73:85:64:87:21:28:82 ------BEGIN CERTIFICATE----- -MIICJTCCAaugAwIBAgIQLBcIfWQqwP6FGFkGz7RK6zAKBggqhkjOPQQDAzBUMQsw -CQYDVQQGEwJDTjEmMCQGA1UECgwdQkVJSklORyBDRVJUSUZJQ0FURSBBVVRIT1JJ -VFkxHTAbBgNVBAMMFEJKQ0EgR2xvYmFsIFJvb3QgQ0EyMB4XDTE5MTIxOTAzMTgy -MVoXDTQ0MTIxMjAzMTgyMVowVDELMAkGA1UEBhMCQ04xJjAkBgNVBAoMHUJFSUpJ -TkcgQ0VSVElGSUNBVEUgQVVUSE9SSVRZMR0wGwYDVQQDDBRCSkNBIEdsb2JhbCBS -b290IENBMjB2MBAGByqGSM49AgEGBSuBBAAiA2IABJ3LgJGNU2e1uVCxA/jlSR9B -IgmwUVJY1is0j8USRhTFiy8shP8sbqjV8QnjAyEUxEM9fMEsxEtqSs3ph+B99iK+ -+kpRuDCK/eHeGBIK9ke35xe/J4rUQUyWPGCWwf0VHKNCMEAwHQYDVR0OBBYEFNJK -sVF/BvDRgh9Obl+rg/xI1LCRMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMAoGCCqGSM49BAMDA2gAMGUCMBq8W9f+qdJUDkpd0m2xQNz0Q9XSSpkZElaA -94M04TVOSG0ED1cxMDAtsaqdAzjbBgIxAMvMh1PLet8gUXOQwKhbYdDFUDn9hf7B -43j4ptZLvZuHjw/l1lOWqzzIQNph91Oj9w== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root E46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root E46" -# Serial: 88989738453351742415770396670917916916 -# MD5 Fingerprint: 28:23:f8:b2:98:5c:37:16:3b:3e:46:13:4e:b0:b3:01 -# SHA1 Fingerprint: ec:8a:39:6c:40:f0:2e:bc:42:75:d4:9f:ab:1c:1a:5b:67:be:d2:9a -# SHA256 Fingerprint: c9:0f:26:f0:fb:1b:40:18:b2:22:27:51:9b:5c:a2:b5:3e:2c:a5:b3:be:5c:f1:8e:fe:1b:ef:47:38:0c:53:83 ------BEGIN CERTIFICATE----- -MIICOjCCAcGgAwIBAgIQQvLM2htpN0RfFf51KBC49DAKBggqhkjOPQQDAzBfMQsw -CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1T -ZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwHhcN -MjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEYMBYG -A1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1YmxpYyBT -ZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBFNDYwdjAQBgcqhkjOPQIBBgUrgQQA -IgNiAAR2+pmpbiDt+dd34wc7qNs9Xzjoq1WmVk/WSOrsfy2qw7LFeeyZYX8QeccC -WvkEN/U0NSt3zn8gj1KjAIns1aeibVvjS5KToID1AZTc8GgHHs3u/iVStSBDHBv+ -6xnOQ6OjQjBAMB0GA1UdDgQWBBTRItpMWfFLXyY4qp3W7usNw/upYTAOBgNVHQ8B -Af8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNnADBkAjAn7qRa -qCG76UeXlImldCBteU/IvZNeWBj7LRoAasm4PdCkT0RHlAFWovgzJQxC36oCMB3q -4S6ILuH5px0CMk7yn2xVdOOurvulGu7t0vzCAxHrRVxgED1cf5kDW21USAGKcw== ------END CERTIFICATE----- - -# Issuer: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Subject: CN=Sectigo Public Server Authentication Root R46 O=Sectigo Limited -# Label: "Sectigo Public Server Authentication Root R46" -# Serial: 156256931880233212765902055439220583700 -# MD5 Fingerprint: 32:10:09:52:00:d5:7e:6c:43:df:15:c0:b1:16:93:e5 -# SHA1 Fingerprint: ad:98:f9:f3:e4:7d:75:3b:65:d4:82:b3:a4:52:17:bb:6e:f5:e4:38 -# SHA256 Fingerprint: 7b:b6:47:a6:2a:ee:ac:88:bf:25:7a:a5:22:d0:1f:fe:a3:95:e0:ab:45:c7:3f:93:f6:56:54:ec:38:f2:5a:06 ------BEGIN CERTIFICATE----- -MIIFijCCA3KgAwIBAgIQdY39i658BwD6qSWn4cetFDANBgkqhkiG9w0BAQwFADBf -MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQD -Ey1TZWN0aWdvIFB1YmxpYyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYw -HhcNMjEwMzIyMDAwMDAwWhcNNDYwMzIxMjM1OTU5WjBfMQswCQYDVQQGEwJHQjEY -MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMTYwNAYDVQQDEy1TZWN0aWdvIFB1Ymxp -YyBTZXJ2ZXIgQXV0aGVudGljYXRpb24gUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEB -AQUAA4ICDwAwggIKAoICAQCTvtU2UnXYASOgHEdCSe5jtrch/cSV1UgrJnwUUxDa -ef0rty2k1Cz66jLdScK5vQ9IPXtamFSvnl0xdE8H/FAh3aTPaE8bEmNtJZlMKpnz -SDBh+oF8HqcIStw+KxwfGExxqjWMrfhu6DtK2eWUAtaJhBOqbchPM8xQljeSM9xf -iOefVNlI8JhD1mb9nxc4Q8UBUQvX4yMPFF1bFOdLvt30yNoDN9HWOaEhUTCDsG3X -ME6WW5HwcCSrv0WBZEMNvSE6Lzzpng3LILVCJ8zab5vuZDCQOc2TZYEhMbUjUDM3 -IuM47fgxMMxF/mL50V0yeUKH32rMVhlATc6qu/m1dkmU8Sf4kaWD5QazYw6A3OAS -VYCmO2a0OYctyPDQ0RTp5A1NDvZdV3LFOxxHVp3i1fuBYYzMTYCQNFu31xR13NgE -SJ/AwSiItOkcyqex8Va3e0lMWeUgFaiEAin6OJRpmkkGj80feRQXEgyDet4fsZfu -+Zd4KKTIRJLpfSYFplhym3kT2BFfrsU4YjRosoYwjviQYZ4ybPUHNs2iTG7sijbt -8uaZFURww3y8nDnAtOFr94MlI1fZEoDlSfB1D++N6xybVCi0ITz8fAr/73trdf+L -HaAZBav6+CuBQug4urv7qv094PPK306Xlynt8xhW6aWWrL3DkJiy4Pmi1KZHQ3xt -zwIDAQABo0IwQDAdBgNVHQ4EFgQUVnNYZJX5khqwEioEYnmhQBWIIUkwDgYDVR0P -AQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAC9c -mTz8Bl6MlC5w6tIyMY208FHVvArzZJ8HXtXBc2hkeqK5Duj5XYUtqDdFqij0lgVQ -YKlJfp/imTYpE0RHap1VIDzYm/EDMrraQKFz6oOht0SmDpkBm+S8f74TlH7Kph52 -gDY9hAaLMyZlbcp+nv4fjFg4exqDsQ+8FxG75gbMY/qB8oFM2gsQa6H61SilzwZA -Fv97fRheORKkU55+MkIQpiGRqRxOF3yEvJ+M0ejf5lG5Nkc/kLnHvALcWxxPDkjB -JYOcCj+esQMzEhonrPcibCTRAUH4WAP+JWgiH5paPHxsnnVI84HxZmduTILA7rpX -DhjvLpr3Etiga+kFpaHpaPi8TD8SHkXoUsCjvxInebnMMTzD9joiFgOgyY9mpFui -TdaBJQbpdqQACj7LzTWb4OE4y2BThihCQRxEV+ioratF4yUQvNs+ZUH7G6aXD+u5 -dHn5HrwdVw1Hr8Mvn4dGp+smWg9WY7ViYG4A++MnESLn/pmPNPW56MORcr3Ywx65 -LvKRRFHQV80MNNVIIb/bE/FmJUNS0nAiNs2fxBx1IK1jcmMGDw4nztJqDby1ORrp -0XZ60Vzk50lJLVU3aPAaOpg+VBeHVOmmJ1CJeyAvP/+/oYtKR5j/K3tJPsMpRmAY -QqszKbrAKbkTidOIijlBO8n9pu0f9GBj39ItVQGL ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS RSA Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS RSA Root CA 2022" -# Serial: 148535279242832292258835760425842727825 -# MD5 Fingerprint: d8:4e:c6:59:30:d8:fe:a0:d6:7a:5a:2c:2c:69:78:da -# SHA1 Fingerprint: ec:2c:83:40:72:af:26:95:10:ff:0e:f2:03:ee:31:70:f6:78:9d:ca -# SHA256 Fingerprint: 8f:af:7d:2e:2c:b4:70:9b:b8:e0:b3:36:66:bf:75:a5:dd:45:b5:de:48:0f:8e:a8:d4:bf:e6:be:bc:17:f2:ed ------BEGIN CERTIFICATE----- -MIIFiTCCA3GgAwIBAgIQb77arXO9CEDii02+1PdbkTANBgkqhkiG9w0BAQsFADBO -MQswCQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQD -DBxTU0wuY29tIFRMUyBSU0EgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzQyMloX -DTQ2MDgxOTE2MzQyMVowTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jw -b3JhdGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgUlNBIFJvb3QgQ0EgMjAyMjCC -AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANCkCXJPQIgSYT41I57u9nTP -L3tYPc48DRAokC+X94xI2KDYJbFMsBFMF3NQ0CJKY7uB0ylu1bUJPiYYf7ISf5OY -t6/wNr/y7hienDtSxUcZXXTzZGbVXcdotL8bHAajvI9AI7YexoS9UcQbOcGV0ins -S657Lb85/bRi3pZ7QcacoOAGcvvwB5cJOYF0r/c0WRFXCsJbwST0MXMwgsadugL3 -PnxEX4MN8/HdIGkWCVDi1FW24IBydm5MR7d1VVm0U3TZlMZBrViKMWYPHqIbKUBO -L9975hYsLfy/7PO0+r4Y9ptJ1O4Fbtk085zx7AGL0SDGD6C1vBdOSHtRwvzpXGk3 -R2azaPgVKPC506QVzFpPulJwoxJF3ca6TvvC0PeoUidtbnm1jPx7jMEWTO6Af77w -dr5BUxIzrlo4QqvXDz5BjXYHMtWrifZOZ9mxQnUjbvPNQrL8VfVThxc7wDNY8VLS -+YCk8OjwO4s4zKTGkH8PnP2L0aPP2oOnaclQNtVcBdIKQXTbYxE3waWglksejBYS -d66UNHsef8JmAOSqg+qKkK3ONkRN0VHpvB/zagX9wHQfJRlAUW7qglFA35u5CCoG -AtUjHBPW6dvbxrB6y3snm/vg1UYk7RBLY0ulBY+6uB0rpvqR4pJSvezrZ5dtmi2f -gTIFZzL7SAg/2SW4BCUvAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAU+y437uOEeicuzRk1sTN8/9REQrkwHQYDVR0OBBYEFPsuN+7jhHonLs0Z -NbEzfP/UREK5MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOCAgEAjYlt -hEUY8U+zoO9opMAdrDC8Z2awms22qyIZZtM7QbUQnRC6cm4pJCAcAZli05bg4vsM -QtfhWsSWTVTNj8pDU/0quOr4ZcoBwq1gaAafORpR2eCNJvkLTqVTJXojpBzOCBvf -R4iyrT7gJ4eLSYwfqUdYe5byiB0YrrPRpgqU+tvT5TgKa3kSM/tKWTcWQA673vWJ -DPFs0/dRa1419dvAJuoSc06pkZCmF8NsLzjUo3KUQyxi4U5cMj29TH0ZR6LDSeeW -P4+a0zvkEdiLA9z2tmBVGKaBUfPhqBVq6+AL8BQx1rmMRTqoENjwuSfr98t67wVy -lrXEj5ZzxOhWc5y8aVFjvO9nHEMaX3cZHxj4HCUp+UmZKbaSPaKDN7EgkaibMOlq -bLQjk2UEqxHzDh1TJElTHaE/nUiSEeJ9DU/1172iWD54nR4fK/4huxoTtrEoZP2w -AgDHbICivRZQIA9ygV/MlP+7mea6kMvq+cYMwq7FGc4zoWtcu358NFcXrfA/rs3q -r5nsLFR+jM4uElZI7xc7P0peYNLcdDa8pUNjyw9bowJWCZ4kLOGGgYz+qxcs+sji -Mho6/4UIyYOf8kpIEFR3N+2ivEC+5BB09+Rbu7nzifmPQdjH5FCQNYA+HLhNkNPU -98OwoX6EyneSMSy4kLGCenROmxMmtNVQZlR4rmA= ------END CERTIFICATE----- - -# Issuer: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Subject: CN=SSL.com TLS ECC Root CA 2022 O=SSL Corporation -# Label: "SSL.com TLS ECC Root CA 2022" -# Serial: 26605119622390491762507526719404364228 -# MD5 Fingerprint: 99:d7:5c:f1:51:36:cc:e9:ce:d9:19:2e:77:71:56:c5 -# SHA1 Fingerprint: 9f:5f:d9:1a:54:6d:f5:0c:71:f0:ee:7a:bd:17:49:98:84:73:e2:39 -# SHA256 Fingerprint: c3:2f:fd:9f:46:f9:36:d1:6c:36:73:99:09:59:43:4b:9a:d6:0a:af:bb:9e:7c:f3:36:54:f1:44:cc:1b:a1:43 ------BEGIN CERTIFICATE----- -MIICOjCCAcCgAwIBAgIQFAP1q/s3ixdAW+JDsqXRxDAKBggqhkjOPQQDAzBOMQsw -CQYDVQQGEwJVUzEYMBYGA1UECgwPU1NMIENvcnBvcmF0aW9uMSUwIwYDVQQDDBxT -U0wuY29tIFRMUyBFQ0MgUm9vdCBDQSAyMDIyMB4XDTIyMDgyNTE2MzM0OFoXDTQ2 -MDgxOTE2MzM0N1owTjELMAkGA1UEBhMCVVMxGDAWBgNVBAoMD1NTTCBDb3Jwb3Jh -dGlvbjElMCMGA1UEAwwcU1NMLmNvbSBUTFMgRUNDIFJvb3QgQ0EgMjAyMjB2MBAG -ByqGSM49AgEGBSuBBAAiA2IABEUpNXP6wrgjzhR9qLFNoFs27iosU8NgCTWyJGYm -acCzldZdkkAZDsalE3D07xJRKF3nzL35PIXBz5SQySvOkkJYWWf9lCcQZIxPBLFN -SeR7T5v15wj4A4j3p8OSSxlUgaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME -GDAWgBSJjy+j6CugFFR781a4Jl9nOAuc0DAdBgNVHQ4EFgQUiY8vo+groBRUe/NW -uCZfZzgLnNAwDgYDVR0PAQH/BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMFXjIlbp -15IkWE8elDIPDAI2wv2sdDJO4fscgIijzPvX6yv/N33w7deedWo1dlJF4AIxAMeN -b0Igj762TVntd00pxCAgRWSGOlDGxK0tk/UYfXLtqc/ErFc2KAhl3zx5Zn6g6g== ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA ECC TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA ECC TLS 2021" -# Serial: 81873346711060652204712539181482831616 -# MD5 Fingerprint: 16:9f:ad:f1:70:ad:79:d6:ed:29:b4:d1:c5:79:70:a8 -# SHA1 Fingerprint: 9e:bc:75:10:42:b3:02:f3:81:f4:f7:30:62:d4:8f:c3:a7:51:b2:dd -# SHA256 Fingerprint: b2:fa:e5:3e:14:cc:d7:ab:92:12:06:47:01:ae:27:9c:1d:89:88:fa:cb:77:5f:a8:a0:08:91:4e:66:39:88:a8 ------BEGIN CERTIFICATE----- -MIICFTCCAZugAwIBAgIQPZg7pmY9kGP3fiZXOATvADAKBggqhkjOPQQDAzBMMS4w -LAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgRUNDIFRMUyAyMDIxMQ0w -CwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTI2MjNaFw00MTA0 -MTcwOTI2MjJaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBDQSBF -Q0MgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMHYwEAYHKoZI -zj0CAQYFK4EEACIDYgAEloZYKDcKZ9Cg3iQZGeHkBQcfl+3oZIK59sRxUM6KDP/X -tXa7oWyTbIOiaG6l2b4siJVBzV3dscqDY4PMwL502eCdpO5KTlbgmClBk1IQ1SQ4 -AjJn8ZQSb+/Xxd4u/RmAo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR2 -KCXWfeBmmnoJsmo7jjPXNtNPojAOBgNVHQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMD -aAAwZQIwW5kp85wxtolrbNa9d+F851F+uDrNozZffPc8dz7kUK2o59JZDCaOMDtu -CCrCp1rIAjEAmeMM56PDr9NJLkaCI2ZdyQAUEv049OGYa3cpetskz2VAv9LcjBHo -9H1/IISpQuQo ------END CERTIFICATE----- - -# Issuer: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Subject: CN=Atos TrustedRoot Root CA RSA TLS 2021 O=Atos -# Label: "Atos TrustedRoot Root CA RSA TLS 2021" -# Serial: 111436099570196163832749341232207667876 -# MD5 Fingerprint: d4:d3:46:b8:9a:c0:9c:76:5d:9e:3a:c3:b9:99:31:d2 -# SHA1 Fingerprint: 18:52:3b:0d:06:37:e4:d6:3a:df:23:e4:98:fb:5b:16:fb:86:74:48 -# SHA256 Fingerprint: 81:a9:08:8e:a5:9f:b3:64:c5:48:a6:f8:55:59:09:9b:6f:04:05:ef:bf:18:e5:32:4e:c9:f4:57:ba:00:11:2f ------BEGIN CERTIFICATE----- -MIIFZDCCA0ygAwIBAgIQU9XP5hmTC/srBRLYwiqipDANBgkqhkiG9w0BAQwFADBM -MS4wLAYDVQQDDCVBdG9zIFRydXN0ZWRSb290IFJvb3QgQ0EgUlNBIFRMUyAyMDIx -MQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0yMTA0MjIwOTIxMTBaFw00 -MTA0MTcwOTIxMDlaMEwxLjAsBgNVBAMMJUF0b3MgVHJ1c3RlZFJvb3QgUm9vdCBD -QSBSU0EgVExTIDIwMjExDTALBgNVBAoMBEF0b3MxCzAJBgNVBAYTAkRFMIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtoAOxHm9BYx9sKOdTSJNy/BBl01Z -4NH+VoyX8te9j2y3I49f1cTYQcvyAh5x5en2XssIKl4w8i1mx4QbZFc4nXUtVsYv -Ye+W/CBGvevUez8/fEc4BKkbqlLfEzfTFRVOvV98r61jx3ncCHvVoOX3W3WsgFWZ -kmGbzSoXfduP9LVq6hdKZChmFSlsAvFr1bqjM9xaZ6cF4r9lthawEO3NUDPJcFDs -GY6wx/J0W2tExn2WuZgIWWbeKQGb9Cpt0xU6kGpn8bRrZtkh68rZYnxGEFzedUln -nkL5/nWpo63/dgpnQOPF943HhZpZnmKaau1Fh5hnstVKPNe0OwANwI8f4UDErmwh -3El+fsqyjW22v5MvoVw+j8rtgI5Y4dtXz4U2OLJxpAmMkokIiEjxQGMYsluMWuPD -0xeqqxmjLBvk1cbiZnrXghmmOxYsL3GHX0WelXOTwkKBIROW1527k2gV+p2kHYzy -geBYBr3JtuP2iV2J+axEoctr+hbxx1A9JNr3w+SH1VbxT5Aw+kUJWdo0zuATHAR8 -ANSbhqRAvNncTFd+rrcztl524WWLZt+NyteYr842mIycg5kDcPOvdO3GDjbnvezB -c6eUWsuSZIKmAMFwoW4sKeFYV+xafJlrJaSQOoD0IJ2azsct+bJLKZWD6TWNp0lI -pw9MGZHQ9b8Q4HECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU -dEmZ0f+0emhFdcN+tNzMzjkz2ggwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -DAUAA4ICAQAjQ1MkYlxt/T7Cz1UAbMVWiLkO3TriJQ2VSpfKgInuKs1l+NsW4AmS -4BjHeJi78+xCUvuppILXTdiK/ORO/auQxDh1MoSf/7OwKwIzNsAQkG8dnK/haZPs -o0UvFJ/1TCplQ3IM98P4lYsU84UgYt1UU90s3BiVaU+DR3BAM1h3Egyi61IxHkzJ -qM7F78PRreBrAwA0JrRUITWXAdxfG/F851X6LWh3e9NpzNMOa7pNdkTWwhWaJuyw -xfW70Xp0wmzNxbVe9kzmWy2B27O3Opee7c9GslA9hGCZcbUztVdF5kJHdWoOsAgM -rr3e97sPWD2PAzHoPYJQyi9eDF20l74gNAf0xBLh7tew2VktafcxBPTy+av5EzH4 -AXcOPUIjJsyacmdRIXrMPIWo6iFqO9taPKU0nprALN+AnCng33eU0aKAQv9qTFsR -0PXNor6uzFFcw9VUewyu1rkGd4Di7wcaaMxZUa1+XGdrudviB0JbuAEFWDlN5LuY -o7Ey7Nmj1m+UI/87tyll5gfp77YZ6ufCOB0yiJA8EytuzO+rdwY0d4RPcuSBhPm5 -dDTedk+SKlOxJTnbPP/lPqYO5Wue/9vsL3SD3460s6neFE3/MaNFcyT6lSnMEpcE -oji2jbDwN/zIIX8/syQbPYtuzE2wFg2WHYMfRsCbvUOZ58SWLs5fyQ== ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G3 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G3" -# Serial: 576386314500428537169965010905813481816650257167 -# MD5 Fingerprint: 30:42:1b:b7:bb:81:75:35:e4:16:4f:53:d2:94:de:04 -# SHA1 Fingerprint: 63:cf:b6:c1:27:2b:56:e4:88:8e:1c:23:9a:b6:2e:81:47:24:c3:c7 -# SHA256 Fingerprint: e0:d3:22:6a:eb:11:63:c2:e4:8f:f9:be:3b:50:b4:c6:43:1b:e7:bb:1e:ac:c5:c3:6b:5d:5e:c5:09:03:9a:08 ------BEGIN CERTIFICATE----- -MIIFpTCCA42gAwIBAgIUZPYOZXdhaqs7tOqFhLuxibhxkw8wDQYJKoZIhvcNAQEM -BQAwWjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dp -ZXMsIEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHMzAe -Fw0yMTA1MjAwMjEwMTlaFw00NjA1MTkwMjEwMTlaMFoxCzAJBgNVBAYTAkNOMSUw -IwYDVQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtU -cnVzdEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzMwggIiMA0GCSqGSIb3DQEBAQUAA4IC -DwAwggIKAoICAQDAMYJhkuSUGwoqZdC+BqmHO1ES6nBBruL7dOoKjbmzTNyPtxNS -T1QY4SxzlZHFZjtqz6xjbYdT8PfxObegQ2OwxANdV6nnRM7EoYNl9lA+sX4WuDqK -AtCWHwDNBSHvBm3dIZwZQ0WhxeiAysKtQGIXBsaqvPPW5vxQfmZCHzyLpnl5hkA1 -nyDvP+uLRx+PjsXUjrYsyUQE49RDdT/VP68czH5GX6zfZBCK70bwkPAPLfSIC7Ep -qq+FqklYqL9joDiR5rPmd2jE+SoZhLsO4fWvieylL1AgdB4SQXMeJNnKziyhWTXA -yB1GJ2Faj/lN03J5Zh6fFZAhLf3ti1ZwA0pJPn9pMRJpxx5cynoTi+jm9WAPzJMs -hH/x/Gr8m0ed262IPfN2dTPXS6TIi/n1Q1hPy8gDVI+lhXgEGvNz8teHHUGf59gX -zhqcD0r83ERoVGjiQTz+LISGNzzNPy+i2+f3VANfWdP3kXjHi3dqFuVJhZBFcnAv -kV34PmVACxmZySYgWmjBNb9Pp1Hx2BErW+Canig7CjoKH8GB5S7wprlppYiU5msT -f9FkPz2ccEblooV7WIQn3MSAPmeamseaMQ4w7OYXQJXZRe0Blqq/DPNL0WP3E1jA -uPP6Z92bfW1K/zJMtSU7/xxnD4UiWQWRkUF3gdCFTIcQcf+eQxuulXUtgQIDAQAB -o2MwYTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEDk5PIj7zjKsK5Xf/Ih -MBY027ySMB0GA1UdDgQWBBRA5OTyI+84yrCuV3/yITAWNNu8kjAOBgNVHQ8BAf8E -BAMCAQYwDQYJKoZIhvcNAQEMBQADggIBACY7UeFNOPMyGLS0XuFlXsSUT9SnYaP4 -wM8zAQLpw6o1D/GUE3d3NZ4tVlFEbuHGLige/9rsR82XRBf34EzC4Xx8MnpmyFq2 -XFNFV1pF1AWZLy4jVe5jaN/TG3inEpQGAHUNcoTpLrxaatXeL1nHo+zSh2bbt1S1 -JKv0Q3jbSwTEb93mPmY+KfJLaHEih6D4sTNjduMNhXJEIlU/HHzp/LgV6FL6qj6j -ITk1dImmasI5+njPtqzn59ZW/yOSLlALqbUHM/Q4X6RJpstlcHboCoWASzY9M/eV -VHUl2qzEc4Jl6VL1XP04lQJqaTDFHApXB64ipCz5xUG3uOyfT0gA+QEEVcys+TIx -xHWVBqB/0Y0n3bOppHKH/lmLmnp0Ft0WpWIp6zqW3IunaFnT63eROfjXy9mPX1on -AX1daBli2MjN9LdyR75bl87yraKZk62Uy5P2EgmVtqvXO9A/EcswFi55gORngS1d -7XB4tmBZrOFdRWOPyN9yaFvqHbgB8X7754qz41SgOAngPN5C8sLtLpvzHzW2Ntjj -gKGLzZlkD8Kqq7HK9W+eQ42EVJmzbsASZthwEPEGNTNDqJwuuhQxzhB/HIbjj9LV -+Hfsm6vxL2PZQl/gZ4FkkfGXL/xuJvYz+NO1+MRiqzFRJQJ6+N1rZdVtTTDIZbpo -FGWsJwt0ivKH ------END CERTIFICATE----- - -# Issuer: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Subject: CN=TrustAsia Global Root CA G4 O=TrustAsia Technologies, Inc. -# Label: "TrustAsia Global Root CA G4" -# Serial: 451799571007117016466790293371524403291602933463 -# MD5 Fingerprint: 54:dd:b2:d7:5f:d8:3e:ed:7c:e0:0b:2e:cc:ed:eb:eb -# SHA1 Fingerprint: 57:73:a5:61:5d:80:b2:e6:ac:38:82:fc:68:07:31:ac:9f:b5:92:5a -# SHA256 Fingerprint: be:4b:56:cb:50:56:c0:13:6a:52:6d:f4:44:50:8d:aa:36:a0:b5:4f:42:e4:ac:38:f7:2a:f4:70:e4:79:65:4c ------BEGIN CERTIFICATE----- -MIICVTCCAdygAwIBAgIUTyNkuI6XY57GU4HBdk7LKnQV1tcwCgYIKoZIzj0EAwMw -WjELMAkGA1UEBhMCQ04xJTAjBgNVBAoMHFRydXN0QXNpYSBUZWNobm9sb2dpZXMs -IEluYy4xJDAiBgNVBAMMG1RydXN0QXNpYSBHbG9iYWwgUm9vdCBDQSBHNDAeFw0y -MTA1MjAwMjEwMjJaFw00NjA1MTkwMjEwMjJaMFoxCzAJBgNVBAYTAkNOMSUwIwYD -VQQKDBxUcnVzdEFzaWEgVGVjaG5vbG9naWVzLCBJbmMuMSQwIgYDVQQDDBtUcnVz -dEFzaWEgR2xvYmFsIFJvb3QgQ0EgRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATx -s8045CVD5d4ZCbuBeaIVXxVjAd7Cq92zphtnS4CDr5nLrBfbK5bKfFJV4hrhPVbw -LxYI+hW8m7tH5j/uqOFMjPXTNvk4XatwmkcN4oFBButJ+bAp3TPsUKV/eSm4IJij -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUpbtKl86zK3+kMd6Xg1mD -pm9xy94wHQYDVR0OBBYEFKW7SpfOsyt/pDHel4NZg6ZvccveMA4GA1UdDwEB/wQE -AwIBBjAKBggqhkjOPQQDAwNnADBkAjBe8usGzEkxn0AAbbd+NvBNEU/zy4k6LHiR -UKNbwMp1JvK/kF0LgoxgKJ/GcJpo5PECMFxYDlZ2z1jD1xCMuo6u47xkdUfFVZDj -/bpV6wfEU6s3qe4hsiFbYI89MvHVI5TWWA== ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust ECC Root-01 O=CommScope -# Subject: CN=CommScope Public Trust ECC Root-01 O=CommScope -# Label: "CommScope Public Trust ECC Root-01" -# Serial: 385011430473757362783587124273108818652468453534 -# MD5 Fingerprint: 3a:40:a7:fc:03:8c:9c:38:79:2f:3a:a2:6c:b6:0a:16 -# SHA1 Fingerprint: 07:86:c0:d8:dd:8e:c0:80:98:06:98:d0:58:7a:ef:de:a6:cc:a2:5d -# SHA256 Fingerprint: 11:43:7c:da:7b:b4:5e:41:36:5f:45:b3:9a:38:98:6b:0d:e0:0d:ef:34:8e:0c:7b:b0:87:36:33:80:0b:c3:8b ------BEGIN CERTIFICATE----- -MIICHTCCAaOgAwIBAgIUQ3CCd89NXTTxyq4yLzf39H91oJ4wCgYIKoZIzj0EAwMw -TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t -bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMTAeFw0yMTA0MjgxNzM1NDNa -Fw00NjA0MjgxNzM1NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv -cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDEw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAARLNumuV16ocNfQj3Rid8NeeqrltqLxeP0C -flfdkXmcbLlSiFS8LwS+uM32ENEp7LXQoMPwiXAZu1FlxUOcw5tjnSCDPgYLpkJE -hRGnSjot6dZoL0hOUysHP029uax3OVejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSOB2LAUN3GGQYARnQE9/OufXVNMDAKBggq -hkjOPQQDAwNoADBlAjEAnDPfQeMjqEI2Jpc1XHvr20v4qotzVRVcrHgpD7oh2MSg -2NED3W3ROT3Ek2DS43KyAjB8xX6I01D1HiXo+k515liWpDVfG2XqYZpwI7UNo5uS -Um9poIyNStDuiw7LR47QjRE= ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust ECC Root-02 O=CommScope -# Subject: CN=CommScope Public Trust ECC Root-02 O=CommScope -# Label: "CommScope Public Trust ECC Root-02" -# Serial: 234015080301808452132356021271193974922492992893 -# MD5 Fingerprint: 59:b0:44:d5:65:4d:b8:5c:55:19:92:02:b6:d1:94:b2 -# SHA1 Fingerprint: 3c:3f:ef:57:0f:fe:65:93:86:9e:a0:fe:b0:f6:ed:8e:d1:13:c7:e5 -# SHA256 Fingerprint: 2f:fb:7f:81:3b:bb:b3:c8:9a:b4:e8:16:2d:0f:16:d7:15:09:a8:30:cc:9d:73:c2:62:e5:14:08:75:d1:ad:4a ------BEGIN CERTIFICATE----- -MIICHDCCAaOgAwIBAgIUKP2ZYEFHpgE6yhR7H+/5aAiDXX0wCgYIKoZIzj0EAwMw -TjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwiQ29t -bVNjb3BlIFB1YmxpYyBUcnVzdCBFQ0MgUm9vdC0wMjAeFw0yMTA0MjgxNzQ0NTRa -Fw00NjA0MjgxNzQ0NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21tU2Nv -cGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgRUNDIFJvb3QtMDIw -djAQBgcqhkjOPQIBBgUrgQQAIgNiAAR4MIHoYx7l63FRD/cHB8o5mXxO1Q/MMDAL -j2aTPs+9xYa9+bG3tD60B8jzljHz7aRP+KNOjSkVWLjVb3/ubCK1sK9IRQq9qEmU -v4RDsNuESgMjGWdqb8FuvAY5N9GIIvejQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD -VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTmGHX/72DehKT1RsfeSlXjMjZ59TAKBggq -hkjOPQQDAwNnADBkAjAmc0l6tqvmSfR9Uj/UQQSugEODZXW5hYA4O9Zv5JOGq4/n -ich/m35rChJVYaoR4HkCMHfoMXGsPHED1oQmHhS48zs73u1Z/GtMMH9ZzkXpc2AV -mkzw5l4lIhVtwodZ0LKOag== ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust RSA Root-01 O=CommScope -# Subject: CN=CommScope Public Trust RSA Root-01 O=CommScope -# Label: "CommScope Public Trust RSA Root-01" -# Serial: 354030733275608256394402989253558293562031411421 -# MD5 Fingerprint: 0e:b4:15:bc:87:63:5d:5d:02:73:d4:26:38:68:73:d8 -# SHA1 Fingerprint: 6d:0a:5f:f7:b4:23:06:b4:85:b3:b7:97:64:fc:ac:75:f5:33:f2:93 -# SHA256 Fingerprint: 02:bd:f9:6e:2a:45:dd:9b:f1:8f:c7:e1:db:df:21:a0:37:9b:a3:c9:c2:61:03:44:cf:d8:d6:06:fe:c1:ed:81 ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIUPgNJgXUWdDGOTKvVxZAplsU5EN0wDQYJKoZIhvcNAQEL -BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi -Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMTAeFw0yMTA0MjgxNjQ1 -NTRaFw00NjA0MjgxNjQ1NTNaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t -U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt -MDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwSGWjDR1C45FtnYSk -YZYSwu3D2iM0GXb26v1VWvZVAVMP8syMl0+5UMuzAURWlv2bKOx7dAvnQmtVzslh -suitQDy6uUEKBU8bJoWPQ7VAtYXR1HHcg0Hz9kXHgKKEUJdGzqAMxGBWBB0HW0al -DrJLpA6lfO741GIDuZNqihS4cPgugkY4Iw50x2tBt9Apo52AsH53k2NC+zSDO3Oj -WiE260f6GBfZumbCk6SP/F2krfxQapWsvCQz0b2If4b19bJzKo98rwjyGpg/qYFl -P8GMicWWMJoKz/TUyDTtnS+8jTiGU+6Xn6myY5QXjQ/cZip8UlF1y5mO6D1cv547 -KI2DAg+pn3LiLCuz3GaXAEDQpFSOm117RTYm1nJD68/A6g3czhLmfTifBSeolz7p -UcZsBSjBAg/pGG3svZwG1KdJ9FQFa2ww8esD1eo9anbCyxooSU1/ZOD6K9pzg4H/ -kQO9lLvkuI6cMmPNn7togbGEW682v3fuHX/3SZtS7NJ3Wn2RnU3COS3kuoL4b/JO -Hg9O5j9ZpSPcPYeoKFgo0fEbNttPxP/hjFtyjMcmAyejOQoBqsCyMWCDIqFPEgkB -Ea801M/XrmLTBQe0MXXgDW1XT2mH+VepuhX2yFJtocucH+X8eKg1mp9BFM6ltM6U -CBwJrVbl2rZJmkrqYxhTnCwuwwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUN12mmnQywsL5x6YVEFm45P3luG0wDQYJ -KoZIhvcNAQELBQADggIBAK+nz97/4L1CjU3lIpbfaOp9TSp90K09FlxD533Ahuh6 -NWPxzIHIxgvoLlI1pKZJkGNRrDSsBTtXAOnTYtPZKdVUvhwQkZyybf5Z/Xn36lbQ -nmhUQo8mUuJM3y+Xpi/SB5io82BdS5pYV4jvguX6r2yBS5KPQJqTRlnLX3gWsWc+ -QgvfKNmwrZggvkN80V4aCRckjXtdlemrwWCrWxhkgPut4AZ9HcpZuPN4KWfGVh2v -trV0KnahP/t1MJ+UXjulYPPLXAziDslg+MkfFoom3ecnf+slpoq9uC02EJqxWE2a -aE9gVOX2RhOOiKy8IUISrcZKiX2bwdgt6ZYD9KJ0DLwAHb/WNyVntHKLr4W96ioD -j8z7PEQkguIBpQtZtjSNMgsSDesnwv1B10A8ckYpwIzqug/xBpMu95yo9GA+o/E4 -Xo4TwbM6l4c/ksp4qRyv0LAbJh6+cOx69TOY6lz/KwsETkPdY34Op054A5U+1C0w -lREQKC6/oAI+/15Z0wUOlV9TRe9rh9VIzRamloPh37MG88EU26fsHItdkJANclHn -YfkUyq+Dj7+vsQpZXdxc1+SWrVtgHdqul7I52Qb1dgAT+GhMIbA1xNxVssnBQVoc -icCMb3SgazNNtQEo/a2tiRc7ppqEvOuM6sRxJKi6KfkIsidWNTJf6jn7MZrVGczw ------END CERTIFICATE----- - -# Issuer: CN=CommScope Public Trust RSA Root-02 O=CommScope -# Subject: CN=CommScope Public Trust RSA Root-02 O=CommScope -# Label: "CommScope Public Trust RSA Root-02" -# Serial: 480062499834624527752716769107743131258796508494 -# MD5 Fingerprint: e1:29:f9:62:7b:76:e2:96:6d:f3:d4:d7:0f:ae:1f:aa -# SHA1 Fingerprint: ea:b0:e2:52:1b:89:93:4c:11:68:f2:d8:9a:ac:22:4c:a3:8a:57:ae -# SHA256 Fingerprint: ff:e9:43:d7:93:42:4b:4f:7c:44:0c:1c:3d:64:8d:53:63:f3:4b:82:dc:87:aa:7a:9f:11:8f:c5:de:e1:01:f1 ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIUVBa/O345lXGN0aoApYYNK496BU4wDQYJKoZIhvcNAQEL -BQAwTjELMAkGA1UEBhMCVVMxEjAQBgNVBAoMCUNvbW1TY29wZTErMCkGA1UEAwwi -Q29tbVNjb3BlIFB1YmxpYyBUcnVzdCBSU0EgUm9vdC0wMjAeFw0yMTA0MjgxNzE2 -NDNaFw00NjA0MjgxNzE2NDJaME4xCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlDb21t -U2NvcGUxKzApBgNVBAMMIkNvbW1TY29wZSBQdWJsaWMgVHJ1c3QgUlNBIFJvb3Qt -MDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDh+g77aAASyE3VrCLE -NQE7xVTlWXZjpX/rwcRqmL0yjReA61260WI9JSMZNRTpf4mnG2I81lDnNJUDMrG0 -kyI9p+Kx7eZ7Ti6Hmw0zdQreqjXnfuU2mKKuJZ6VszKWpCtYHu8//mI0SFHRtI1C -rWDaSWqVcN3SAOLMV2MCe5bdSZdbkk6V0/nLKR8YSvgBKtJjCW4k6YnS5cciTNxz -hkcAqg2Ijq6FfUrpuzNPDlJwnZXjfG2WWy09X6GDRl224yW4fKcZgBzqZUPckXk2 -LHR88mcGyYnJ27/aaL8j7dxrrSiDeS/sOKUNNwFnJ5rpM9kzXzehxfCrPfp4sOcs -n/Y+n2Dg70jpkEUeBVF4GiwSLFworA2iI540jwXmojPOEXcT1A6kHkIfhs1w/tku -FT0du7jyU1fbzMZ0KZwYszZ1OC4PVKH4kh+Jlk+71O6d6Ts2QrUKOyrUZHk2EOH5 -kQMreyBUzQ0ZGshBMjTRsJnhkB4BQDa1t/qp5Xd1pCKBXbCL5CcSD1SIxtuFdOa3 -wNemKfrb3vOTlycEVS8KbzfFPROvCgCpLIscgSjX74Yxqa7ybrjKaixUR9gqiC6v -wQcQeKwRoi9C8DfF8rhW3Q5iLc4tVn5V8qdE9isy9COoR+jUKgF4z2rDN6ieZdIs -5fq6M8EGRPbmz6UNp2YINIos8wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUR9DnsSL/nSz12Vdgs7GxcJXvYXowDQYJ -KoZIhvcNAQELBQADggIBAIZpsU0v6Z9PIpNojuQhmaPORVMbc0RTAIFhzTHjCLqB -KCh6krm2qMhDnscTJk3C2OVVnJJdUNjCK9v+5qiXz1I6JMNlZFxHMaNlNRPDk7n3 -+VGXu6TwYofF1gbTl4MgqX67tiHCpQ2EAOHyJxCDut0DgdXdaMNmEMjRdrSzbyme -APnCKfWxkxlSaRosTKCL4BWaMS/TiJVZbuXEs1DIFAhKm4sTg7GkcrI7djNB3Nyq -pgdvHSQSn8h2vS/ZjvQs7rfSOBAkNlEv41xdgSGn2rtO/+YHqP65DSdsu3BaVXoT -6fEqSWnHX4dXTEN5bTpl6TBcQe7rd6VzEojov32u5cSoHw2OHG1QAk8mGEPej1WF -sQs3BWDJVTkSBKEqz3EWnzZRSb9wO55nnPt7eck5HHisd5FUmrh1CoFSl+NmYWvt -PjgelmFV4ZFUjO2MJB+ByRCac5krFk5yAD9UG/iNuovnFNa2RU9g7Jauwy8CTl2d -lklyALKrdVwPaFsdZcJfMw8eD/A7hvWwTruc9+olBdytoptLFwG+Qt81IR2tq670 -v64fG9PiO/yzcnMcmyiQiRM9HcEARwmWmjgb3bHPDcK0RPOWlc4yOo80nOAXx17O -rg3bhzjlP1v9mxnhMUF6cKojawHhRUzNlM47ni3niAIi9G7oyOzWPPO5std3eqx7 ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS ECC Root 2020 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS ECC Root 2020" -# Serial: 72082518505882327255703894282316633856 -# MD5 Fingerprint: c1:ab:fe:6a:10:2c:03:8d:bc:1c:22:32:c0:85:a7:fd -# SHA1 Fingerprint: c0:f8:96:c5:a9:3b:01:06:21:07:da:18:42:48:bc:e9:9d:88:d5:ec -# SHA256 Fingerprint: 57:8a:f4:de:d0:85:3f:4e:59:98:db:4a:ea:f9:cb:ea:8d:94:5f:60:b6:20:a3:8d:1a:3c:13:b2:bc:7b:a8:e1 ------BEGIN CERTIFICATE----- -MIICQjCCAcmgAwIBAgIQNjqWjMlcsljN0AFdxeVXADAKBggqhkjOPQQDAzBjMQsw -CQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0eSBH -bWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBFQ0MgUm9vdCAyMDIw -MB4XDTIwMDgyNTA3NDgyMFoXDTQ1MDgyNTIzNTk1OVowYzELMAkGA1UEBhMCREUx -JzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkGA1UE -AwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgRUNDIFJvb3QgMjAyMDB2MBAGByqGSM49 -AgEGBSuBBAAiA2IABM6//leov9Wq9xCazbzREaK9Z0LMkOsVGJDZos0MKiXrPk/O -tdKPD/M12kOLAoC+b1EkHQ9rK8qfwm9QMuU3ILYg/4gND21Ju9sGpIeQkpT0CdDP -f8iAC8GXs7s1J8nCG6NCMEAwHQYDVR0OBBYEFONyzG6VmUex5rNhTNHLq+O6zd6f -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cA -MGQCMHVSi7ekEE+uShCLsoRbQuHmKjYC2qBuGT8lv9pZMo7k+5Dck2TOrbRBR2Di -z6fLHgIwN0GMZt9Ba9aDAEH9L1r3ULRn0SyocddDypwnJJGDSA3PzfdUga/sf+Rn -27iQ7t0l ------END CERTIFICATE----- - -# Issuer: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Subject: CN=Telekom Security TLS RSA Root 2023 O=Deutsche Telekom Security GmbH -# Label: "Telekom Security TLS RSA Root 2023" -# Serial: 44676229530606711399881795178081572759 -# MD5 Fingerprint: bf:5b:eb:54:40:cd:48:71:c4:20:8d:7d:de:0a:42:f2 -# SHA1 Fingerprint: 54:d3:ac:b3:bd:57:56:f6:85:9d:ce:e5:c3:21:e2:d4:ad:83:d0:93 -# SHA256 Fingerprint: ef:c6:5c:ad:bb:59:ad:b6:ef:e8:4d:a2:23:11:b3:56:24:b7:1b:3b:1e:a0:da:8b:66:55:17:4e:c8:97:86:46 ------BEGIN CERTIFICATE----- -MIIFszCCA5ugAwIBAgIQIZxULej27HF3+k7ow3BXlzANBgkqhkiG9w0BAQwFADBj -MQswCQYDVQQGEwJERTEnMCUGA1UECgweRGV1dHNjaGUgVGVsZWtvbSBTZWN1cml0 -eSBHbWJIMSswKQYDVQQDDCJUZWxla29tIFNlY3VyaXR5IFRMUyBSU0EgUm9vdCAy -MDIzMB4XDTIzMDMyODEyMTY0NVoXDTQ4MDMyNzIzNTk1OVowYzELMAkGA1UEBhMC -REUxJzAlBgNVBAoMHkRldXRzY2hlIFRlbGVrb20gU2VjdXJpdHkgR21iSDErMCkG -A1UEAwwiVGVsZWtvbSBTZWN1cml0eSBUTFMgUlNBIFJvb3QgMjAyMzCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAO01oYGA88tKaVvC+1GDrib94W7zgRJ9 -cUD/h3VCKSHtgVIs3xLBGYSJwb3FKNXVS2xE1kzbB5ZKVXrKNoIENqil/Cf2SfHV -cp6R+SPWcHu79ZvB7JPPGeplfohwoHP89v+1VmLhc2o0mD6CuKyVU/QBoCcHcqMA -U6DksquDOFczJZSfvkgdmOGjup5czQRxUX11eKvzWarE4GC+j4NSuHUaQTXtvPM6 -Y+mpFEXX5lLRbtLevOP1Czvm4MS9Q2QTps70mDdsipWol8hHD/BeEIvnHRz+sTug -BTNoBUGCwQMrAcjnj02r6LX2zWtEtefdi+zqJbQAIldNsLGyMcEWzv/9FIS3R/qy -8XDe24tsNlikfLMR0cN3f1+2JeANxdKz+bi4d9s3cXFH42AYTyS2dTd4uaNir73J -co4vzLuu2+QVUhkHM/tqty1LkCiCc/4YizWN26cEar7qwU02OxY2kTLvtkCJkUPg -8qKrBC7m8kwOFjQgrIfBLX7JZkcXFBGk8/ehJImr2BrIoVyxo/eMbcgByU/J7MT8 -rFEz0ciD0cmfHdRHNCk+y7AO+oMLKFjlKdw/fKifybYKu6boRhYPluV75Gp6SG12 -mAWl3G0eQh5C2hrgUve1g8Aae3g1LDj1H/1Joy7SWWO/gLCMk3PLNaaZlSJhZQNg -+y+TS/qanIA7AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtqeX -gj10hZv3PJ+TmpV5dVKMbUcwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS2 -p5eCPXSFm/c8n5OalXl1UoxtRzANBgkqhkiG9w0BAQwFAAOCAgEAqMxhpr51nhVQ -pGv7qHBFfLp+sVr8WyP6Cnf4mHGCDG3gXkaqk/QeoMPhk9tLrbKmXauw1GLLXrtm -9S3ul0A8Yute1hTWjOKWi0FpkzXmuZlrYrShF2Y0pmtjxrlO8iLpWA1WQdH6DErw -M807u20hOq6OcrXDSvvpfeWxm4bu4uB9tPcy/SKE8YXJN3nptT+/XOR0so8RYgDd -GGah2XsjX/GO1WfoVNpbOms2b/mBsTNHM3dA+VKq3dSDz4V4mZqTuXNnQkYRIer+ -CqkbGmVps4+uFrb2S1ayLfmlyOw7YqPta9BO1UAJpB+Y1zqlklkg5LB9zVtzaL1t -xKITDmcZuI1CfmwMmm6gJC3VRRvcxAIU/oVbZZfKTpBQCHpCNfnqwmbU+AGuHrS+ -w6jv/naaoqYfRvaE7fzbzsQCzndILIyy7MMAo+wsVRjBfhnu4S/yrYObnqsZ38aK -L4x35bcF7DvB7L6Gs4a8wPfc5+pbrrLMtTWGS9DiP7bY+A4A7l3j941Y/8+LN+lj -X273CXE2whJdV/LItM3z7gLfEdxquVeEHVlNjM7IDiPCtyaaEBRx/pOyiriA8A4Q -ntOoUAw3gi/q4Iqd4Sw5/7W0cwDk90imc6y/st53BIe0o82bNSQ3+pCTE4FCxpgm -dTdmQRCsu/WU48IxK63nI1bMNSWSs1A= ------END CERTIFICATE----- - -# Issuer: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Subject: CN=FIRMAPROFESIONAL CA ROOT-A WEB O=Firmaprofesional SA -# Label: "FIRMAPROFESIONAL CA ROOT-A WEB" -# Serial: 65916896770016886708751106294915943533 -# MD5 Fingerprint: 82:b2:ad:45:00:82:b0:66:63:f8:5f:c3:67:4e:ce:a3 -# SHA1 Fingerprint: a8:31:11:74:a6:14:15:0d:ca:77:dd:0e:e4:0c:5d:58:fc:a0:72:a5 -# SHA256 Fingerprint: be:f2:56:da:f2:6e:9c:69:bd:ec:16:02:35:97:98:f3:ca:f7:18:21:a0:3e:01:82:57:c5:3c:65:61:7f:3d:4a ------BEGIN CERTIFICATE----- -MIICejCCAgCgAwIBAgIQMZch7a+JQn81QYehZ1ZMbTAKBggqhkjOPQQDAzBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwHhcNMjIwNDA2MDkwMTM2WhcNNDcwMzMxMDkwMTM2WjBuMQsw -CQYDVQQGEwJFUzEcMBoGA1UECgwTRmlybWFwcm9mZXNpb25hbCBTQTEYMBYGA1UE -YQwPVkFURVMtQTYyNjM0MDY4MScwJQYDVQQDDB5GSVJNQVBST0ZFU0lPTkFMIENB -IFJPT1QtQSBXRUIwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARHU+osEaR3xyrq89Zf -e9MEkVz6iMYiuYMQYneEMy3pA4jU4DP37XcsSmDq5G+tbbT4TIqk5B/K6k84Si6C -cyvHZpsKjECcfIr28jlgst7L7Ljkb+qbXbdTkBgyVcUgt5SjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHwYDVR0jBBgwFoAUk+FDY1w8ndYn81LsF7Kpryz3dvgwHQYDVR0O -BBYEFJPhQ2NcPJ3WJ/NS7Beyqa8s93b4MA4GA1UdDwEB/wQEAwIBBjAKBggqhkjO -PQQDAwNoADBlAjAdfKR7w4l1M+E7qUW/Runpod3JIha3RxEL2Jq68cgLcFBTApFw -hVmpHqTm6iMxoAACMQD94vizrxa5HnPEluPBMBnYfubDl94cT7iJLzPrSA8Z94dG -XSaQpYXFuXqUPoeovQA= ------END CERTIFICATE----- - -# Issuer: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Subject: CN=TWCA CYBER Root CA O=TAIWAN-CA OU=Root CA -# Label: "TWCA CYBER Root CA" -# Serial: 85076849864375384482682434040119489222 -# MD5 Fingerprint: 0b:33:a0:97:52:95:d4:a9:fd:bb:db:6e:a3:55:5b:51 -# SHA1 Fingerprint: f6:b1:1c:1a:83:38:e9:7b:db:b3:a8:c8:33:24:e0:2d:9c:7f:26:66 -# SHA256 Fingerprint: 3f:63:bb:28:14:be:17:4e:c8:b6:43:9c:f0:8d:6d:56:f0:b7:c4:05:88:3a:56:48:a3:34:42:4d:6b:3e:c5:58 ------BEGIN CERTIFICATE----- -MIIFjTCCA3WgAwIBAgIQQAE0jMIAAAAAAAAAATzyxjANBgkqhkiG9w0BAQwFADBQ -MQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FOLUNBMRAwDgYDVQQLEwdSb290 -IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3QgQ0EwHhcNMjIxMTIyMDY1NDI5 -WhcNNDcxMTIyMTU1OTU5WjBQMQswCQYDVQQGEwJUVzESMBAGA1UEChMJVEFJV0FO -LUNBMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJUV0NBIENZQkVSIFJvb3Qg -Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDG+Moe2Qkgfh1sTs6P -40czRJzHyWmqOlt47nDSkvgEs1JSHWdyKKHfi12VCv7qze33Kc7wb3+szT3vsxxF -avcokPFhV8UMxKNQXd7UtcsZyoC5dc4pztKFIuwCY8xEMCDa6pFbVuYdHNWdZsc/ -34bKS1PE2Y2yHer43CdTo0fhYcx9tbD47nORxc5zb87uEB8aBs/pJ2DFTxnk684i -JkXXYJndzk834H/nY62wuFm40AZoNWDTNq5xQwTxaWV4fPMf88oon1oglWa0zbfu -j3ikRRjpJi+NmykosaS3Om251Bw4ckVYsV7r8Cibt4LK/c/WMw+f+5eesRycnupf -Xtuq3VTpMCEobY5583WSjCb+3MX2w7DfRFlDo7YDKPYIMKoNM+HvnKkHIuNZW0CP -2oi3aQiotyMuRAlZN1vH4xfyIutuOVLF3lSnmMlLIJXcRolftBL5hSmO68gnFSDA -S9TMfAxsNAwmmyYxpjyn9tnQS6Jk/zuZQXLB4HCX8SS7K8R0IrGsayIyJNN4KsDA -oS/xUgXJP+92ZuJF2A09rZXIx4kmyA+upwMu+8Ff+iDhcK2wZSA3M2Cw1a/XDBzC -kHDXShi8fgGwsOsVHkQGzaRP6AzRwyAQ4VRlnrZR0Bp2a0JaWHY06rc3Ga4udfmW -5cFZ95RXKSWNOkyrTZpB0F8mAwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBSdhWEUfMFib5do5E83QOGt4A1WNzAd -BgNVHQ4EFgQUnYVhFHzBYm+XaORPN0DhreANVjcwDQYJKoZIhvcNAQEMBQADggIB -AGSPesRiDrWIzLjHhg6hShbNcAu3p4ULs3a2D6f/CIsLJc+o1IN1KriWiLb73y0t -tGlTITVX1olNc79pj3CjYcya2x6a4CD4bLubIp1dhDGaLIrdaqHXKGnK/nZVekZn -68xDiBaiA9a5F/gZbG0jAn/xX9AKKSM70aoK7akXJlQKTcKlTfjF/biBzysseKNn -TKkHmvPfXvt89YnNdJdhEGoHK4Fa0o635yDRIG4kqIQnoVesqlVYL9zZyvpoBJ7t -RCT5dEA7IzOrg1oYJkK2bVS1FmAwbLGg+LhBoF1JSdJlBTrq/p1hvIbZv97Tujqx -f36SNI7JAG7cmL3c7IAFrQI932XtCwP39xaEBDG6k5TY8hL4iuO/Qq+n1M0RFxbI -Qh0UqEL20kCGoE8jypZFVmAGzbdVAaYBlGX+bgUJurSkquLvWL69J1bY73NxW0Qz -8ppy6rBePm6pUlvscG21h483XjyMnM7k8M4MZ0HMzvaAq07MTFb1wWFZk7Q+ptq4 -NxKfKjLji7gh7MMrZQzvIt6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzX -xeSDwWrruoBa3lwtcHb4yOWHh8qgnaHlIhInD0Q9HWzq1MKLL295q39QpsQZp6F6 -t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA12 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA12" -# Serial: 587887345431707215246142177076162061960426065942 -# MD5 Fingerprint: c6:89:ca:64:42:9b:62:08:49:0b:1e:7f:e9:07:3d:e8 -# SHA1 Fingerprint: 7a:22:1e:3d:de:1b:06:ac:9e:c8:47:70:16:8e:3c:e5:f7:6b:06:f4 -# SHA256 Fingerprint: 3f:03:4b:b5:70:4d:44:b2:d0:85:45:a0:20:57:de:93:eb:f3:90:5f:ce:72:1a:cb:c7:30:c0:6d:da:ee:90:4e ------BEGIN CERTIFICATE----- -MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQEL -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgw -NTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3emhF -KxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mt -p7JIKwccJ/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zd -J1M3s6oYwlkm7Fsf0uZlfO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gur -FzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBFEaCeVESE99g2zvVQR9wsMJvuwPWW0v4J -hscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1UefNzFJM3IFTQy2VYzxV4+K -h9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD -AgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsF -AAOCAQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6Ld -mmQOmFxv3Y67ilQiLUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJ -mBClnW8Zt7vPemVV2zfrPIpyMpcemik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA -8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPSvWKErI4cqc1avTc7bgoitPQV -55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhgaaaI5gdka9at/ -yOPiZwud9AzqVN/Ssq+xIvEg37xEHA== ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA14 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA14" -# Serial: 575790784512929437950770173562378038616896959179 -# MD5 Fingerprint: 71:0d:72:fa:92:19:65:5e:89:04:ac:16:33:f0:bc:d5 -# SHA1 Fingerprint: dd:50:c0:f7:79:b3:64:2e:74:a2:b8:9d:9f:d3:40:dd:bb:f0:f2:4f -# SHA256 Fingerprint: 4b:00:9c:10:34:49:4f:9a:b5:6b:ba:3b:a1:d6:27:31:fc:4d:20:d8:95:5a:dc:ec:10:a9:25:60:72:61:e3:38 ------BEGIN CERTIFICATE----- -MIIFcjCCA1qgAwIBAgIUZNtaDCBO6Ncpd8hQJ6JaJ90t8sswDQYJKoZIhvcNAQEM -BQAwUTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28u -LCBMdGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNDAeFw0yMDA0MDgw -NzA2MTlaFw00NTA0MDgwNzA2MTlaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpD -eWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBS -b290IENBMTQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDF0nqh1oq/ -FjHQmNE6lPxauG4iwWL3pwon71D2LrGeaBLwbCRjOfHw3xDG3rdSINVSW0KZnvOg -vlIfX8xnbacuUKLBl422+JX1sLrcneC+y9/3OPJH9aaakpUqYllQC6KxNedlsmGy -6pJxaeQp8E+BgQQ8sqVb1MWoWWd7VRxJq3qdwudzTe/NCcLEVxLbAQ4jeQkHO6Lo -/IrPj8BGJJw4J+CDnRugv3gVEOuGTgpa/d/aLIJ+7sr2KeH6caH3iGicnPCNvg9J -kdjqOvn90Ghx2+m1K06Ckm9mH+Dw3EzsytHqunQG+bOEkJTRX45zGRBdAuVwpcAQ -0BB8b8VYSbSwbprafZX1zNoCr7gsfXmPvkPx+SgojQlD+Ajda8iLLCSxjVIHvXib -y8posqTdDEx5YMaZ0ZPxMBoH064iwurO8YQJzOAUbn8/ftKChazcqRZOhaBgy/ac -18izju3Gm5h1DVXoX+WViwKkrkMpKBGk5hIwAUt1ax5mnXkvpXYvHUC0bcl9eQjs -0Wq2XSqypWa9a4X0dFbD9ed1Uigspf9mR6XU/v6eVL9lfgHWMI+lNpyiUBzuOIAB -SMbHdPTGrMNASRZhdCyvjG817XsYAFs2PJxQDcqSMxDxJklt33UkN4Ii1+iW/RVL -ApY+B3KVfqs9TC7XyvDf4Fg/LS8EmjijAQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD -AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUBpOjCl4oaTeqYR3r6/wtbyPk -86AwDQYJKoZIhvcNAQEMBQADggIBAJaAcgkGfpzMkwQWu6A6jZJOtxEaCnFxEM0E -rX+lRVAQZk5KQaID2RFPeje5S+LGjzJmdSX7684/AykmjbgWHfYfM25I5uj4V7Ib -ed87hwriZLoAymzvftAj63iP/2SbNDefNWWipAA9EiOWWF3KY4fGoweITedpdopT -zfFP7ELyk+OZpDc8h7hi2/DsHzc/N19DzFGdtfCXwreFamgLRB7lUe6TzktuhsHS -DCRZNhqfLJGP4xjblJUK7ZGqDpncllPjYYPGFrojutzdfhrGe0K22VoF3Jpf1d+4 -2kd92jjbrDnVHmtsKheMYc2xbXIBw8MgAGJoFjHVdqqGuw6qnsb58Nn4DSEC5MUo -FlkRudlpcyqSeLiSV5sI8jrlL5WwWLdrIBRtFO8KvH7YVdiI2i/6GaX7i+B/OfVy -K4XELKzvGUWSTLNhB9xNH27SgRNcmvMSZ4PPmz+Ln52kuaiWA3rF7iDeM9ovnhp6 -dB7h7sxaOgTdsxoEqBRjrLdHEoOabPXm6RUVkRqEGQ6UROcSjiVbgGcZ3GOTEAtl -Lor6CZpO2oYofaphNdgOpygau1LgePhsumywbrmHXumZNTfxPWQrqaA0k89jL9WB -365jJ6UeTo3cKXhZ+PmhIIynJkBugnLNeLLIjzwec+fBH7/PzqUqm9tEZDKgu39c -JRNItX+S ------END CERTIFICATE----- - -# Issuer: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Subject: CN=SecureSign Root CA15 O=Cybertrust Japan Co., Ltd. -# Label: "SecureSign Root CA15" -# Serial: 126083514594751269499665114766174399806381178503 -# MD5 Fingerprint: 13:30:fc:c4:62:a6:a9:de:b5:c1:68:af:b5:d2:31:47 -# SHA1 Fingerprint: cb:ba:83:c8:c1:5a:5d:f1:f9:73:6f:ca:d7:ef:28:13:06:4a:07:7d -# SHA256 Fingerprint: e7:78:f0:f0:95:fe:84:37:29:cd:1a:00:82:17:9e:53:14:a9:c2:91:44:28:05:e1:fb:1d:8f:b6:b8:88:6c:3a ------BEGIN CERTIFICATE----- -MIICIzCCAamgAwIBAgIUFhXHw9hJp75pDIqI7fBw+d23PocwCgYIKoZIzj0EAwMw -UTELMAkGA1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBM -dGQuMR0wGwYDVQQDExRTZWN1cmVTaWduIFJvb3QgQ0ExNTAeFw0yMDA0MDgwODMy -NTZaFw00NTA0MDgwODMyNTZaMFExCzAJBgNVBAYTAkpQMSMwIQYDVQQKExpDeWJl -cnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMUU2VjdXJlU2lnbiBSb290 -IENBMTUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQLUHSNZDKZmbPSYAi4Io5GdCx4 -wCtELW1fHcmuS1Iggz24FG1Th2CeX2yF2wYUleDHKP+dX+Sq8bOLbe1PL0vJSpSR -ZHX+AezB2Ot6lHhWGENfa4HL9rzatAy2KZMIaY+jQjBAMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTrQciu/NWeUUj1vYv0hyCTQSvT -9DAKBggqhkjOPQQDAwNoADBlAjEA2S6Jfl5OpBEHvVnCB96rMjhTKkZEBhd6zlHp -4P9mLQlO4E/0BdGF9jVg3PVys0Z9AjBEmEYagoUeYWmJSwdLZrWeqrqgHkHZAXQ6 -bkU6iYAZezKYVWOr62Nuk22rGwlgMU4= ------END CERTIFICATE----- \ No newline at end of file diff --git a/shotgun_api3/lib/certifi/core.py b/shotgun_api3/lib/certifi/core.py deleted file mode 100644 index 91f538bb1..000000000 --- a/shotgun_api3/lib/certifi/core.py +++ /dev/null @@ -1,114 +0,0 @@ -""" -certifi.py -~~~~~~~~~~ - -This module returns the installation location of cacert.pem or its contents. -""" -import sys -import atexit - -def exit_cacert_ctx() -> None: - _CACERT_CTX.__exit__(None, None, None) # type: ignore[union-attr] - - -if sys.version_info >= (3, 11): - - from importlib.resources import as_file, files - - _CACERT_CTX = None - _CACERT_PATH = None - - def where() -> str: - # This is slightly terrible, but we want to delay extracting the file - # in cases where we're inside of a zipimport situation until someone - # actually calls where(), but we don't want to re-extract the file - # on every call of where(), so we'll do it once then store it in a - # global variable. - global _CACERT_CTX - global _CACERT_PATH - if _CACERT_PATH is None: - # This is slightly janky, the importlib.resources API wants you to - # manage the cleanup of this file, so it doesn't actually return a - # path, it returns a context manager that will give you the path - # when you enter it and will do any cleanup when you leave it. In - # the common case of not needing a temporary file, it will just - # return the file system location and the __exit__() is a no-op. - # - # We also have to hold onto the actual context manager, because - # it will do the cleanup whenever it gets garbage collected, so - # we will also store that at the global level as well. - _CACERT_CTX = as_file(files("certifi").joinpath("cacert.pem")) - _CACERT_PATH = str(_CACERT_CTX.__enter__()) - atexit.register(exit_cacert_ctx) - - return _CACERT_PATH - - def contents() -> str: - return files("certifi").joinpath("cacert.pem").read_text(encoding="ascii") - -elif sys.version_info >= (3, 7): - - from importlib.resources import path as get_path, read_text - - _CACERT_CTX = None - _CACERT_PATH = None - - def where() -> str: - # This is slightly terrible, but we want to delay extracting the - # file in cases where we're inside of a zipimport situation until - # someone actually calls where(), but we don't want to re-extract - # the file on every call of where(), so we'll do it once then store - # it in a global variable. - global _CACERT_CTX - global _CACERT_PATH - if _CACERT_PATH is None: - # This is slightly janky, the importlib.resources API wants you - # to manage the cleanup of this file, so it doesn't actually - # return a path, it returns a context manager that will give - # you the path when you enter it and will do any cleanup when - # you leave it. In the common case of not needing a temporary - # file, it will just return the file system location and the - # __exit__() is a no-op. - # - # We also have to hold onto the actual context manager, because - # it will do the cleanup whenever it gets garbage collected, so - # we will also store that at the global level as well. - _CACERT_CTX = get_path("certifi", "cacert.pem") - _CACERT_PATH = str(_CACERT_CTX.__enter__()) - atexit.register(exit_cacert_ctx) - - return _CACERT_PATH - - def contents() -> str: - return read_text("certifi", "cacert.pem", encoding="ascii") - -else: - import os - import types - from typing import Union - - Package = Union[types.ModuleType, str] - Resource = Union[str, "os.PathLike"] - - # This fallback will work for Python versions prior to 3.7 that lack the - # importlib.resources module but relies on the existing `where` function - # so won't address issues with environments like PyOxidizer that don't set - # __file__ on modules. - def read_text( - package: Package, - resource: Resource, - encoding: str = 'utf-8', - errors: str = 'strict' - ) -> str: - with open(where(), encoding=encoding) as data: - return data.read() - - # If we don't have importlib.resources, then we will just do the old logic - # of assuming we're on the filesystem and munge the path directly. - def where() -> str: - f = os.path.dirname(__file__) - - return os.path.join(f, "cacert.pem") - - def contents() -> str: - return read_text("certifi", "cacert.pem", encoding="ascii") diff --git a/shotgun_api3/lib/certifi/py.typed b/shotgun_api3/lib/certifi/py.typed deleted file mode 100644 index e69de29bb..000000000 diff --git a/shotgun_api3/lib/httplib2/__init__.py b/shotgun_api3/lib/httplib2/__init__.py deleted file mode 100644 index 42c9916d1..000000000 --- a/shotgun_api3/lib/httplib2/__init__.py +++ /dev/null @@ -1,39 +0,0 @@ -from .. import six - -# Define all here to keep linters happy. It should be overwritten by the code -# below, but if in the future __all__ is not defined in httplib2 this will keep -# things from breaking. -__all__ = [] - -# Import the proper implementation into the module namespace depending on the -# current python version. httplib2 supports python 2/3 by forking the code rather -# than with a single cross-compatible module. Rather than modify third party code, -# we'll just import the appropriate branch here. -if six.PY3: - # Generate ssl_error_classes - import ssl as __ssl - ssl_error_classes = (__ssl.SSLError, __ssl.CertificateError) - del __ssl - - # get the python3 fork of httplib2 - from . import python3 as __httplib2_compat - - -else: - # Generate ssl_error_classes - from .python2 import SSLHandshakeError as __SSLHandshakeError # TODO: shouldn't rely on this. not public - ssl_error_classes = (__SSLHandshakeError,) - del __SSLHandshakeError - - # get the python2 fork of httplib2 - from . import python2 as __httplib2_compat - -# Import all of the httplib2 module. Note that we can't use a star import because -# we need to import *everything*, not just what exists in __all__. -for __name in dir(__httplib2_compat): - globals()[__name] = getattr(__httplib2_compat, __name) -del __httplib2_compat -del __name - -# Add ssl_error_classes to __all__ -__all__.append("ssl_error_classes") diff --git a/shotgun_api3/lib/httplib2/__pycache__/__init__.cpython-310.pyc b/shotgun_api3/lib/httplib2/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 000000000..f3d001c49 Binary files /dev/null and b/shotgun_api3/lib/httplib2/__pycache__/__init__.cpython-310.pyc differ diff --git a/shotgun_api3/lib/httplib2/auth.py b/shotgun_api3/lib/httplib2/auth.py deleted file mode 100644 index 53f427be1..000000000 --- a/shotgun_api3/lib/httplib2/auth.py +++ /dev/null @@ -1,69 +0,0 @@ -import base64 -import re - -from ... import pyparsing as pp - -from .error import * - - -try: # pyparsing>=3.0.0 - downcaseTokens = pp.common.downcaseTokens -except AttributeError: - downcaseTokens = pp.downcaseTokens - -UNQUOTE_PAIRS = re.compile(r"\\(.)") -unquote = lambda s, l, t: UNQUOTE_PAIRS.sub(r"\1", t[0][1:-1]) - -# https://tools.ietf.org/html/rfc7235#section-1.2 -# https://tools.ietf.org/html/rfc7235#appendix-B -tchar = "!#$%&'*+-.^_`|~" + pp.nums + pp.alphas -token = pp.Word(tchar).setName("token") -token68 = pp.Combine(pp.Word("-._~+/" + pp.nums + pp.alphas) + pp.Optional(pp.Word("=").leaveWhitespace())).setName( - "token68" -) - -quoted_string = pp.dblQuotedString.copy().setName("quoted-string").setParseAction(unquote) -auth_param_name = token.copy().setName("auth-param-name").addParseAction(downcaseTokens) -auth_param = auth_param_name + pp.Suppress("=") + (quoted_string | token) -params = pp.Dict(pp.delimitedList(pp.Group(auth_param))) - -scheme = token("scheme") -challenge = scheme + (params("params") | token68("token")) - -authentication_info = params.copy() -www_authenticate = pp.delimitedList(pp.Group(challenge)) - - -def _parse_authentication_info(headers, headername="authentication-info"): - """https://tools.ietf.org/html/rfc7615 - """ - header = headers.get(headername, "").strip() - if not header: - return {} - try: - parsed = authentication_info.parseString(header) - except pp.ParseException as ex: - # print(ex.explain(ex)) - raise MalformedHeader(headername) - - return parsed.asDict() - - -def _parse_www_authenticate(headers, headername="www-authenticate"): - """Returns a dictionary of dictionaries, one dict per auth_scheme.""" - header = headers.get(headername, "").strip() - if not header: - return {} - try: - parsed = www_authenticate.parseString(header) - except pp.ParseException as ex: - # print(ex.explain(ex)) - raise MalformedHeader(headername) - - retval = { - challenge["scheme"].lower(): challenge["params"].asDict() - if "params" in challenge - else {"token": challenge.get("token")} - for challenge in parsed - } - return retval diff --git a/shotgun_api3/lib/httplib2/cacerts.txt b/shotgun_api3/lib/httplib2/cacerts.txt deleted file mode 100644 index 78a444c43..000000000 --- a/shotgun_api3/lib/httplib2/cacerts.txt +++ /dev/null @@ -1,2225 +0,0 @@ -# Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Label: "GTE CyberTrust Global Root" -# Serial: 421 -# MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db -# SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74 -# SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36 ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -# Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Server CA" -# Serial: 1 -# MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d -# SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c -# SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9 ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -# Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Premium Server CA" -# Serial: 1 -# MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a -# SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a -# SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72 ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -# Issuer: O=Equifax OU=Equifax Secure Certificate Authority -# Subject: O=Equifax OU=Equifax Secure Certificate Authority -# Label: "Equifax Secure CA" -# Serial: 903804111 -# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4 -# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a -# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Label: "Verisign Class 3 Public Primary Certification Authority - G2" -# Serial: 167285380242319648451154478808036881606 -# MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9 -# SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f -# SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Label: "ValiCert Class 1 VA" -# Serial: 1 -# MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb -# SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e -# SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04 ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Label: "ValiCert Class 2 VA" -# Serial: 1 -# MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87 -# SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6 -# SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Label: "RSA Root Certificate 1" -# Serial: 1 -# MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72 -# SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb -# SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 3 Public Primary Certification Authority - G3" -# Serial: 206684696279472310254277870180966723415 -# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 -# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 -# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 4 Public Primary Certification Authority - G3" -# Serial: 314531972711909413743075096039378935511 -# MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df -# SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d -# SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Secure Server CA" -# Serial: 927650371 -# MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee -# SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39 -# SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50 ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946059622 -# MD5 Fingerprint: ba:21:ea:20:d6:dd:db:8f:c1:57:8b:40:ad:a1:fc:fc -# SHA1 Fingerprint: 80:1d:62:d0:7b:44:9d:5c:5c:03:5c:98:ea:61:fa:44:3c:2a:58:fe -# SHA256 Fingerprint: d1:c3:39:ea:27:84:eb:87:0f:93:4f:c5:63:4e:4a:a9:ad:55:05:01:64:01:f2:64:65:d3:7a:57:46:63:35:9f ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy -vUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure Global eBusiness CA" -# Serial: 1 -# MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc -# SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45 -# SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07 ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure eBusiness CA 1" -# Serial: 4 -# MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d -# SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41 -# SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73 ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -# Issuer: O=Equifax Secure OU=Equifax Secure eBusiness CA-2 -# Subject: O=Equifax Secure OU=Equifax Secure eBusiness CA-2 -# Label: "Equifax Secure eBusiness CA 2" -# Serial: 930140085 -# MD5 Fingerprint: aa:bf:bf:64:97:da:98:1d:6f:c6:08:3a:95:70:33:ca -# SHA1 Fingerprint: 39:4f:f6:85:0b:06:be:52:e5:18:56:cc:10:e1:80:e8:82:b3:85:cc -# SHA256 Fingerprint: 2f:27:4e:48:ab:a4:ac:7b:76:59:33:10:17:75:50:6d:c3:0e:e3:8e:f6:ac:d5:c0:49:32:cf:e0:41:23:42:20 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Low-Value Services Root" -# Serial: 1 -# MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc -# SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d -# SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7 ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Label: "AddTrust External Root" -# Serial: 1 -# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f -# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 -# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Public Services Root" -# Serial: 1 -# MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f -# SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5 -# SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Qualified Certificates Root" -# Serial: 1 -# MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb -# SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf -# SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16 ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. -# Label: "GeoTrust Global CA" -# Serial: 144470 -# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 -# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 -# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Global CA 2" -# Serial: 1 -# MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9 -# SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d -# SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85 ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Label: "GeoTrust Universal CA" -# Serial: 1 -# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 -# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 -# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Universal CA 2" -# Serial: 1 -# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 -# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 -# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -# Issuer: CN=America Online Root Certification Authority 1 O=America Online Inc. -# Subject: CN=America Online Root Certification Authority 1 O=America Online Inc. -# Label: "America Online Root Certification Authority 1" -# Serial: 1 -# MD5 Fingerprint: 14:f1:08:ad:9d:fa:64:e2:89:e7:1c:cf:a8:ad:7d:5e -# SHA1 Fingerprint: 39:21:c1:15:c1:5d:0e:ca:5c:cb:5b:c4:f0:7d:21:d8:05:0b:56:6a -# SHA256 Fingerprint: 77:40:73:12:c6:3a:15:3d:5b:c0:0b:4e:51:75:9c:df:da:c2:37:dc:2a:33:b6:79:46:e9:8e:9b:fa:68:0a:e3 ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -# Issuer: CN=America Online Root Certification Authority 2 O=America Online Inc. -# Subject: CN=America Online Root Certification Authority 2 O=America Online Inc. -# Label: "America Online Root Certification Authority 2" -# Serial: 1 -# MD5 Fingerprint: d6:ed:3c:ca:e2:66:0f:af:10:43:0d:77:9b:04:09:bf -# SHA1 Fingerprint: 85:b5:ff:67:9b:0c:79:96:1f:c8:6e:44:22:00:46:13:db:17:92:84 -# SHA256 Fingerprint: 7d:3b:46:5a:60:14:e5:26:c0:af:fc:ee:21:27:d2:31:17:27:ad:81:1c:26:84:2d:00:6a:f3:73:06:cc:80:bd ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw -RY8mkaKO/qk= ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=Secure Certificate Services O=Comodo CA Limited -# Subject: CN=Secure Certificate Services O=Comodo CA Limited -# Label: "Comodo Secure Services root" -# Serial: 1 -# MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd -# SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1 -# SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8 ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- - -# Issuer: CN=Trusted Certificate Services O=Comodo CA Limited -# Subject: CN=Trusted Certificate Services O=Comodo CA Limited -# Label: "Comodo Trusted Services root" -# Serial: 1 -# MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27 -# SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd -# SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -# Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN DATACorp SGC Root CA" -# Serial: 91374294542884689855167577680241077609 -# MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06 -# SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4 -# SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48 ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN USERFirst Hardware Root CA" -# Serial: 91374294542884704022267039221184531197 -# MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39 -# SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7 -# SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37 ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 1 -# MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16 -# SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f -# SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Label: "GeoTrust Primary Certification Authority" -# Serial: 32798226551256963324313806436981982369 -# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf -# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 -# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA" -# Serial: 69529181992039203566298953787712940909 -# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 -# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 -# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" -# Serial: 33037644167568058970164719475676101450 -# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c -# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 -# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA -# Subject: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA -# Label: "TC TrustCenter Class 2 CA II" -# Serial: 941389028203453866782103406992443 -# MD5 Fingerprint: ce:78:33:5c:59:78:01:6e:18:ea:b9:36:a0:b9:2e:23 -# SHA1 Fingerprint: ae:50:83:ed:7c:f4:5c:bc:8f:61:c6:21:fe:68:5d:79:42:21:15:6e -# SHA256 Fingerprint: e6:b8:f8:76:64:85:f8:07:ae:7f:8d:ac:16:70:46:1f:07:c0:a1:3e:ef:3a:1f:f7:17:53:8d:7a:ba:d3:91:b4 ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf -tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg -uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J -XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK -8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 -5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 -kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS -GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt -ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 -au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV -hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI -dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA -# Subject: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA -# Label: "TC TrustCenter Class 3 CA II" -# Serial: 1506523511417715638772220530020799 -# MD5 Fingerprint: 56:5f:aa:80:61:12:17:f6:67:21:e6:2b:6d:61:56:8e -# SHA1 Fingerprint: 80:25:ef:f4:6e:70:c8:d4:72:24:65:84:fe:40:3b:8a:8d:6a:db:f5 -# SHA256 Fingerprint: 8d:a0:84:fc:f9:9c:e0:77:22:f8:9b:32:05:93:98:06:fa:5c:b8:11:e1:c8:13:f6:a1:08:c7:d3:36:b3:40:8e ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW -Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q -Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 -1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq -ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 -Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX -XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN -irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 -TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 -g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB -95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj -S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Subject: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Label: "TC TrustCenter Universal CA I" -# Serial: 601024842042189035295619584734726 -# MD5 Fingerprint: 45:e1:a5:72:c5:a9:36:64:40:9e:f5:e4:58:84:67:8c -# SHA1 Fingerprint: 6b:2f:34:ad:89:58:be:62:fd:b0:6b:5c:ce:bb:9d:d9:4f:4e:39:f3 -# SHA256 Fingerprint: eb:f3:c0:2a:87:89:b1:fb:7d:51:19:95:d6:63:b7:29:06:d9:13:ce:0d:5e:10:56:8a:8a:77:e2:58:61:67:e7 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx -MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg -R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD -VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR -JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T -fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu -jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z -wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ -fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD -VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G -CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 -7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn -8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs -ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ -2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G3" -# Serial: 28809105769928564313984085209975885599 -# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 -# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd -# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G2" -# Serial: 71758320672825410020661621085256472406 -# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f -# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 -# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G3" -# Serial: 127614157056681299805556476275995414779 -# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 -# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 -# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G2" -# Serial: 80682863203381065782177908751794619243 -# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a -# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 -# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Universal Root Certification Authority" -# Serial: 85209574734084581917763752644031726877 -# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 -# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 -# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" -# Serial: 63143484348153506665311985501458640051 -# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 -# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a -# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Subject: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Label: "TC TrustCenter Universal CA III" -# Serial: 2010889993983507346460533407902964 -# MD5 Fingerprint: 9f:dd:db:ab:ff:8e:ff:45:21:5f:f0:6c:9d:8f:fe:2b -# SHA1 Fingerprint: 96:56:cd:7b:57:96:98:95:d0:e1:41:46:68:06:fb:b8:c6:11:06:87 -# SHA256 Fingerprint: 30:9b:4a:87:f6:ca:56:c9:31:69:aa:a9:9c:6d:98:88:54:d7:89:2b:d5:43:7e:2d:07:b2:9c:be:da:55:d3:5d ------BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy -MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl -ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm -BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF -5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv -DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v -zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT -yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj -dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh -MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI -4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz -dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY -aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G -DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH -LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 45 -# MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16 -# SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0 -# SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11 ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul -F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC -ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w -ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk -aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 -YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg -c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 -d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG -CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF -wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS -Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst -0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc -pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl -CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF -P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK -1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm -KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ -8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm -fyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Label: "StartCom Certification Authority G2" -# Serial: 59 -# MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64 -# SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17 -# SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95 ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 -OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG -A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ -JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD -vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo -D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ -Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW -RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK -HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN -nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM -0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i -UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 -Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg -TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL -BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX -UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl -6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK -9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ -HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI -wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY -XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l -IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo -hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr -so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US -# Subject: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US -# Serial: 33af1e6a711a9a0bb2864b11d09fae5 -# MD5 Fingerprint: E4:A6:8A:C8:54:AC:52:42:46:0A:FD:72:48:1B:2A:44 -# SHA1 Fingerprint: DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 -# SHA256 Fingerprint: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: /C=US/O=Internet Security Research Group/CN=ISRG Root X1 -# Subject: /C=US/O=Internet Security Research Group/CN=ISRG Root X1 -# Serial: 8210CFB0D240E3594463E0BB63828B00 -# SHA1 Fingerprint: CA:BD:2A:79:A1:07:6A:31:F2:1D:25:36:35:CB:03:9D:43:29:A5:E8 -# SHA256 Fingerprint: 96:BC:EC:06:26:49:76:F3:74:60:77:9A:CF:28:C5:A7:CF:E8:A3:C0:AA:E1:1A:8F:FC:EE:05:C0:BD:DF:08:C6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: /C=US/O=Internet Security Research Group/CN=ISRG Root X2 -# Subject: /C=US/O=Internet Security Research Group/CN=ISRG Root X2 -# Serial: 41D29DD172EAEEA780C12C6CE92F8752 -# SHA1 Fingerprint: BD:B1:B9:3C:D5:97:8D:45:C6:26:14:55:F8:DB:95:C7:5A:D1:53:AF -# SHA256 Fingerprint: 69:72:9B:8E:15:A8:6E:FC:17:7A:57:AF:B7:17:1D:FC:64:AD:D2:8C:2F:CA:8C:F1:50:7E:34:45:3C:CB:14:70 ------BEGIN CERTIFICATE----- -MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw -CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg -R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 -MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT -ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw -EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW -+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 -ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI -zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW -tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 -/q4AaOeMSQ+2b1tbFfLn ------END CERTIFICATE----- diff --git a/shotgun_api3/lib/httplib2/certs.py b/shotgun_api3/lib/httplib2/certs.py deleted file mode 100644 index 59d1ffc70..000000000 --- a/shotgun_api3/lib/httplib2/certs.py +++ /dev/null @@ -1,42 +0,0 @@ -"""Utilities for certificate management.""" - -import os - -certifi_available = False -certifi_where = None -try: - from certifi import where as certifi_where - certifi_available = True -except ImportError: - pass - -custom_ca_locater_available = False -custom_ca_locater_where = None -try: - from ca_certs_locater import get as custom_ca_locater_where - custom_ca_locater_available = True -except ImportError: - pass - - -BUILTIN_CA_CERTS = os.path.join( - os.path.dirname(os.path.abspath(__file__)), "cacerts.txt" -) - - -def where(): - env = os.environ.get("HTTPLIB2_CA_CERTS") - if env is not None: - if os.path.isfile(env): - return env - else: - raise RuntimeError("Environment variable HTTPLIB2_CA_CERTS not a valid file") - if custom_ca_locater_available: - return custom_ca_locater_where() - if certifi_available: - return certifi_where() - return BUILTIN_CA_CERTS - - -if __name__ == "__main__": - print(where()) diff --git a/shotgun_api3/lib/httplib2/error.py b/shotgun_api3/lib/httplib2/error.py deleted file mode 100644 index 0e68c12a8..000000000 --- a/shotgun_api3/lib/httplib2/error.py +++ /dev/null @@ -1,48 +0,0 @@ -# All exceptions raised here derive from HttpLib2Error -class HttpLib2Error(Exception): - pass - - -# Some exceptions can be caught and optionally -# be turned back into responses. -class HttpLib2ErrorWithResponse(HttpLib2Error): - def __init__(self, desc, response, content): - self.response = response - self.content = content - HttpLib2Error.__init__(self, desc) - - -class RedirectMissingLocation(HttpLib2ErrorWithResponse): - pass - - -class RedirectLimit(HttpLib2ErrorWithResponse): - pass - - -class FailedToDecompressContent(HttpLib2ErrorWithResponse): - pass - - -class UnimplementedDigestAuthOptionError(HttpLib2ErrorWithResponse): - pass - - -class UnimplementedHmacDigestAuthOptionError(HttpLib2ErrorWithResponse): - pass - - -class MalformedHeader(HttpLib2Error): - pass - - -class RelativeURIError(HttpLib2Error): - pass - - -class ServerNotFoundError(HttpLib2Error): - pass - - -class ProxiesUnavailableError(HttpLib2Error): - pass diff --git a/shotgun_api3/lib/httplib2/iri2uri.py b/shotgun_api3/lib/httplib2/iri2uri.py deleted file mode 100644 index 86e361e62..000000000 --- a/shotgun_api3/lib/httplib2/iri2uri.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -"""Converts an IRI to a URI.""" - -__author__ = "Joe Gregorio (joe@bitworking.org)" -__copyright__ = "Copyright 2006, Joe Gregorio" -__contributors__ = [] -__version__ = "1.0.0" -__license__ = "MIT" - -import urllib.parse - -# Convert an IRI to a URI following the rules in RFC 3987 -# -# The characters we need to enocde and escape are defined in the spec: -# -# iprivate = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD -# ucschar = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF -# / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD -# / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD -# / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD -# / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD -# / %xD0000-DFFFD / %xE1000-EFFFD - -escape_range = [ - (0xA0, 0xD7FF), - (0xE000, 0xF8FF), - (0xF900, 0xFDCF), - (0xFDF0, 0xFFEF), - (0x10000, 0x1FFFD), - (0x20000, 0x2FFFD), - (0x30000, 0x3FFFD), - (0x40000, 0x4FFFD), - (0x50000, 0x5FFFD), - (0x60000, 0x6FFFD), - (0x70000, 0x7FFFD), - (0x80000, 0x8FFFD), - (0x90000, 0x9FFFD), - (0xA0000, 0xAFFFD), - (0xB0000, 0xBFFFD), - (0xC0000, 0xCFFFD), - (0xD0000, 0xDFFFD), - (0xE1000, 0xEFFFD), - (0xF0000, 0xFFFFD), - (0x100000, 0x10FFFD), -] - - -def encode(c): - retval = c - i = ord(c) - for low, high in escape_range: - if i < low: - break - if i >= low and i <= high: - retval = "".join(["%%%2X" % o for o in c.encode("utf-8")]) - break - return retval - - -def iri2uri(uri): - """Convert an IRI to a URI. Note that IRIs must be - passed in a unicode strings. That is, do not utf-8 encode - the IRI before passing it into the function.""" - if isinstance(uri, str): - (scheme, authority, path, query, fragment) = urllib.parse.urlsplit(uri) - authority = authority.encode("idna").decode("utf-8") - # For each character in 'ucschar' or 'iprivate' - # 1. encode as utf-8 - # 2. then %-encode each octet of that utf-8 - uri = urllib.parse.urlunsplit((scheme, authority, path, query, fragment)) - uri = "".join([encode(c) for c in uri]) - return uri - - -if __name__ == "__main__": - import unittest - - class Test(unittest.TestCase): - def test_uris(self): - """Test that URIs are invariant under the transformation.""" - invariant = [ - "ftp://ftp.is.co.za/rfc/rfc1808.txt", - "http://www.ietf.org/rfc/rfc2396.txt", - "ldap://[2001:db8::7]/c=GB?objectClass?one", - "mailto:John.Doe@example.com", - "news:comp.infosystems.www.servers.unix", - "tel:+1-816-555-1212", - "telnet://192.0.2.16:80/", - "urn:oasis:names:specification:docbook:dtd:xml:4.1.2", - ] - for uri in invariant: - self.assertEqual(uri, iri2uri(uri)) - - def test_iri(self): - """Test that the right type of escaping is done for each part of the URI.""" - self.assertEqual( - "http://xn--o3h.com/%E2%98%84", - iri2uri("http://\N{COMET}.com/\N{COMET}"), - ) - self.assertEqual( - "http://bitworking.org/?fred=%E2%98%84", - iri2uri("http://bitworking.org/?fred=\N{COMET}"), - ) - self.assertEqual( - "http://bitworking.org/#%E2%98%84", - iri2uri("http://bitworking.org/#\N{COMET}"), - ) - self.assertEqual("#%E2%98%84", iri2uri("#\N{COMET}")) - self.assertEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri("/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}"), - ) - self.assertEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri(iri2uri("/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}")), - ) - self.assertNotEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri( - "/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}".encode("utf-8") - ), - ) - - unittest.main() diff --git a/shotgun_api3/lib/httplib2/python2/__init__.py b/shotgun_api3/lib/httplib2/python2/__init__.py deleted file mode 100644 index cbd8f382e..000000000 --- a/shotgun_api3/lib/httplib2/python2/__init__.py +++ /dev/null @@ -1,1993 +0,0 @@ -"""Small, fast HTTP client library for Python. - -Features persistent connections, cache, and Google App Engine Standard -Environment support. -""" - -from __future__ import print_function - -__author__ = "Joe Gregorio (joe@bitworking.org)" -__copyright__ = "Copyright 2006, Joe Gregorio" -__contributors__ = [ - "Thomas Broyer (t.broyer@ltgt.net)", - "James Antill", - "Xavier Verges Farrero", - "Jonathan Feinberg", - "Blair Zajac", - "Sam Ruby", - "Louis Nyffenegger", - "Alex Yu", - "Lai Han", -] -__license__ = "MIT" -__version__ = "0.22.0" - -import base64 -import calendar -import copy -import email -import email.FeedParser -import email.Message -import email.Utils -import errno -import gzip -import httplib -import os -import random -import re -import StringIO -import sys -import time -import urllib -import urlparse -import zlib - -try: - from hashlib import sha1 as _sha, md5 as _md5 -except ImportError: - # prior to Python 2.5, these were separate modules - import sha - import md5 - - _sha = sha.new - _md5 = md5.new -import hmac -from gettext import gettext as _ -import socket - -try: - from . import socks -except ImportError: - try: - import socks - except (ImportError, AttributeError): - socks = None -from . import auth -from .error import * - -# Build the appropriate socket wrapper for ssl -ssl = None -ssl_SSLError = None -ssl_CertificateError = None -try: - import ssl # python 2.6 -except ImportError: - pass -if ssl is not None: - ssl_SSLError = getattr(ssl, "SSLError", None) - ssl_CertificateError = getattr(ssl, "CertificateError", None) - - -def _ssl_wrap_socket(sock, key_file, cert_file, disable_validation, ca_certs, ssl_version, hostname, key_password): - if disable_validation: - cert_reqs = ssl.CERT_NONE - else: - cert_reqs = ssl.CERT_REQUIRED - if ssl_version is None: - ssl_version = ssl.PROTOCOL_SSLv23 - - if hasattr(ssl, "SSLContext"): # Python 2.7.9 - context = ssl.SSLContext(ssl_version) - context.verify_mode = cert_reqs - context.check_hostname = cert_reqs != ssl.CERT_NONE - if cert_file: - if key_password: - context.load_cert_chain(cert_file, key_file, key_password) - else: - context.load_cert_chain(cert_file, key_file) - if ca_certs: - context.load_verify_locations(ca_certs) - return context.wrap_socket(sock, server_hostname=hostname) - else: - if key_password: - raise NotSupportedOnThisPlatform("Certificate with password is not supported.") - return ssl.wrap_socket( - sock, keyfile=key_file, certfile=cert_file, cert_reqs=cert_reqs, ca_certs=ca_certs, ssl_version=ssl_version, - ) - - -def _ssl_wrap_socket_unsupported( - sock, key_file, cert_file, disable_validation, ca_certs, ssl_version, hostname, key_password -): - if not disable_validation: - raise CertificateValidationUnsupported( - "SSL certificate validation is not supported without " - "the ssl module installed. To avoid this error, install " - "the ssl module, or explicity disable validation." - ) - if key_password: - raise NotSupportedOnThisPlatform("Certificate with password is not supported.") - ssl_sock = socket.ssl(sock, key_file, cert_file) - return httplib.FakeSocket(sock, ssl_sock) - - -if ssl is None: - _ssl_wrap_socket = _ssl_wrap_socket_unsupported - -if sys.version_info >= (2, 3): - from .iri2uri import iri2uri -else: - - def iri2uri(uri): - return uri - - -def has_timeout(timeout): # python 2.6 - if hasattr(socket, "_GLOBAL_DEFAULT_TIMEOUT"): - return timeout is not None and timeout is not socket._GLOBAL_DEFAULT_TIMEOUT - return timeout is not None - - -__all__ = [ - "Http", - "Response", - "ProxyInfo", - "HttpLib2Error", - "RedirectMissingLocation", - "RedirectLimit", - "FailedToDecompressContent", - "UnimplementedDigestAuthOptionError", - "UnimplementedHmacDigestAuthOptionError", - "debuglevel", - "ProxiesUnavailableError", -] - -# The httplib debug level, set to a non-zero value to get debug output -debuglevel = 0 - -# A request will be tried 'RETRIES' times if it fails at the socket/connection level. -RETRIES = 2 - -# Python 2.3 support -if sys.version_info < (2, 4): - - def sorted(seq): - seq.sort() - return seq - - -# Python 2.3 support -def HTTPResponse__getheaders(self): - """Return list of (header, value) tuples.""" - if self.msg is None: - raise httplib.ResponseNotReady() - return self.msg.items() - - -if not hasattr(httplib.HTTPResponse, "getheaders"): - httplib.HTTPResponse.getheaders = HTTPResponse__getheaders - - -# All exceptions raised here derive from HttpLib2Error -class HttpLib2Error(Exception): - pass - - -# Some exceptions can be caught and optionally -# be turned back into responses. -class HttpLib2ErrorWithResponse(HttpLib2Error): - def __init__(self, desc, response, content): - self.response = response - self.content = content - HttpLib2Error.__init__(self, desc) - - -class RedirectMissingLocation(HttpLib2ErrorWithResponse): - pass - - -class RedirectLimit(HttpLib2ErrorWithResponse): - pass - - -class FailedToDecompressContent(HttpLib2ErrorWithResponse): - pass - - -class UnimplementedDigestAuthOptionError(HttpLib2ErrorWithResponse): - pass - - -class UnimplementedHmacDigestAuthOptionError(HttpLib2ErrorWithResponse): - pass - - -class MalformedHeader(HttpLib2Error): - pass - - -class RelativeURIError(HttpLib2Error): - pass - - -class ServerNotFoundError(HttpLib2Error): - pass - - -class ProxiesUnavailableError(HttpLib2Error): - pass - - -class CertificateValidationUnsupported(HttpLib2Error): - pass - - -class SSLHandshakeError(HttpLib2Error): - pass - - -class NotSupportedOnThisPlatform(HttpLib2Error): - pass - - -class CertificateHostnameMismatch(SSLHandshakeError): - def __init__(self, desc, host, cert): - HttpLib2Error.__init__(self, desc) - self.host = host - self.cert = cert - - -class NotRunningAppEngineEnvironment(HttpLib2Error): - pass - - -# Open Items: -# ----------- -# Proxy support - -# Are we removing the cached content too soon on PUT (only delete on 200 Maybe?) - -# Pluggable cache storage (supports storing the cache in -# flat files by default. We need a plug-in architecture -# that can support Berkeley DB and Squid) - -# == Known Issues == -# Does not handle a resource that uses conneg and Last-Modified but no ETag as a cache validator. -# Does not handle Cache-Control: max-stale -# Does not use Age: headers when calculating cache freshness. - -# The number of redirections to follow before giving up. -# Note that only GET redirects are automatically followed. -# Will also honor 301 requests by saving that info and never -# requesting that URI again. -DEFAULT_MAX_REDIRECTS = 5 - -from . import certs - -CA_CERTS = certs.where() - -# Which headers are hop-by-hop headers by default -HOP_BY_HOP = [ - "connection", - "keep-alive", - "proxy-authenticate", - "proxy-authorization", - "te", - "trailers", - "transfer-encoding", - "upgrade", -] - -# https://tools.ietf.org/html/rfc7231#section-8.1.3 -SAFE_METHODS = ("GET", "HEAD") # TODO add "OPTIONS", "TRACE" - -# To change, assign to `Http().redirect_codes` -REDIRECT_CODES = frozenset((300, 301, 302, 303, 307, 308)) - - -def _get_end2end_headers(response): - hopbyhop = list(HOP_BY_HOP) - hopbyhop.extend([x.strip() for x in response.get("connection", "").split(",")]) - return [header for header in response.keys() if header not in hopbyhop] - - -URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") - - -def parse_uri(uri): - """Parses a URI using the regex given in Appendix B of RFC 3986. - - (scheme, authority, path, query, fragment) = parse_uri(uri) - """ - groups = URI.match(uri).groups() - return (groups[1], groups[3], groups[4], groups[6], groups[8]) - - -def urlnorm(uri): - (scheme, authority, path, query, fragment) = parse_uri(uri) - if not scheme or not authority: - raise RelativeURIError("Only absolute URIs are allowed. uri = %s" % uri) - authority = authority.lower() - scheme = scheme.lower() - if not path: - path = "/" - # Could do syntax based normalization of the URI before - # computing the digest. See Section 6.2.2 of Std 66. - request_uri = query and "?".join([path, query]) or path - scheme = scheme.lower() - defrag_uri = scheme + "://" + authority + request_uri - return scheme, authority, request_uri, defrag_uri - - -# Cache filename construction (original borrowed from Venus http://intertwingly.net/code/venus/) -re_url_scheme = re.compile(r"^\w+://") -re_unsafe = re.compile(r"[^\w\-_.()=!]+") - - -def safename(filename): - """Return a filename suitable for the cache. - Strips dangerous and common characters to create a filename we - can use to store the cache in. - """ - if isinstance(filename, str): - filename_bytes = filename - filename = filename.decode("utf-8") - else: - filename_bytes = filename.encode("utf-8") - filemd5 = _md5(filename_bytes).hexdigest() - filename = re_url_scheme.sub("", filename) - filename = re_unsafe.sub("", filename) - - # limit length of filename (vital for Windows) - # https://github.com/httplib2/httplib2/pull/74 - # C:\Users\ \AppData\Local\Temp\ , - # 9 chars + max 104 chars + 20 chars + x + 1 + 32 = max 259 chars - # Thus max safe filename x = 93 chars. Let it be 90 to make a round sum: - filename = filename[:90] - - return ",".join((filename, filemd5)) - - -NORMALIZE_SPACE = re.compile(r"(?:\r\n)?[ \t]+") - - -def _normalize_headers(headers): - return dict([(key.lower(), NORMALIZE_SPACE.sub(value, " ").strip()) for (key, value) in headers.iteritems()]) - - -def _parse_cache_control(headers): - retval = {} - if "cache-control" in headers: - parts = headers["cache-control"].split(",") - parts_with_args = [ - tuple([x.strip().lower() for x in part.split("=", 1)]) for part in parts if -1 != part.find("=") - ] - parts_wo_args = [(name.strip().lower(), 1) for name in parts if -1 == name.find("=")] - retval = dict(parts_with_args + parts_wo_args) - return retval - - -# Whether to use a strict mode to parse WWW-Authenticate headers -# Might lead to bad results in case of ill-formed header value, -# so disabled by default, falling back to relaxed parsing. -# Set to true to turn on, usefull for testing servers. -USE_WWW_AUTH_STRICT_PARSING = 0 - - -# TODO: add current time as _entry_disposition argument to avoid sleep in tests -def _entry_disposition(response_headers, request_headers): - """Determine freshness from the Date, Expires and Cache-Control headers. - - We don't handle the following: - - 1. Cache-Control: max-stale - 2. Age: headers are not used in the calculations. - - Not that this algorithm is simpler than you might think - because we are operating as a private (non-shared) cache. - This lets us ignore 's-maxage'. We can also ignore - 'proxy-invalidate' since we aren't a proxy. - We will never return a stale document as - fresh as a design decision, and thus the non-implementation - of 'max-stale'. This also lets us safely ignore 'must-revalidate' - since we operate as if every server has sent 'must-revalidate'. - Since we are private we get to ignore both 'public' and - 'private' parameters. We also ignore 'no-transform' since - we don't do any transformations. - The 'no-store' parameter is handled at a higher level. - So the only Cache-Control parameters we look at are: - - no-cache - only-if-cached - max-age - min-fresh - """ - - retval = "STALE" - cc = _parse_cache_control(request_headers) - cc_response = _parse_cache_control(response_headers) - - if "pragma" in request_headers and request_headers["pragma"].lower().find("no-cache") != -1: - retval = "TRANSPARENT" - if "cache-control" not in request_headers: - request_headers["cache-control"] = "no-cache" - elif "no-cache" in cc: - retval = "TRANSPARENT" - elif "no-cache" in cc_response: - retval = "STALE" - elif "only-if-cached" in cc: - retval = "FRESH" - elif "date" in response_headers: - date = calendar.timegm(email.Utils.parsedate_tz(response_headers["date"])) - now = time.time() - current_age = max(0, now - date) - if "max-age" in cc_response: - try: - freshness_lifetime = int(cc_response["max-age"]) - except ValueError: - freshness_lifetime = 0 - elif "expires" in response_headers: - expires = email.Utils.parsedate_tz(response_headers["expires"]) - if None == expires: - freshness_lifetime = 0 - else: - freshness_lifetime = max(0, calendar.timegm(expires) - date) - else: - freshness_lifetime = 0 - if "max-age" in cc: - try: - freshness_lifetime = int(cc["max-age"]) - except ValueError: - freshness_lifetime = 0 - if "min-fresh" in cc: - try: - min_fresh = int(cc["min-fresh"]) - except ValueError: - min_fresh = 0 - current_age += min_fresh - if freshness_lifetime > current_age: - retval = "FRESH" - return retval - - -def _decompressContent(response, new_content): - content = new_content - try: - encoding = response.get("content-encoding", None) - if encoding in ["gzip", "deflate"]: - if encoding == "gzip": - content = gzip.GzipFile(fileobj=StringIO.StringIO(new_content)).read() - if encoding == "deflate": - try: - content = zlib.decompress(content, zlib.MAX_WBITS) - except (IOError, zlib.error): - content = zlib.decompress(content, -zlib.MAX_WBITS) - response["content-length"] = str(len(content)) - # Record the historical presence of the encoding in a way the won't interfere. - response["-content-encoding"] = response["content-encoding"] - del response["content-encoding"] - except (IOError, zlib.error): - content = "" - raise FailedToDecompressContent( - _("Content purported to be compressed with %s but failed to decompress.") % response.get("content-encoding"), - response, - content, - ) - return content - - -def _updateCache(request_headers, response_headers, content, cache, cachekey): - if cachekey: - cc = _parse_cache_control(request_headers) - cc_response = _parse_cache_control(response_headers) - if "no-store" in cc or "no-store" in cc_response: - cache.delete(cachekey) - else: - info = email.Message.Message() - for key, value in response_headers.iteritems(): - if key not in ["status", "content-encoding", "transfer-encoding"]: - info[key] = value - - # Add annotations to the cache to indicate what headers - # are variant for this request. - vary = response_headers.get("vary", None) - if vary: - vary_headers = vary.lower().replace(" ", "").split(",") - for header in vary_headers: - key = "-varied-%s" % header - try: - info[key] = request_headers[header] - except KeyError: - pass - - status = response_headers.status - if status == 304: - status = 200 - - status_header = "status: %d\r\n" % status - - header_str = info.as_string() - - header_str = re.sub("\r(?!\n)|(? 0: - service = "cl" - # No point in guessing Base or Spreadsheet - # elif request_uri.find("spreadsheets") > 0: - # service = "wise" - - auth = dict(Email=credentials[0], Passwd=credentials[1], service=service, source=headers["user-agent"],) - resp, content = self.http.request( - "https://www.google.com/accounts/ClientLogin", - method="POST", - body=urlencode(auth), - headers={"Content-Type": "application/x-www-form-urlencoded"}, - ) - lines = content.split("\n") - d = dict([tuple(line.split("=", 1)) for line in lines if line]) - if resp.status == 403: - self.Auth = "" - else: - self.Auth = d["Auth"] - - def request(self, method, request_uri, headers, content): - """Modify the request headers to add the appropriate - Authorization header.""" - headers["authorization"] = "GoogleLogin Auth=" + self.Auth - - -AUTH_SCHEME_CLASSES = { - "basic": BasicAuthentication, - "wsse": WsseAuthentication, - "digest": DigestAuthentication, - "hmacdigest": HmacDigestAuthentication, - "googlelogin": GoogleLoginAuthentication, -} - -AUTH_SCHEME_ORDER = ["hmacdigest", "googlelogin", "digest", "wsse", "basic"] - - -class FileCache(object): - """Uses a local directory as a store for cached files. - Not really safe to use if multiple threads or processes are going to - be running on the same cache. - """ - - def __init__(self, cache, safe=safename): # use safe=lambda x: md5.new(x).hexdigest() for the old behavior - self.cache = cache - self.safe = safe - if not os.path.exists(cache): - os.makedirs(self.cache) - - def get(self, key): - retval = None - cacheFullPath = os.path.join(self.cache, self.safe(key)) - try: - f = file(cacheFullPath, "rb") - retval = f.read() - f.close() - except IOError: - pass - return retval - - def set(self, key, value): - cacheFullPath = os.path.join(self.cache, self.safe(key)) - f = file(cacheFullPath, "wb") - f.write(value) - f.close() - - def delete(self, key): - cacheFullPath = os.path.join(self.cache, self.safe(key)) - if os.path.exists(cacheFullPath): - os.remove(cacheFullPath) - - -class Credentials(object): - def __init__(self): - self.credentials = [] - - def add(self, name, password, domain=""): - self.credentials.append((domain.lower(), name, password)) - - def clear(self): - self.credentials = [] - - def iter(self, domain): - for (cdomain, name, password) in self.credentials: - if cdomain == "" or domain == cdomain: - yield (name, password) - - -class KeyCerts(Credentials): - """Identical to Credentials except that - name/password are mapped to key/cert.""" - - def add(self, key, cert, domain, password): - self.credentials.append((domain.lower(), key, cert, password)) - - def iter(self, domain): - for (cdomain, key, cert, password) in self.credentials: - if cdomain == "" or domain == cdomain: - yield (key, cert, password) - - -class AllHosts(object): - pass - - -class ProxyInfo(object): - """Collect information required to use a proxy.""" - - bypass_hosts = () - - def __init__( - self, proxy_type, proxy_host, proxy_port, proxy_rdns=True, proxy_user=None, proxy_pass=None, proxy_headers=None, - ): - """Args: - - proxy_type: The type of proxy server. This must be set to one of - socks.PROXY_TYPE_XXX constants. For example: p = - ProxyInfo(proxy_type=socks.PROXY_TYPE_HTTP, proxy_host='localhost', - proxy_port=8000) - proxy_host: The hostname or IP address of the proxy server. - proxy_port: The port that the proxy server is running on. - proxy_rdns: If True (default), DNS queries will not be performed - locally, and instead, handed to the proxy to resolve. This is useful - if the network does not allow resolution of non-local names. In - httplib2 0.9 and earlier, this defaulted to False. - proxy_user: The username used to authenticate with the proxy server. - proxy_pass: The password used to authenticate with the proxy server. - proxy_headers: Additional or modified headers for the proxy connect - request. - """ - self.proxy_type = proxy_type - self.proxy_host = proxy_host - self.proxy_port = proxy_port - self.proxy_rdns = proxy_rdns - self.proxy_user = proxy_user - self.proxy_pass = proxy_pass - self.proxy_headers = proxy_headers - - def astuple(self): - return ( - self.proxy_type, - self.proxy_host, - self.proxy_port, - self.proxy_rdns, - self.proxy_user, - self.proxy_pass, - self.proxy_headers, - ) - - def isgood(self): - return (self.proxy_host != None) and (self.proxy_port != None) - - def applies_to(self, hostname): - return not self.bypass_host(hostname) - - def bypass_host(self, hostname): - """Has this host been excluded from the proxy config""" - if self.bypass_hosts is AllHosts: - return True - - hostname = "." + hostname.lstrip(".") - for skip_name in self.bypass_hosts: - # *.suffix - if skip_name.startswith(".") and hostname.endswith(skip_name): - return True - # exact match - if hostname == "." + skip_name: - return True - return False - - def __repr__(self): - return ( - "" - ).format(p=self) - - -def proxy_info_from_environment(method="http"): - """Read proxy info from the environment variables. - """ - if method not in ["http", "https"]: - return - - env_var = method + "_proxy" - url = os.environ.get(env_var, os.environ.get(env_var.upper())) - if not url: - return - return proxy_info_from_url(url, method, None) - - -def proxy_info_from_url(url, method="http", noproxy=None): - """Construct a ProxyInfo from a URL (such as http_proxy env var) - """ - url = urlparse.urlparse(url) - - proxy_type = 3 # socks.PROXY_TYPE_HTTP - pi = ProxyInfo( - proxy_type=proxy_type, - proxy_host=url.hostname, - proxy_port=url.port or dict(https=443, http=80)[method], - proxy_user=url.username or None, - proxy_pass=url.password or None, - proxy_headers=None, - ) - - bypass_hosts = [] - # If not given an explicit noproxy value, respect values in env vars. - if noproxy is None: - noproxy = os.environ.get("no_proxy", os.environ.get("NO_PROXY", "")) - # Special case: A single '*' character means all hosts should be bypassed. - if noproxy == "*": - bypass_hosts = AllHosts - elif noproxy.strip(): - bypass_hosts = noproxy.split(",") - bypass_hosts = filter(bool, bypass_hosts) # To exclude empty string. - - pi.bypass_hosts = bypass_hosts - return pi - - -class HTTPConnectionWithTimeout(httplib.HTTPConnection): - """HTTPConnection subclass that supports timeouts - - All timeouts are in seconds. If None is passed for timeout then - Python's default timeout for sockets will be used. See for example - the docs of socket.setdefaulttimeout(): - http://docs.python.org/library/socket.html#socket.setdefaulttimeout - """ - - def __init__(self, host, port=None, strict=None, timeout=None, proxy_info=None): - httplib.HTTPConnection.__init__(self, host, port, strict) - self.timeout = timeout - self.proxy_info = proxy_info - - def connect(self): - """Connect to the host and port specified in __init__.""" - # Mostly verbatim from httplib.py. - if self.proxy_info and socks is None: - raise ProxiesUnavailableError("Proxy support missing but proxy use was requested!") - if self.proxy_info and self.proxy_info.isgood(): - use_proxy = True - ( - proxy_type, - proxy_host, - proxy_port, - proxy_rdns, - proxy_user, - proxy_pass, - proxy_headers, - ) = self.proxy_info.astuple() - - host = proxy_host - port = proxy_port - else: - use_proxy = False - - host = self.host - port = self.port - - socket_err = None - - for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - try: - if use_proxy: - self.sock = socks.socksocket(af, socktype, proto) - self.sock.setproxy( - proxy_type, proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers, - ) - else: - self.sock = socket.socket(af, socktype, proto) - self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - # Different from httplib: support timeouts. - if has_timeout(self.timeout): - self.sock.settimeout(self.timeout) - # End of difference from httplib. - if self.debuglevel > 0: - print("connect: (%s, %s) ************" % (self.host, self.port)) - if use_proxy: - print( - "proxy: %s ************" - % str((proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers,)) - ) - if use_proxy: - self.sock.connect((self.host, self.port) + sa[2:]) - else: - self.sock.connect(sa) - except socket.error as e: - socket_err = e - if self.debuglevel > 0: - print("connect fail: (%s, %s)" % (self.host, self.port)) - if use_proxy: - print( - "proxy: %s" - % str((proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers,)) - ) - if self.sock: - self.sock.close() - self.sock = None - continue - break - if not self.sock: - raise socket_err or socket.error("getaddrinfo returns an empty list") - - -class HTTPSConnectionWithTimeout(httplib.HTTPSConnection): - """This class allows communication via SSL. - - All timeouts are in seconds. If None is passed for timeout then - Python's default timeout for sockets will be used. See for example - the docs of socket.setdefaulttimeout(): - http://docs.python.org/library/socket.html#socket.setdefaulttimeout - """ - - def __init__( - self, - host, - port=None, - key_file=None, - cert_file=None, - strict=None, - timeout=None, - proxy_info=None, - ca_certs=None, - disable_ssl_certificate_validation=False, - ssl_version=None, - key_password=None, - ): - if key_password: - httplib.HTTPSConnection.__init__(self, host, port=port, strict=strict) - self._context.load_cert_chain(cert_file, key_file, key_password) - self.key_file = key_file - self.cert_file = cert_file - self.key_password = key_password - else: - httplib.HTTPSConnection.__init__( - self, host, port=port, key_file=key_file, cert_file=cert_file, strict=strict - ) - self.key_password = None - self.timeout = timeout - self.proxy_info = proxy_info - if ca_certs is None: - ca_certs = CA_CERTS - self.ca_certs = ca_certs - self.disable_ssl_certificate_validation = disable_ssl_certificate_validation - self.ssl_version = ssl_version - - # The following two methods were adapted from https_wrapper.py, released - # with the Google Appengine SDK at - # http://googleappengine.googlecode.com/svn-history/r136/trunk/python/google/appengine/tools/https_wrapper.py - # under the following license: - # - # Copyright 2007 Google Inc. - # - # Licensed under the Apache License, Version 2.0 (the "License"); - # you may not use this file except in compliance with the License. - # You may obtain a copy of the License at - # - # http://www.apache.org/licenses/LICENSE-2.0 - # - # Unless required by applicable law or agreed to in writing, software - # distributed under the License is distributed on an "AS IS" BASIS, - # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - # See the License for the specific language governing permissions and - # limitations under the License. - # - - def _GetValidHostsForCert(self, cert): - """Returns a list of valid host globs for an SSL certificate. - - Args: - cert: A dictionary representing an SSL certificate. - Returns: - list: A list of valid host globs. - """ - if "subjectAltName" in cert: - return [x[1] for x in cert["subjectAltName"] if x[0].lower() == "dns"] - else: - return [x[0][1] for x in cert["subject"] if x[0][0].lower() == "commonname"] - - def _ValidateCertificateHostname(self, cert, hostname): - """Validates that a given hostname is valid for an SSL certificate. - - Args: - cert: A dictionary representing an SSL certificate. - hostname: The hostname to test. - Returns: - bool: Whether or not the hostname is valid for this certificate. - """ - hosts = self._GetValidHostsForCert(cert) - for host in hosts: - host_re = host.replace(".", "\.").replace("*", "[^.]*") - if re.search("^%s$" % (host_re,), hostname, re.I): - return True - return False - - def connect(self): - "Connect to a host on a given (SSL) port." - - if self.proxy_info and self.proxy_info.isgood(): - use_proxy = True - ( - proxy_type, - proxy_host, - proxy_port, - proxy_rdns, - proxy_user, - proxy_pass, - proxy_headers, - ) = self.proxy_info.astuple() - - host = proxy_host - port = proxy_port - else: - use_proxy = False - - host = self.host - port = self.port - - socket_err = None - - address_info = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM) - for family, socktype, proto, canonname, sockaddr in address_info: - try: - if use_proxy: - sock = socks.socksocket(family, socktype, proto) - - sock.setproxy( - proxy_type, proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers, - ) - else: - sock = socket.socket(family, socktype, proto) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - - if has_timeout(self.timeout): - sock.settimeout(self.timeout) - - if use_proxy: - sock.connect((self.host, self.port) + sockaddr[:2]) - else: - sock.connect(sockaddr) - self.sock = _ssl_wrap_socket( - sock, - self.key_file, - self.cert_file, - self.disable_ssl_certificate_validation, - self.ca_certs, - self.ssl_version, - self.host, - self.key_password, - ) - if self.debuglevel > 0: - print("connect: (%s, %s)" % (self.host, self.port)) - if use_proxy: - print( - "proxy: %s" - % str((proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers,)) - ) - if not self.disable_ssl_certificate_validation: - cert = self.sock.getpeercert() - hostname = self.host.split(":", 0)[0] - if not self._ValidateCertificateHostname(cert, hostname): - raise CertificateHostnameMismatch( - "Server presented certificate that does not match " "host %s: %s" % (hostname, cert), - hostname, - cert, - ) - except (ssl_SSLError, ssl_CertificateError, CertificateHostnameMismatch,) as e: - if sock: - sock.close() - if self.sock: - self.sock.close() - self.sock = None - # Unfortunately the ssl module doesn't seem to provide any way - # to get at more detailed error information, in particular - # whether the error is due to certificate validation or - # something else (such as SSL protocol mismatch). - if getattr(e, "errno", None) == ssl.SSL_ERROR_SSL: - raise SSLHandshakeError(e) - else: - raise - except (socket.timeout, socket.gaierror): - raise - except socket.error as e: - socket_err = e - if self.debuglevel > 0: - print("connect fail: (%s, %s)" % (self.host, self.port)) - if use_proxy: - print( - "proxy: %s" - % str((proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers,)) - ) - if self.sock: - self.sock.close() - self.sock = None - continue - break - if not self.sock: - raise socket_err or socket.error("getaddrinfo returns an empty list") - - -SCHEME_TO_CONNECTION = { - "http": HTTPConnectionWithTimeout, - "https": HTTPSConnectionWithTimeout, -} - - -def _new_fixed_fetch(validate_certificate): - def fixed_fetch( - url, payload=None, method="GET", headers={}, allow_truncated=False, follow_redirects=True, deadline=None, - ): - return fetch( - url, - payload=payload, - method=method, - headers=headers, - allow_truncated=allow_truncated, - follow_redirects=follow_redirects, - deadline=deadline, - validate_certificate=validate_certificate, - ) - - return fixed_fetch - - -class AppEngineHttpConnection(httplib.HTTPConnection): - """Use httplib on App Engine, but compensate for its weirdness. - - The parameters key_file, cert_file, proxy_info, ca_certs, - disable_ssl_certificate_validation, and ssl_version are all dropped on - the ground. - """ - - def __init__( - self, - host, - port=None, - key_file=None, - cert_file=None, - strict=None, - timeout=None, - proxy_info=None, - ca_certs=None, - disable_ssl_certificate_validation=False, - ssl_version=None, - ): - httplib.HTTPConnection.__init__(self, host, port=port, strict=strict, timeout=timeout) - - -class AppEngineHttpsConnection(httplib.HTTPSConnection): - """Same as AppEngineHttpConnection, but for HTTPS URIs. - - The parameters proxy_info, ca_certs, disable_ssl_certificate_validation, - and ssl_version are all dropped on the ground. - """ - - def __init__( - self, - host, - port=None, - key_file=None, - cert_file=None, - strict=None, - timeout=None, - proxy_info=None, - ca_certs=None, - disable_ssl_certificate_validation=False, - ssl_version=None, - key_password=None, - ): - if key_password: - raise NotSupportedOnThisPlatform("Certificate with password is not supported.") - httplib.HTTPSConnection.__init__( - self, host, port=port, key_file=key_file, cert_file=cert_file, strict=strict, timeout=timeout, - ) - self._fetch = _new_fixed_fetch(not disable_ssl_certificate_validation) - - -# Use a different connection object for Google App Engine Standard Environment. -def is_gae_instance(): - server_software = os.environ.get("SERVER_SOFTWARE", "") - if ( - server_software.startswith("Google App Engine/") - or server_software.startswith("Development/") - or server_software.startswith("testutil/") - ): - return True - return False - - -try: - if not is_gae_instance(): - raise NotRunningAppEngineEnvironment() - - from google.appengine.api import apiproxy_stub_map - - if apiproxy_stub_map.apiproxy.GetStub("urlfetch") is None: - raise ImportError - - from google.appengine.api.urlfetch import fetch - - # Update the connection classes to use the Googel App Engine specific ones. - SCHEME_TO_CONNECTION = { - "http": AppEngineHttpConnection, - "https": AppEngineHttpsConnection, - } -except (ImportError, NotRunningAppEngineEnvironment): - pass - - -class Http(object): - """An HTTP client that handles: - - - all methods - - caching - - ETags - - compression, - - HTTPS - - Basic - - Digest - - WSSE - - and more. - """ - - def __init__( - self, - cache=None, - timeout=None, - proxy_info=proxy_info_from_environment, - ca_certs=None, - disable_ssl_certificate_validation=False, - ssl_version=None, - ): - """If 'cache' is a string then it is used as a directory name for - a disk cache. Otherwise it must be an object that supports the - same interface as FileCache. - - All timeouts are in seconds. If None is passed for timeout - then Python's default timeout for sockets will be used. See - for example the docs of socket.setdefaulttimeout(): - http://docs.python.org/library/socket.html#socket.setdefaulttimeout - - `proxy_info` may be: - - a callable that takes the http scheme ('http' or 'https') and - returns a ProxyInfo instance per request. By default, uses - proxy_nfo_from_environment. - - a ProxyInfo instance (static proxy config). - - None (proxy disabled). - - ca_certs is the path of a file containing root CA certificates for SSL - server certificate validation. By default, a CA cert file bundled with - httplib2 is used. - - If disable_ssl_certificate_validation is true, SSL cert validation will - not be performed. - - By default, ssl.PROTOCOL_SSLv23 will be used for the ssl version. - """ - self.proxy_info = proxy_info - self.ca_certs = ca_certs - self.disable_ssl_certificate_validation = disable_ssl_certificate_validation - self.ssl_version = ssl_version - - # Map domain name to an httplib connection - self.connections = {} - # The location of the cache, for now a directory - # where cached responses are held. - if cache and isinstance(cache, basestring): - self.cache = FileCache(cache) - else: - self.cache = cache - - # Name/password - self.credentials = Credentials() - - # Key/cert - self.certificates = KeyCerts() - - # authorization objects - self.authorizations = [] - - # If set to False then no redirects are followed, even safe ones. - self.follow_redirects = True - - self.redirect_codes = REDIRECT_CODES - - # Which HTTP methods do we apply optimistic concurrency to, i.e. - # which methods get an "if-match:" etag header added to them. - self.optimistic_concurrency_methods = ["PUT", "PATCH"] - - self.safe_methods = list(SAFE_METHODS) - - # If 'follow_redirects' is True, and this is set to True then - # all redirecs are followed, including unsafe ones. - self.follow_all_redirects = False - - self.ignore_etag = False - - self.force_exception_to_status_code = False - - self.timeout = timeout - - # Keep Authorization: headers on a redirect. - self.forward_authorization_headers = False - - def close(self): - """Close persistent connections, clear sensitive data. - Not thread-safe, requires external synchronization against concurrent requests. - """ - existing, self.connections = self.connections, {} - for _, c in existing.iteritems(): - c.close() - self.certificates.clear() - self.clear_credentials() - - def __getstate__(self): - state_dict = copy.copy(self.__dict__) - # In case request is augmented by some foreign object such as - # credentials which handle auth - if "request" in state_dict: - del state_dict["request"] - if "connections" in state_dict: - del state_dict["connections"] - return state_dict - - def __setstate__(self, state): - self.__dict__.update(state) - self.connections = {} - - def _auth_from_challenge(self, host, request_uri, headers, response, content): - """A generator that creates Authorization objects - that can be applied to requests. - """ - challenges = auth._parse_www_authenticate(response, "www-authenticate") - for cred in self.credentials.iter(host): - for scheme in AUTH_SCHEME_ORDER: - if scheme in challenges: - yield AUTH_SCHEME_CLASSES[scheme](cred, host, request_uri, headers, response, content, self) - - def add_credentials(self, name, password, domain=""): - """Add a name and password that will be used - any time a request requires authentication.""" - self.credentials.add(name, password, domain) - - def add_certificate(self, key, cert, domain, password=None): - """Add a key and cert that will be used - any time a request requires authentication.""" - self.certificates.add(key, cert, domain, password) - - def clear_credentials(self): - """Remove all the names and passwords - that are used for authentication""" - self.credentials.clear() - self.authorizations = [] - - def _conn_request(self, conn, request_uri, method, body, headers): - i = 0 - seen_bad_status_line = False - while i < RETRIES: - i += 1 - try: - if hasattr(conn, "sock") and conn.sock is None: - conn.connect() - conn.request(method, request_uri, body, headers) - except socket.timeout: - raise - except socket.gaierror: - conn.close() - raise ServerNotFoundError("Unable to find the server at %s" % conn.host) - except ssl_SSLError: - conn.close() - raise - except socket.error as e: - err = 0 - if hasattr(e, "args"): - err = getattr(e, "args")[0] - else: - err = e.errno - if err == errno.ECONNREFUSED: # Connection refused - raise - if err in (errno.ENETUNREACH, errno.EADDRNOTAVAIL) and i < RETRIES: - continue # retry on potentially transient socket errors - except httplib.HTTPException: - # Just because the server closed the connection doesn't apparently mean - # that the server didn't send a response. - if hasattr(conn, "sock") and conn.sock is None: - if i < RETRIES - 1: - conn.close() - conn.connect() - continue - else: - conn.close() - raise - if i < RETRIES - 1: - conn.close() - conn.connect() - continue - try: - response = conn.getresponse() - except httplib.BadStatusLine: - # If we get a BadStatusLine on the first try then that means - # the connection just went stale, so retry regardless of the - # number of RETRIES set. - if not seen_bad_status_line and i == 1: - i = 0 - seen_bad_status_line = True - conn.close() - conn.connect() - continue - else: - conn.close() - raise - except (socket.error, httplib.HTTPException): - if i < RETRIES - 1: - conn.close() - conn.connect() - continue - else: - conn.close() - raise - else: - content = "" - if method == "HEAD": - conn.close() - else: - content = response.read() - response = Response(response) - if method != "HEAD": - content = _decompressContent(response, content) - break - return (response, content) - - def _request( - self, conn, host, absolute_uri, request_uri, method, body, headers, redirections, cachekey, - ): - """Do the actual request using the connection object - and also follow one level of redirects if necessary""" - - auths = [(auth.depth(request_uri), auth) for auth in self.authorizations if auth.inscope(host, request_uri)] - auth = auths and sorted(auths)[0][1] or None - if auth: - auth.request(method, request_uri, headers, body) - - (response, content) = self._conn_request(conn, request_uri, method, body, headers) - - if auth: - if auth.response(response, body): - auth.request(method, request_uri, headers, body) - (response, content) = self._conn_request(conn, request_uri, method, body, headers) - response._stale_digest = 1 - - if response.status == 401: - for authorization in self._auth_from_challenge(host, request_uri, headers, response, content): - authorization.request(method, request_uri, headers, body) - (response, content) = self._conn_request(conn, request_uri, method, body, headers) - if response.status != 401: - self.authorizations.append(authorization) - authorization.response(response, body) - break - - if self.follow_all_redirects or method in self.safe_methods or response.status in (303, 308): - if self.follow_redirects and response.status in self.redirect_codes: - # Pick out the location header and basically start from the beginning - # remembering first to strip the ETag header and decrement our 'depth' - if redirections: - if "location" not in response and response.status != 300: - raise RedirectMissingLocation( - _("Redirected but the response is missing a Location: header."), response, content, - ) - # Fix-up relative redirects (which violate an RFC 2616 MUST) - if "location" in response: - location = response["location"] - (scheme, authority, path, query, fragment) = parse_uri(location) - if authority == None: - response["location"] = urlparse.urljoin(absolute_uri, location) - if response.status == 308 or (response.status == 301 and method in self.safe_methods): - response["-x-permanent-redirect-url"] = response["location"] - if "content-location" not in response: - response["content-location"] = absolute_uri - _updateCache(headers, response, content, self.cache, cachekey) - if "if-none-match" in headers: - del headers["if-none-match"] - if "if-modified-since" in headers: - del headers["if-modified-since"] - if "authorization" in headers and not self.forward_authorization_headers: - del headers["authorization"] - if "location" in response: - location = response["location"] - old_response = copy.deepcopy(response) - if "content-location" not in old_response: - old_response["content-location"] = absolute_uri - redirect_method = method - if response.status in [302, 303]: - redirect_method = "GET" - body = None - (response, content) = self.request( - location, method=redirect_method, body=body, headers=headers, redirections=redirections - 1, - ) - response.previous = old_response - else: - raise RedirectLimit( - "Redirected more times than rediection_limit allows.", response, content, - ) - elif response.status in [200, 203] and method in self.safe_methods: - # Don't cache 206's since we aren't going to handle byte range requests - if "content-location" not in response: - response["content-location"] = absolute_uri - _updateCache(headers, response, content, self.cache, cachekey) - - return (response, content) - - def _normalize_headers(self, headers): - return _normalize_headers(headers) - - # Need to catch and rebrand some exceptions - # Then need to optionally turn all exceptions into status codes - # including all socket.* and httplib.* exceptions. - - def request( - self, uri, method="GET", body=None, headers=None, redirections=DEFAULT_MAX_REDIRECTS, connection_type=None, - ): - """ Performs a single HTTP request. - - The 'uri' is the URI of the HTTP resource and can begin with either - 'http' or 'https'. The value of 'uri' must be an absolute URI. - - The 'method' is the HTTP method to perform, such as GET, POST, DELETE, - etc. There is no restriction on the methods allowed. - - The 'body' is the entity body to be sent with the request. It is a - string object. - - Any extra headers that are to be sent with the request should be - provided in the 'headers' dictionary. - - The maximum number of redirect to follow before raising an - exception is 'redirections. The default is 5. - - The return value is a tuple of (response, content), the first - being and instance of the 'Response' class, the second being - a string that contains the response entity body. - """ - conn_key = "" - - try: - if headers is None: - headers = {} - else: - headers = self._normalize_headers(headers) - - if "user-agent" not in headers: - headers["user-agent"] = "Python-httplib2/%s (gzip)" % __version__ - - uri = iri2uri(uri) - # Prevent CWE-75 space injection to manipulate request via part of uri. - # Prevent CWE-93 CRLF injection to modify headers via part of uri. - uri = uri.replace(" ", "%20").replace("\r", "%0D").replace("\n", "%0A") - - (scheme, authority, request_uri, defrag_uri) = urlnorm(uri) - - proxy_info = self._get_proxy_info(scheme, authority) - - conn_key = scheme + ":" + authority - conn = self.connections.get(conn_key) - if conn is None: - if not connection_type: - connection_type = SCHEME_TO_CONNECTION[scheme] - certs = list(self.certificates.iter(authority)) - if scheme == "https": - if certs: - conn = self.connections[conn_key] = connection_type( - authority, - key_file=certs[0][0], - cert_file=certs[0][1], - timeout=self.timeout, - proxy_info=proxy_info, - ca_certs=self.ca_certs, - disable_ssl_certificate_validation=self.disable_ssl_certificate_validation, - ssl_version=self.ssl_version, - key_password=certs[0][2], - ) - else: - conn = self.connections[conn_key] = connection_type( - authority, - timeout=self.timeout, - proxy_info=proxy_info, - ca_certs=self.ca_certs, - disable_ssl_certificate_validation=self.disable_ssl_certificate_validation, - ssl_version=self.ssl_version, - ) - else: - conn = self.connections[conn_key] = connection_type( - authority, timeout=self.timeout, proxy_info=proxy_info - ) - conn.set_debuglevel(debuglevel) - - if "range" not in headers and "accept-encoding" not in headers: - headers["accept-encoding"] = "gzip, deflate" - - info = email.Message.Message() - cachekey = None - cached_value = None - if self.cache: - cachekey = defrag_uri.encode("utf-8") - cached_value = self.cache.get(cachekey) - if cached_value: - # info = email.message_from_string(cached_value) - # - # Need to replace the line above with the kludge below - # to fix the non-existent bug not fixed in this - # bug report: http://mail.python.org/pipermail/python-bugs-list/2005-September/030289.html - try: - info, content = cached_value.split("\r\n\r\n", 1) - feedparser = email.FeedParser.FeedParser() - feedparser.feed(info) - info = feedparser.close() - feedparser._parse = None - except (IndexError, ValueError): - self.cache.delete(cachekey) - cachekey = None - cached_value = None - - if ( - method in self.optimistic_concurrency_methods - and self.cache - and "etag" in info - and not self.ignore_etag - and "if-match" not in headers - ): - # http://www.w3.org/1999/04/Editing/ - headers["if-match"] = info["etag"] - - # https://tools.ietf.org/html/rfc7234 - # A cache MUST invalidate the effective Request URI as well as [...] Location and Content-Location - # when a non-error status code is received in response to an unsafe request method. - if self.cache and cachekey and method not in self.safe_methods: - self.cache.delete(cachekey) - - # Check the vary header in the cache to see if this request - # matches what varies in the cache. - if method in self.safe_methods and "vary" in info: - vary = info["vary"] - vary_headers = vary.lower().replace(" ", "").split(",") - for header in vary_headers: - key = "-varied-%s" % header - value = info[key] - if headers.get(header, None) != value: - cached_value = None - break - - if ( - self.cache - and cached_value - and (method in self.safe_methods or info["status"] == "308") - and "range" not in headers - ): - redirect_method = method - if info["status"] not in ("307", "308"): - redirect_method = "GET" - if "-x-permanent-redirect-url" in info: - # Should cached permanent redirects be counted in our redirection count? For now, yes. - if redirections <= 0: - raise RedirectLimit( - "Redirected more times than rediection_limit allows.", {}, "", - ) - (response, new_content) = self.request( - info["-x-permanent-redirect-url"], - method=redirect_method, - headers=headers, - redirections=redirections - 1, - ) - response.previous = Response(info) - response.previous.fromcache = True - else: - # Determine our course of action: - # Is the cached entry fresh or stale? - # Has the client requested a non-cached response? - # - # There seems to be three possible answers: - # 1. [FRESH] Return the cache entry w/o doing a GET - # 2. [STALE] Do the GET (but add in cache validators if available) - # 3. [TRANSPARENT] Do a GET w/o any cache validators (Cache-Control: no-cache) on the request - entry_disposition = _entry_disposition(info, headers) - - if entry_disposition == "FRESH": - if not cached_value: - info["status"] = "504" - content = "" - response = Response(info) - if cached_value: - response.fromcache = True - return (response, content) - - if entry_disposition == "STALE": - if "etag" in info and not self.ignore_etag and not "if-none-match" in headers: - headers["if-none-match"] = info["etag"] - if "last-modified" in info and not "last-modified" in headers: - headers["if-modified-since"] = info["last-modified"] - elif entry_disposition == "TRANSPARENT": - pass - - (response, new_content) = self._request( - conn, authority, uri, request_uri, method, body, headers, redirections, cachekey, - ) - - if response.status == 304 and method == "GET": - # Rewrite the cache entry with the new end-to-end headers - # Take all headers that are in response - # and overwrite their values in info. - # unless they are hop-by-hop, or are listed in the connection header. - - for key in _get_end2end_headers(response): - info[key] = response[key] - merged_response = Response(info) - if hasattr(response, "_stale_digest"): - merged_response._stale_digest = response._stale_digest - _updateCache(headers, merged_response, content, self.cache, cachekey) - response = merged_response - response.status = 200 - response.fromcache = True - - elif response.status == 200: - content = new_content - else: - self.cache.delete(cachekey) - content = new_content - else: - cc = _parse_cache_control(headers) - if "only-if-cached" in cc: - info["status"] = "504" - response = Response(info) - content = "" - else: - (response, content) = self._request( - conn, authority, uri, request_uri, method, body, headers, redirections, cachekey, - ) - except Exception as e: - is_timeout = isinstance(e, socket.timeout) - if is_timeout: - conn = self.connections.pop(conn_key, None) - if conn: - conn.close() - - if self.force_exception_to_status_code: - if isinstance(e, HttpLib2ErrorWithResponse): - response = e.response - content = e.content - response.status = 500 - response.reason = str(e) - elif is_timeout: - content = "Request Timeout" - response = Response({"content-type": "text/plain", "status": "408", "content-length": len(content),}) - response.reason = "Request Timeout" - else: - content = str(e) - response = Response({"content-type": "text/plain", "status": "400", "content-length": len(content),}) - response.reason = "Bad Request" - else: - raise - - return (response, content) - - def _get_proxy_info(self, scheme, authority): - """Return a ProxyInfo instance (or None) based on the scheme - and authority. - """ - hostname, port = urllib.splitport(authority) - proxy_info = self.proxy_info - if callable(proxy_info): - proxy_info = proxy_info(scheme) - - if hasattr(proxy_info, "applies_to") and not proxy_info.applies_to(hostname): - proxy_info = None - return proxy_info - - -class Response(dict): - """An object more like email.Message than httplib.HTTPResponse.""" - - """Is this response from our local cache""" - fromcache = False - """HTTP protocol version used by server. - - 10 for HTTP/1.0, 11 for HTTP/1.1. - """ - version = 11 - - "Status code returned by server. " - status = 200 - """Reason phrase returned by server.""" - reason = "Ok" - - previous = None - - def __init__(self, info): - # info is either an email.Message or - # an httplib.HTTPResponse object. - if isinstance(info, httplib.HTTPResponse): - for key, value in info.getheaders(): - self[key.lower()] = value - self.status = info.status - self["status"] = str(self.status) - self.reason = info.reason - self.version = info.version - elif isinstance(info, email.Message.Message): - for key, value in info.items(): - self[key.lower()] = value - self.status = int(self["status"]) - else: - for key, value in info.iteritems(): - self[key.lower()] = value - self.status = int(self.get("status", self.status)) - self.reason = self.get("reason", self.reason) - - def __getattr__(self, name): - if name == "dict": - return self - else: - raise AttributeError(name) diff --git a/shotgun_api3/lib/httplib2/python2/auth.py b/shotgun_api3/lib/httplib2/python2/auth.py deleted file mode 100644 index 7a1c2a7e8..000000000 --- a/shotgun_api3/lib/httplib2/python2/auth.py +++ /dev/null @@ -1,63 +0,0 @@ -import base64 -import re - -from ... import pyparsing as pp - -from .error import * - -UNQUOTE_PAIRS = re.compile(r"\\(.)") -unquote = lambda s, l, t: UNQUOTE_PAIRS.sub(r"\1", t[0][1:-1]) - -# https://tools.ietf.org/html/rfc7235#section-1.2 -# https://tools.ietf.org/html/rfc7235#appendix-B -tchar = "!#$%&'*+-.^_`|~" + pp.nums + pp.alphas -token = pp.Word(tchar).setName("token") -token68 = pp.Combine(pp.Word("-._~+/" + pp.nums + pp.alphas) + pp.Optional(pp.Word("=").leaveWhitespace())).setName( - "token68" -) - -quoted_string = pp.dblQuotedString.copy().setName("quoted-string").setParseAction(unquote) -auth_param_name = token.copy().setName("auth-param-name").addParseAction(pp.downcaseTokens) -auth_param = auth_param_name + pp.Suppress("=") + (quoted_string | token) -params = pp.Dict(pp.delimitedList(pp.Group(auth_param))) - -scheme = token("scheme") -challenge = scheme + (params("params") | token68("token")) - -authentication_info = params.copy() -www_authenticate = pp.delimitedList(pp.Group(challenge)) - - -def _parse_authentication_info(headers, headername="authentication-info"): - """https://tools.ietf.org/html/rfc7615 - """ - header = headers.get(headername, "").strip() - if not header: - return {} - try: - parsed = authentication_info.parseString(header) - except pp.ParseException as ex: - # print(ex.explain(ex)) - raise MalformedHeader(headername) - - return parsed.asDict() - - -def _parse_www_authenticate(headers, headername="www-authenticate"): - """Returns a dictionary of dictionaries, one dict per auth_scheme.""" - header = headers.get(headername, "").strip() - if not header: - return {} - try: - parsed = www_authenticate.parseString(header) - except pp.ParseException as ex: - # print(ex.explain(ex)) - raise MalformedHeader(headername) - - retval = { - challenge["scheme"].lower(): challenge["params"].asDict() - if "params" in challenge - else {"token": challenge.get("token")} - for challenge in parsed - } - return retval diff --git a/shotgun_api3/lib/httplib2/python2/cacerts.txt b/shotgun_api3/lib/httplib2/python2/cacerts.txt deleted file mode 100644 index 78a444c43..000000000 --- a/shotgun_api3/lib/httplib2/python2/cacerts.txt +++ /dev/null @@ -1,2225 +0,0 @@ -# Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Label: "GTE CyberTrust Global Root" -# Serial: 421 -# MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db -# SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74 -# SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36 ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -# Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Server CA" -# Serial: 1 -# MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d -# SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c -# SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9 ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -# Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Premium Server CA" -# Serial: 1 -# MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a -# SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a -# SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72 ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -# Issuer: O=Equifax OU=Equifax Secure Certificate Authority -# Subject: O=Equifax OU=Equifax Secure Certificate Authority -# Label: "Equifax Secure CA" -# Serial: 903804111 -# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4 -# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a -# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Label: "Verisign Class 3 Public Primary Certification Authority - G2" -# Serial: 167285380242319648451154478808036881606 -# MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9 -# SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f -# SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Label: "ValiCert Class 1 VA" -# Serial: 1 -# MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb -# SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e -# SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04 ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Label: "ValiCert Class 2 VA" -# Serial: 1 -# MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87 -# SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6 -# SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Label: "RSA Root Certificate 1" -# Serial: 1 -# MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72 -# SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb -# SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 3 Public Primary Certification Authority - G3" -# Serial: 206684696279472310254277870180966723415 -# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 -# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 -# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 4 Public Primary Certification Authority - G3" -# Serial: 314531972711909413743075096039378935511 -# MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df -# SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d -# SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Secure Server CA" -# Serial: 927650371 -# MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee -# SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39 -# SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50 ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946059622 -# MD5 Fingerprint: ba:21:ea:20:d6:dd:db:8f:c1:57:8b:40:ad:a1:fc:fc -# SHA1 Fingerprint: 80:1d:62:d0:7b:44:9d:5c:5c:03:5c:98:ea:61:fa:44:3c:2a:58:fe -# SHA256 Fingerprint: d1:c3:39:ea:27:84:eb:87:0f:93:4f:c5:63:4e:4a:a9:ad:55:05:01:64:01:f2:64:65:d3:7a:57:46:63:35:9f ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy -vUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure Global eBusiness CA" -# Serial: 1 -# MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc -# SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45 -# SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07 ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure eBusiness CA 1" -# Serial: 4 -# MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d -# SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41 -# SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73 ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -# Issuer: O=Equifax Secure OU=Equifax Secure eBusiness CA-2 -# Subject: O=Equifax Secure OU=Equifax Secure eBusiness CA-2 -# Label: "Equifax Secure eBusiness CA 2" -# Serial: 930140085 -# MD5 Fingerprint: aa:bf:bf:64:97:da:98:1d:6f:c6:08:3a:95:70:33:ca -# SHA1 Fingerprint: 39:4f:f6:85:0b:06:be:52:e5:18:56:cc:10:e1:80:e8:82:b3:85:cc -# SHA256 Fingerprint: 2f:27:4e:48:ab:a4:ac:7b:76:59:33:10:17:75:50:6d:c3:0e:e3:8e:f6:ac:d5:c0:49:32:cf:e0:41:23:42:20 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Low-Value Services Root" -# Serial: 1 -# MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc -# SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d -# SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7 ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Label: "AddTrust External Root" -# Serial: 1 -# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f -# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 -# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Public Services Root" -# Serial: 1 -# MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f -# SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5 -# SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Qualified Certificates Root" -# Serial: 1 -# MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb -# SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf -# SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16 ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. -# Label: "GeoTrust Global CA" -# Serial: 144470 -# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 -# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 -# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Global CA 2" -# Serial: 1 -# MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9 -# SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d -# SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85 ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Label: "GeoTrust Universal CA" -# Serial: 1 -# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 -# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 -# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Universal CA 2" -# Serial: 1 -# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 -# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 -# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -# Issuer: CN=America Online Root Certification Authority 1 O=America Online Inc. -# Subject: CN=America Online Root Certification Authority 1 O=America Online Inc. -# Label: "America Online Root Certification Authority 1" -# Serial: 1 -# MD5 Fingerprint: 14:f1:08:ad:9d:fa:64:e2:89:e7:1c:cf:a8:ad:7d:5e -# SHA1 Fingerprint: 39:21:c1:15:c1:5d:0e:ca:5c:cb:5b:c4:f0:7d:21:d8:05:0b:56:6a -# SHA256 Fingerprint: 77:40:73:12:c6:3a:15:3d:5b:c0:0b:4e:51:75:9c:df:da:c2:37:dc:2a:33:b6:79:46:e9:8e:9b:fa:68:0a:e3 ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -# Issuer: CN=America Online Root Certification Authority 2 O=America Online Inc. -# Subject: CN=America Online Root Certification Authority 2 O=America Online Inc. -# Label: "America Online Root Certification Authority 2" -# Serial: 1 -# MD5 Fingerprint: d6:ed:3c:ca:e2:66:0f:af:10:43:0d:77:9b:04:09:bf -# SHA1 Fingerprint: 85:b5:ff:67:9b:0c:79:96:1f:c8:6e:44:22:00:46:13:db:17:92:84 -# SHA256 Fingerprint: 7d:3b:46:5a:60:14:e5:26:c0:af:fc:ee:21:27:d2:31:17:27:ad:81:1c:26:84:2d:00:6a:f3:73:06:cc:80:bd ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw -RY8mkaKO/qk= ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=Secure Certificate Services O=Comodo CA Limited -# Subject: CN=Secure Certificate Services O=Comodo CA Limited -# Label: "Comodo Secure Services root" -# Serial: 1 -# MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd -# SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1 -# SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8 ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- - -# Issuer: CN=Trusted Certificate Services O=Comodo CA Limited -# Subject: CN=Trusted Certificate Services O=Comodo CA Limited -# Label: "Comodo Trusted Services root" -# Serial: 1 -# MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27 -# SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd -# SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -# Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN DATACorp SGC Root CA" -# Serial: 91374294542884689855167577680241077609 -# MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06 -# SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4 -# SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48 ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN USERFirst Hardware Root CA" -# Serial: 91374294542884704022267039221184531197 -# MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39 -# SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7 -# SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37 ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 1 -# MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16 -# SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f -# SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Label: "GeoTrust Primary Certification Authority" -# Serial: 32798226551256963324313806436981982369 -# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf -# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 -# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA" -# Serial: 69529181992039203566298953787712940909 -# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 -# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 -# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" -# Serial: 33037644167568058970164719475676101450 -# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c -# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 -# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA -# Subject: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA -# Label: "TC TrustCenter Class 2 CA II" -# Serial: 941389028203453866782103406992443 -# MD5 Fingerprint: ce:78:33:5c:59:78:01:6e:18:ea:b9:36:a0:b9:2e:23 -# SHA1 Fingerprint: ae:50:83:ed:7c:f4:5c:bc:8f:61:c6:21:fe:68:5d:79:42:21:15:6e -# SHA256 Fingerprint: e6:b8:f8:76:64:85:f8:07:ae:7f:8d:ac:16:70:46:1f:07:c0:a1:3e:ef:3a:1f:f7:17:53:8d:7a:ba:d3:91:b4 ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf -tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg -uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J -XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK -8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 -5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 -kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS -GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt -ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 -au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV -hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI -dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA -# Subject: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA -# Label: "TC TrustCenter Class 3 CA II" -# Serial: 1506523511417715638772220530020799 -# MD5 Fingerprint: 56:5f:aa:80:61:12:17:f6:67:21:e6:2b:6d:61:56:8e -# SHA1 Fingerprint: 80:25:ef:f4:6e:70:c8:d4:72:24:65:84:fe:40:3b:8a:8d:6a:db:f5 -# SHA256 Fingerprint: 8d:a0:84:fc:f9:9c:e0:77:22:f8:9b:32:05:93:98:06:fa:5c:b8:11:e1:c8:13:f6:a1:08:c7:d3:36:b3:40:8e ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW -Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q -Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 -1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq -ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 -Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX -XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN -irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 -TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 -g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB -95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj -S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Subject: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Label: "TC TrustCenter Universal CA I" -# Serial: 601024842042189035295619584734726 -# MD5 Fingerprint: 45:e1:a5:72:c5:a9:36:64:40:9e:f5:e4:58:84:67:8c -# SHA1 Fingerprint: 6b:2f:34:ad:89:58:be:62:fd:b0:6b:5c:ce:bb:9d:d9:4f:4e:39:f3 -# SHA256 Fingerprint: eb:f3:c0:2a:87:89:b1:fb:7d:51:19:95:d6:63:b7:29:06:d9:13:ce:0d:5e:10:56:8a:8a:77:e2:58:61:67:e7 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx -MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg -R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD -VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR -JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T -fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu -jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z -wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ -fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD -VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G -CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 -7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn -8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs -ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ -2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G3" -# Serial: 28809105769928564313984085209975885599 -# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 -# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd -# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G2" -# Serial: 71758320672825410020661621085256472406 -# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f -# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 -# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G3" -# Serial: 127614157056681299805556476275995414779 -# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 -# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 -# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G2" -# Serial: 80682863203381065782177908751794619243 -# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a -# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 -# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Universal Root Certification Authority" -# Serial: 85209574734084581917763752644031726877 -# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 -# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 -# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" -# Serial: 63143484348153506665311985501458640051 -# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 -# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a -# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Subject: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Label: "TC TrustCenter Universal CA III" -# Serial: 2010889993983507346460533407902964 -# MD5 Fingerprint: 9f:dd:db:ab:ff:8e:ff:45:21:5f:f0:6c:9d:8f:fe:2b -# SHA1 Fingerprint: 96:56:cd:7b:57:96:98:95:d0:e1:41:46:68:06:fb:b8:c6:11:06:87 -# SHA256 Fingerprint: 30:9b:4a:87:f6:ca:56:c9:31:69:aa:a9:9c:6d:98:88:54:d7:89:2b:d5:43:7e:2d:07:b2:9c:be:da:55:d3:5d ------BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy -MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl -ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm -BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF -5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv -DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v -zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT -yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj -dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh -MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI -4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz -dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY -aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G -DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH -LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 45 -# MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16 -# SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0 -# SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11 ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul -F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC -ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w -ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk -aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 -YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg -c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 -d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG -CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF -wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS -Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst -0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc -pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl -CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF -P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK -1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm -KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ -8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm -fyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Label: "StartCom Certification Authority G2" -# Serial: 59 -# MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64 -# SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17 -# SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95 ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 -OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG -A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ -JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD -vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo -D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ -Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW -RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK -HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN -nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM -0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i -UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 -Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg -TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL -BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX -UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl -6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK -9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ -HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI -wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY -XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l -IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo -hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr -so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US -# Subject: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US -# Serial: 33af1e6a711a9a0bb2864b11d09fae5 -# MD5 Fingerprint: E4:A6:8A:C8:54:AC:52:42:46:0A:FD:72:48:1B:2A:44 -# SHA1 Fingerprint: DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 -# SHA256 Fingerprint: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: /C=US/O=Internet Security Research Group/CN=ISRG Root X1 -# Subject: /C=US/O=Internet Security Research Group/CN=ISRG Root X1 -# Serial: 8210CFB0D240E3594463E0BB63828B00 -# SHA1 Fingerprint: CA:BD:2A:79:A1:07:6A:31:F2:1D:25:36:35:CB:03:9D:43:29:A5:E8 -# SHA256 Fingerprint: 96:BC:EC:06:26:49:76:F3:74:60:77:9A:CF:28:C5:A7:CF:E8:A3:C0:AA:E1:1A:8F:FC:EE:05:C0:BD:DF:08:C6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: /C=US/O=Internet Security Research Group/CN=ISRG Root X2 -# Subject: /C=US/O=Internet Security Research Group/CN=ISRG Root X2 -# Serial: 41D29DD172EAEEA780C12C6CE92F8752 -# SHA1 Fingerprint: BD:B1:B9:3C:D5:97:8D:45:C6:26:14:55:F8:DB:95:C7:5A:D1:53:AF -# SHA256 Fingerprint: 69:72:9B:8E:15:A8:6E:FC:17:7A:57:AF:B7:17:1D:FC:64:AD:D2:8C:2F:CA:8C:F1:50:7E:34:45:3C:CB:14:70 ------BEGIN CERTIFICATE----- -MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw -CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg -R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 -MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT -ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw -EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW -+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 -ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI -zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW -tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 -/q4AaOeMSQ+2b1tbFfLn ------END CERTIFICATE----- diff --git a/shotgun_api3/lib/httplib2/python2/certs.py b/shotgun_api3/lib/httplib2/python2/certs.py deleted file mode 100644 index 59d1ffc70..000000000 --- a/shotgun_api3/lib/httplib2/python2/certs.py +++ /dev/null @@ -1,42 +0,0 @@ -"""Utilities for certificate management.""" - -import os - -certifi_available = False -certifi_where = None -try: - from certifi import where as certifi_where - certifi_available = True -except ImportError: - pass - -custom_ca_locater_available = False -custom_ca_locater_where = None -try: - from ca_certs_locater import get as custom_ca_locater_where - custom_ca_locater_available = True -except ImportError: - pass - - -BUILTIN_CA_CERTS = os.path.join( - os.path.dirname(os.path.abspath(__file__)), "cacerts.txt" -) - - -def where(): - env = os.environ.get("HTTPLIB2_CA_CERTS") - if env is not None: - if os.path.isfile(env): - return env - else: - raise RuntimeError("Environment variable HTTPLIB2_CA_CERTS not a valid file") - if custom_ca_locater_available: - return custom_ca_locater_where() - if certifi_available: - return certifi_where() - return BUILTIN_CA_CERTS - - -if __name__ == "__main__": - print(where()) diff --git a/shotgun_api3/lib/httplib2/python2/error.py b/shotgun_api3/lib/httplib2/python2/error.py deleted file mode 100644 index 0e68c12a8..000000000 --- a/shotgun_api3/lib/httplib2/python2/error.py +++ /dev/null @@ -1,48 +0,0 @@ -# All exceptions raised here derive from HttpLib2Error -class HttpLib2Error(Exception): - pass - - -# Some exceptions can be caught and optionally -# be turned back into responses. -class HttpLib2ErrorWithResponse(HttpLib2Error): - def __init__(self, desc, response, content): - self.response = response - self.content = content - HttpLib2Error.__init__(self, desc) - - -class RedirectMissingLocation(HttpLib2ErrorWithResponse): - pass - - -class RedirectLimit(HttpLib2ErrorWithResponse): - pass - - -class FailedToDecompressContent(HttpLib2ErrorWithResponse): - pass - - -class UnimplementedDigestAuthOptionError(HttpLib2ErrorWithResponse): - pass - - -class UnimplementedHmacDigestAuthOptionError(HttpLib2ErrorWithResponse): - pass - - -class MalformedHeader(HttpLib2Error): - pass - - -class RelativeURIError(HttpLib2Error): - pass - - -class ServerNotFoundError(HttpLib2Error): - pass - - -class ProxiesUnavailableError(HttpLib2Error): - pass diff --git a/shotgun_api3/lib/httplib2/python2/iri2uri.py b/shotgun_api3/lib/httplib2/python2/iri2uri.py deleted file mode 100644 index 0a978a784..000000000 --- a/shotgun_api3/lib/httplib2/python2/iri2uri.py +++ /dev/null @@ -1,123 +0,0 @@ -"""Converts an IRI to a URI.""" - -__author__ = "Joe Gregorio (joe@bitworking.org)" -__copyright__ = "Copyright 2006, Joe Gregorio" -__contributors__ = [] -__version__ = "1.0.0" -__license__ = "MIT" - -import urlparse - -# Convert an IRI to a URI following the rules in RFC 3987 -# -# The characters we need to enocde and escape are defined in the spec: -# -# iprivate = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD -# ucschar = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF -# / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD -# / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD -# / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD -# / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD -# / %xD0000-DFFFD / %xE1000-EFFFD - -escape_range = [ - (0xA0, 0xD7FF), - (0xE000, 0xF8FF), - (0xF900, 0xFDCF), - (0xFDF0, 0xFFEF), - (0x10000, 0x1FFFD), - (0x20000, 0x2FFFD), - (0x30000, 0x3FFFD), - (0x40000, 0x4FFFD), - (0x50000, 0x5FFFD), - (0x60000, 0x6FFFD), - (0x70000, 0x7FFFD), - (0x80000, 0x8FFFD), - (0x90000, 0x9FFFD), - (0xA0000, 0xAFFFD), - (0xB0000, 0xBFFFD), - (0xC0000, 0xCFFFD), - (0xD0000, 0xDFFFD), - (0xE1000, 0xEFFFD), - (0xF0000, 0xFFFFD), - (0x100000, 0x10FFFD), -] - - -def encode(c): - retval = c - i = ord(c) - for low, high in escape_range: - if i < low: - break - if i >= low and i <= high: - retval = "".join(["%%%2X" % ord(o) for o in c.encode("utf-8")]) - break - return retval - - -def iri2uri(uri): - """Convert an IRI to a URI. Note that IRIs must be - passed in a unicode strings. That is, do not utf-8 encode - the IRI before passing it into the function.""" - if isinstance(uri, unicode): - (scheme, authority, path, query, fragment) = urlparse.urlsplit(uri) - authority = authority.encode("idna") - # For each character in 'ucschar' or 'iprivate' - # 1. encode as utf-8 - # 2. then %-encode each octet of that utf-8 - uri = urlparse.urlunsplit((scheme, authority, path, query, fragment)) - uri = "".join([encode(c) for c in uri]) - return uri - - -if __name__ == "__main__": - import unittest - - class Test(unittest.TestCase): - def test_uris(self): - """Test that URIs are invariant under the transformation.""" - invariant = [ - u"ftp://ftp.is.co.za/rfc/rfc1808.txt", - u"http://www.ietf.org/rfc/rfc2396.txt", - u"ldap://[2001:db8::7]/c=GB?objectClass?one", - u"mailto:John.Doe@example.com", - u"news:comp.infosystems.www.servers.unix", - u"tel:+1-816-555-1212", - u"telnet://192.0.2.16:80/", - u"urn:oasis:names:specification:docbook:dtd:xml:4.1.2", - ] - for uri in invariant: - self.assertEqual(uri, iri2uri(uri)) - - def test_iri(self): - """Test that the right type of escaping is done for each part of the URI.""" - self.assertEqual( - "http://xn--o3h.com/%E2%98%84", - iri2uri(u"http://\N{COMET}.com/\N{COMET}"), - ) - self.assertEqual( - "http://bitworking.org/?fred=%E2%98%84", - iri2uri(u"http://bitworking.org/?fred=\N{COMET}"), - ) - self.assertEqual( - "http://bitworking.org/#%E2%98%84", - iri2uri(u"http://bitworking.org/#\N{COMET}"), - ) - self.assertEqual("#%E2%98%84", iri2uri(u"#\N{COMET}")) - self.assertEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri(u"/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}"), - ) - self.assertEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri(iri2uri(u"/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}")), - ) - self.assertNotEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri( - u"/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}".encode("utf-8") - ), - ) - - unittest.main() diff --git a/shotgun_api3/lib/httplib2/python2/socks.py b/shotgun_api3/lib/httplib2/python2/socks.py deleted file mode 100644 index 71eb4ebf9..000000000 --- a/shotgun_api3/lib/httplib2/python2/socks.py +++ /dev/null @@ -1,518 +0,0 @@ -"""SocksiPy - Python SOCKS module. - -Version 1.00 - -Copyright 2006 Dan-Haim. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of Dan Haim nor the names of his contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY DAN HAIM "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL DAN HAIM OR HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMANGE. - -This module provides a standard socket-like interface for Python -for tunneling connections through SOCKS proxies. - -Minor modifications made by Christopher Gilbert (http://motomastyle.com/) for -use in PyLoris (http://pyloris.sourceforge.net/). - -Minor modifications made by Mario Vilas (http://breakingcode.wordpress.com/) -mainly to merge bug fixes found in Sourceforge. -""" - -import base64 -import socket -import struct -import sys - -if getattr(socket, "socket", None) is None: - raise ImportError("socket.socket missing, proxy support unusable") - -PROXY_TYPE_SOCKS4 = 1 -PROXY_TYPE_SOCKS5 = 2 -PROXY_TYPE_HTTP = 3 -PROXY_TYPE_HTTP_NO_TUNNEL = 4 - -_defaultproxy = None -_orgsocket = socket.socket - - -class ProxyError(Exception): - pass - - -class GeneralProxyError(ProxyError): - pass - - -class Socks5AuthError(ProxyError): - pass - - -class Socks5Error(ProxyError): - pass - - -class Socks4Error(ProxyError): - pass - - -class HTTPError(ProxyError): - pass - - -_generalerrors = ( - "success", - "invalid data", - "not connected", - "not available", - "bad proxy type", - "bad input", -) - -_socks5errors = ( - "succeeded", - "general SOCKS server failure", - "connection not allowed by ruleset", - "Network unreachable", - "Host unreachable", - "Connection refused", - "TTL expired", - "Command not supported", - "Address type not supported", - "Unknown error", -) - -_socks5autherrors = ( - "succeeded", - "authentication is required", - "all offered authentication methods were rejected", - "unknown username or invalid password", - "unknown error", -) - -_socks4errors = ( - "request granted", - "request rejected or failed", - "request rejected because SOCKS server cannot connect to identd on the client", - "request rejected because the client program and identd report different " - "user-ids", - "unknown error", -) - - -def setdefaultproxy( - proxytype=None, addr=None, port=None, rdns=True, username=None, password=None -): - """setdefaultproxy(proxytype, addr[, port[, rdns[, username[, password]]]]) - Sets a default proxy which all further socksocket objects will use, - unless explicitly changed. - """ - global _defaultproxy - _defaultproxy = (proxytype, addr, port, rdns, username, password) - - -def wrapmodule(module): - """wrapmodule(module) - - Attempts to replace a module's socket library with a SOCKS socket. Must set - a default proxy using setdefaultproxy(...) first. - This will only work on modules that import socket directly into the - namespace; - most of the Python Standard Library falls into this category. - """ - if _defaultproxy != None: - module.socket.socket = socksocket - else: - raise GeneralProxyError((4, "no proxy specified")) - - -class socksocket(socket.socket): - """socksocket([family[, type[, proto]]]) -> socket object - Open a SOCKS enabled socket. The parameters are the same as - those of the standard socket init. In order for SOCKS to work, - you must specify family=AF_INET, type=SOCK_STREAM and proto=0. - """ - - def __init__( - self, family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0, _sock=None - ): - _orgsocket.__init__(self, family, type, proto, _sock) - if _defaultproxy != None: - self.__proxy = _defaultproxy - else: - self.__proxy = (None, None, None, None, None, None) - self.__proxysockname = None - self.__proxypeername = None - self.__httptunnel = True - - def __recvall(self, count): - """__recvall(count) -> data - Receive EXACTLY the number of bytes requested from the socket. - Blocks until the required number of bytes have been received. - """ - data = self.recv(count) - while len(data) < count: - d = self.recv(count - len(data)) - if not d: - raise GeneralProxyError((0, "connection closed unexpectedly")) - data = data + d - return data - - def sendall(self, content, *args): - """ override socket.socket.sendall method to rewrite the header - for non-tunneling proxies if needed - """ - if not self.__httptunnel: - content = self.__rewriteproxy(content) - return super(socksocket, self).sendall(content, *args) - - def __rewriteproxy(self, header): - """ rewrite HTTP request headers to support non-tunneling proxies - (i.e. those which do not support the CONNECT method). - This only works for HTTP (not HTTPS) since HTTPS requires tunneling. - """ - host, endpt = None, None - hdrs = header.split("\r\n") - for hdr in hdrs: - if hdr.lower().startswith("host:"): - host = hdr - elif hdr.lower().startswith("get") or hdr.lower().startswith("post"): - endpt = hdr - if host and endpt: - hdrs.remove(host) - hdrs.remove(endpt) - host = host.split(" ")[1] - endpt = endpt.split(" ") - if self.__proxy[4] != None and self.__proxy[5] != None: - hdrs.insert(0, self.__getauthheader()) - hdrs.insert(0, "Host: %s" % host) - hdrs.insert(0, "%s http://%s%s %s" % (endpt[0], host, endpt[1], endpt[2])) - return "\r\n".join(hdrs) - - def __getauthheader(self): - auth = self.__proxy[4] + ":" + self.__proxy[5] - return "Proxy-Authorization: Basic " + base64.b64encode(auth) - - def setproxy( - self, - proxytype=None, - addr=None, - port=None, - rdns=True, - username=None, - password=None, - headers=None, - ): - """setproxy(proxytype, addr[, port[, rdns[, username[, password]]]]) - - Sets the proxy to be used. - proxytype - The type of the proxy to be used. Three types - are supported: PROXY_TYPE_SOCKS4 (including socks4a), - PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP - addr - The address of the server (IP or DNS). - port - The port of the server. Defaults to 1080 for SOCKS - servers and 8080 for HTTP proxy servers. - rdns - Should DNS queries be preformed on the remote side - (rather than the local side). The default is True. - Note: This has no effect with SOCKS4 servers. - username - Username to authenticate with to the server. - The default is no authentication. - password - Password to authenticate with to the server. - Only relevant when username is also provided. - headers - Additional or modified headers for the proxy connect - request. - """ - self.__proxy = ( - proxytype, - addr, - port, - rdns, - username.encode() if username else None, - password.encode() if password else None, - headers, - ) - - def __negotiatesocks5(self, destaddr, destport): - """__negotiatesocks5(self,destaddr,destport) - Negotiates a connection through a SOCKS5 server. - """ - # First we'll send the authentication packages we support. - if (self.__proxy[4] != None) and (self.__proxy[5] != None): - # The username/password details were supplied to the - # setproxy method so we support the USERNAME/PASSWORD - # authentication (in addition to the standard none). - self.sendall(struct.pack("BBBB", 0x05, 0x02, 0x00, 0x02)) - else: - # No username/password were entered, therefore we - # only support connections with no authentication. - self.sendall(struct.pack("BBB", 0x05, 0x01, 0x00)) - # We'll receive the server's response to determine which - # method was selected - chosenauth = self.__recvall(2) - if chosenauth[0:1] != chr(0x05).encode(): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - # Check the chosen authentication method - if chosenauth[1:2] == chr(0x00).encode(): - # No authentication is required - pass - elif chosenauth[1:2] == chr(0x02).encode(): - # Okay, we need to perform a basic username/password - # authentication. - self.sendall( - chr(0x01).encode() - + chr(len(self.__proxy[4])) - + self.__proxy[4] - + chr(len(self.__proxy[5])) - + self.__proxy[5] - ) - authstat = self.__recvall(2) - if authstat[0:1] != chr(0x01).encode(): - # Bad response - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if authstat[1:2] != chr(0x00).encode(): - # Authentication failed - self.close() - raise Socks5AuthError((3, _socks5autherrors[3])) - # Authentication succeeded - else: - # Reaching here is always bad - self.close() - if chosenauth[1] == chr(0xFF).encode(): - raise Socks5AuthError((2, _socks5autherrors[2])) - else: - raise GeneralProxyError((1, _generalerrors[1])) - # Now we can request the actual connection - req = struct.pack("BBB", 0x05, 0x01, 0x00) - # If the given destination address is an IP address, we'll - # use the IPv4 address request even if remote resolving was specified. - try: - ipaddr = socket.inet_aton(destaddr) - req = req + chr(0x01).encode() + ipaddr - except socket.error: - # Well it's not an IP number, so it's probably a DNS name. - if self.__proxy[3]: - # Resolve remotely - ipaddr = None - req = ( - req - + chr(0x03).encode() - + chr(len(destaddr)).encode() - + destaddr.encode() - ) - else: - # Resolve locally - ipaddr = socket.inet_aton(socket.gethostbyname(destaddr)) - req = req + chr(0x01).encode() + ipaddr - req = req + struct.pack(">H", destport) - self.sendall(req) - # Get the response - resp = self.__recvall(4) - if resp[0:1] != chr(0x05).encode(): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - elif resp[1:2] != chr(0x00).encode(): - # Connection failed - self.close() - if ord(resp[1:2]) <= 8: - raise Socks5Error((ord(resp[1:2]), _socks5errors[ord(resp[1:2])])) - else: - raise Socks5Error((9, _socks5errors[9])) - # Get the bound address/port - elif resp[3:4] == chr(0x01).encode(): - boundaddr = self.__recvall(4) - elif resp[3:4] == chr(0x03).encode(): - resp = resp + self.recv(1) - boundaddr = self.__recvall(ord(resp[4:5])) - else: - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - boundport = struct.unpack(">H", self.__recvall(2))[0] - self.__proxysockname = (boundaddr, boundport) - if ipaddr != None: - self.__proxypeername = (socket.inet_ntoa(ipaddr), destport) - else: - self.__proxypeername = (destaddr, destport) - - def getproxysockname(self): - """getsockname() -> address info - Returns the bound IP address and port number at the proxy. - """ - return self.__proxysockname - - def getproxypeername(self): - """getproxypeername() -> address info - Returns the IP and port number of the proxy. - """ - return _orgsocket.getpeername(self) - - def getpeername(self): - """getpeername() -> address info - Returns the IP address and port number of the destination - machine (note: getproxypeername returns the proxy) - """ - return self.__proxypeername - - def __negotiatesocks4(self, destaddr, destport): - """__negotiatesocks4(self,destaddr,destport) - Negotiates a connection through a SOCKS4 server. - """ - # Check if the destination address provided is an IP address - rmtrslv = False - try: - ipaddr = socket.inet_aton(destaddr) - except socket.error: - # It's a DNS name. Check where it should be resolved. - if self.__proxy[3]: - ipaddr = struct.pack("BBBB", 0x00, 0x00, 0x00, 0x01) - rmtrslv = True - else: - ipaddr = socket.inet_aton(socket.gethostbyname(destaddr)) - # Construct the request packet - req = struct.pack(">BBH", 0x04, 0x01, destport) + ipaddr - # The username parameter is considered userid for SOCKS4 - if self.__proxy[4] != None: - req = req + self.__proxy[4] - req = req + chr(0x00).encode() - # DNS name if remote resolving is required - # NOTE: This is actually an extension to the SOCKS4 protocol - # called SOCKS4A and may not be supported in all cases. - if rmtrslv: - req = req + destaddr + chr(0x00).encode() - self.sendall(req) - # Get the response from the server - resp = self.__recvall(8) - if resp[0:1] != chr(0x00).encode(): - # Bad data - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if resp[1:2] != chr(0x5A).encode(): - # Server returned an error - self.close() - if ord(resp[1:2]) in (91, 92, 93): - self.close() - raise Socks4Error((ord(resp[1:2]), _socks4errors[ord(resp[1:2]) - 90])) - else: - raise Socks4Error((94, _socks4errors[4])) - # Get the bound address/port - self.__proxysockname = ( - socket.inet_ntoa(resp[4:]), - struct.unpack(">H", resp[2:4])[0], - ) - if rmtrslv != None: - self.__proxypeername = (socket.inet_ntoa(ipaddr), destport) - else: - self.__proxypeername = (destaddr, destport) - - def __negotiatehttp(self, destaddr, destport): - """__negotiatehttp(self,destaddr,destport) - Negotiates a connection through an HTTP server. - """ - # If we need to resolve locally, we do this now - if not self.__proxy[3]: - addr = socket.gethostbyname(destaddr) - else: - addr = destaddr - headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] - wrote_host_header = False - wrote_auth_header = False - if self.__proxy[6] != None: - for key, val in self.__proxy[6].iteritems(): - headers += [key, ": ", val, "\r\n"] - wrote_host_header = key.lower() == "host" - wrote_auth_header = key.lower() == "proxy-authorization" - if not wrote_host_header: - headers += ["Host: ", destaddr, "\r\n"] - if not wrote_auth_header: - if self.__proxy[4] != None and self.__proxy[5] != None: - headers += [self.__getauthheader(), "\r\n"] - headers.append("\r\n") - self.sendall("".join(headers).encode()) - # We read the response until we get the string "\r\n\r\n" - resp = self.recv(1) - while resp.find("\r\n\r\n".encode()) == -1: - resp = resp + self.recv(1) - # We just need the first line to check if the connection - # was successful - statusline = resp.splitlines()[0].split(" ".encode(), 2) - if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - try: - statuscode = int(statusline[1]) - except ValueError: - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if statuscode != 200: - self.close() - raise HTTPError((statuscode, statusline[2])) - self.__proxysockname = ("0.0.0.0", 0) - self.__proxypeername = (addr, destport) - - def connect(self, destpair): - """connect(self, despair) - Connects to the specified destination through a proxy. - destpar - A tuple of the IP/DNS address and the port number. - (identical to socket's connect). - To select the proxy server use setproxy(). - """ - # Do a minimal input check first - if ( - (not type(destpair) in (list, tuple)) - or (len(destpair) < 2) - or (not isinstance(destpair[0], basestring)) - or (type(destpair[1]) != int) - ): - raise GeneralProxyError((5, _generalerrors[5])) - if self.__proxy[0] == PROXY_TYPE_SOCKS5: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 1080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatesocks5(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_SOCKS4: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 1080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatesocks4(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_HTTP: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 8080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatehttp(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_HTTP_NO_TUNNEL: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 8080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - if destpair[1] == 443: - self.__negotiatehttp(destpair[0], destpair[1]) - else: - self.__httptunnel = False - elif self.__proxy[0] == None: - _orgsocket.connect(self, (destpair[0], destpair[1])) - else: - raise GeneralProxyError((4, _generalerrors[4])) diff --git a/shotgun_api3/lib/httplib2/python3/__init__.py b/shotgun_api3/lib/httplib2/python3/__init__.py deleted file mode 100644 index ba5fa2f23..000000000 --- a/shotgun_api3/lib/httplib2/python3/__init__.py +++ /dev/null @@ -1,1799 +0,0 @@ -# -*- coding: utf-8 -*- -"""Small, fast HTTP client library for Python.""" - -__author__ = "Joe Gregorio (joe@bitworking.org)" -__copyright__ = "Copyright 2006, Joe Gregorio" -__contributors__ = [ - "Thomas Broyer (t.broyer@ltgt.net)", - "James Antill", - "Xavier Verges Farrero", - "Jonathan Feinberg", - "Blair Zajac", - "Sam Ruby", - "Louis Nyffenegger", - "Mark Pilgrim", - "Alex Yu", - "Lai Han", -] -__license__ = "MIT" -__version__ = "0.22.0" - -import base64 -import calendar -import copy -import email -import email.feedparser -from email import header -import email.message -import email.utils -import errno -from gettext import gettext as _ -import gzip -from hashlib import md5 as _md5 -from hashlib import sha1 as _sha -import hmac -import http.client -import io -import os -import random -import re -import socket -import ssl -import sys -import time -import urllib.parse -import zlib - -try: - import socks -except ImportError: - # TODO: remove this fallback and copypasted socksipy module upon py2/3 merge, - # idea is to have soft-dependency on any compatible module called socks - from . import socks -from . import auth -from .error import * -from .iri2uri import iri2uri - - -def has_timeout(timeout): - if hasattr(socket, "_GLOBAL_DEFAULT_TIMEOUT"): - return timeout is not None and timeout is not socket._GLOBAL_DEFAULT_TIMEOUT - return timeout is not None - - -__all__ = [ - "debuglevel", - "FailedToDecompressContent", - "Http", - "HttpLib2Error", - "ProxyInfo", - "RedirectLimit", - "RedirectMissingLocation", - "Response", - "RETRIES", - "UnimplementedDigestAuthOptionError", - "UnimplementedHmacDigestAuthOptionError", -] - -# The httplib debug level, set to a non-zero value to get debug output -debuglevel = 0 - -# A request will be tried 'RETRIES' times if it fails at the socket/connection level. -RETRIES = 2 - - -# Open Items: -# ----------- - -# Are we removing the cached content too soon on PUT (only delete on 200 Maybe?) - -# Pluggable cache storage (supports storing the cache in -# flat files by default. We need a plug-in architecture -# that can support Berkeley DB and Squid) - -# == Known Issues == -# Does not handle a resource that uses conneg and Last-Modified but no ETag as a cache validator. -# Does not handle Cache-Control: max-stale -# Does not use Age: headers when calculating cache freshness. - -# The number of redirections to follow before giving up. -# Note that only GET redirects are automatically followed. -# Will also honor 301 requests by saving that info and never -# requesting that URI again. -DEFAULT_MAX_REDIRECTS = 5 - -# Which headers are hop-by-hop headers by default -HOP_BY_HOP = [ - "connection", - "keep-alive", - "proxy-authenticate", - "proxy-authorization", - "te", - "trailers", - "transfer-encoding", - "upgrade", -] - -# https://tools.ietf.org/html/rfc7231#section-8.1.3 -SAFE_METHODS = ("GET", "HEAD", "OPTIONS", "TRACE") - -# To change, assign to `Http().redirect_codes` -REDIRECT_CODES = frozenset((300, 301, 302, 303, 307, 308)) - - -from . import certs - -CA_CERTS = certs.where() - -# PROTOCOL_TLS is python 3.5.3+. PROTOCOL_SSLv23 is deprecated. -# Both PROTOCOL_TLS and PROTOCOL_SSLv23 are equivalent and means: -# > Selects the highest protocol version that both the client and server support. -# > Despite the name, this option can select “TLS” protocols as well as “SSL”. -# source: https://docs.python.org/3.5/library/ssl.html#ssl.PROTOCOL_SSLv23 - -# PROTOCOL_TLS_CLIENT is python 3.10.0+. PROTOCOL_TLS is deprecated. -# > Auto-negotiate the highest protocol version that both the client and server support, and configure the context client-side connections. -# > The protocol enables CERT_REQUIRED and check_hostname by default. -# source: https://docs.python.org/3.10/library/ssl.html#ssl.PROTOCOL_TLS - -DEFAULT_TLS_VERSION = getattr(ssl, "PROTOCOL_TLS_CLIENT", None) or getattr(ssl, "PROTOCOL_TLS", None) or getattr(ssl, "PROTOCOL_SSLv23") - - -def _build_ssl_context( - disable_ssl_certificate_validation, - ca_certs, - cert_file=None, - key_file=None, - maximum_version=None, - minimum_version=None, - key_password=None, -): - if not hasattr(ssl, "SSLContext"): - raise RuntimeError("httplib2 requires Python 3.2+ for ssl.SSLContext") - - context = ssl.SSLContext(DEFAULT_TLS_VERSION) - # check_hostname and verify_mode should be set in opposite order during disable - # https://bugs.python.org/issue31431 - if disable_ssl_certificate_validation and hasattr(context, "check_hostname"): - context.check_hostname = not disable_ssl_certificate_validation - context.verify_mode = ssl.CERT_NONE if disable_ssl_certificate_validation else ssl.CERT_REQUIRED - - # SSLContext.maximum_version and SSLContext.minimum_version are python 3.7+. - # source: https://docs.python.org/3/library/ssl.html#ssl.SSLContext.maximum_version - if maximum_version is not None: - if hasattr(context, "maximum_version"): - if isinstance(maximum_version, str): - maximum_version = getattr(ssl.TLSVersion, maximum_version) - context.maximum_version = maximum_version - else: - raise RuntimeError("setting tls_maximum_version requires Python 3.7 and OpenSSL 1.1 or newer") - if minimum_version is not None: - if hasattr(context, "minimum_version"): - if isinstance(minimum_version, str): - minimum_version = getattr(ssl.TLSVersion, minimum_version) - context.minimum_version = minimum_version - else: - raise RuntimeError("setting tls_minimum_version requires Python 3.7 and OpenSSL 1.1 or newer") - # check_hostname requires python 3.4+ - # we will perform the equivalent in HTTPSConnectionWithTimeout.connect() by calling ssl.match_hostname - # if check_hostname is not supported. - if hasattr(context, "check_hostname"): - context.check_hostname = not disable_ssl_certificate_validation - - context.load_verify_locations(ca_certs) - - if cert_file: - context.load_cert_chain(cert_file, key_file, key_password) - - return context - - -def _get_end2end_headers(response): - hopbyhop = list(HOP_BY_HOP) - hopbyhop.extend([x.strip() for x in response.get("connection", "").split(",")]) - return [header for header in list(response.keys()) if header not in hopbyhop] - - -_missing = object() - - -def _errno_from_exception(e): - # TODO python 3.11+ cheap try: return e.errno except AttributeError: pass - errno = getattr(e, "errno", _missing) - if errno is not _missing: - return errno - - # socket.error and common wrap in .args - args = getattr(e, "args", None) - if args: - return _errno_from_exception(args[0]) - - # pysocks.ProxyError wraps in .socket_err - # https://github.com/httplib2/httplib2/pull/202 - socket_err = getattr(e, "socket_err", None) - if socket_err: - return _errno_from_exception(socket_err) - - return None - - -URI = re.compile(r"^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?") - - -def parse_uri(uri): - """Parses a URI using the regex given in Appendix B of RFC 3986. - - (scheme, authority, path, query, fragment) = parse_uri(uri) - """ - groups = URI.match(uri).groups() - return (groups[1], groups[3], groups[4], groups[6], groups[8]) - - -def urlnorm(uri): - (scheme, authority, path, query, fragment) = parse_uri(uri) - if not scheme or not authority: - raise RelativeURIError("Only absolute URIs are allowed. uri = %s" % uri) - authority = authority.lower() - scheme = scheme.lower() - if not path: - path = "/" - # Could do syntax based normalization of the URI before - # computing the digest. See Section 6.2.2 of Std 66. - request_uri = query and "?".join([path, query]) or path - scheme = scheme.lower() - defrag_uri = scheme + "://" + authority + request_uri - return scheme, authority, request_uri, defrag_uri - - -# Cache filename construction (original borrowed from Venus http://intertwingly.net/code/venus/) -re_url_scheme = re.compile(r"^\w+://") -re_unsafe = re.compile(r"[^\w\-_.()=!]+", re.ASCII) - - -def safename(filename): - """Return a filename suitable for the cache. - Strips dangerous and common characters to create a filename we - can use to store the cache in. - """ - if isinstance(filename, bytes): - filename_bytes = filename - filename = filename.decode("utf-8") - else: - filename_bytes = filename.encode("utf-8") - filemd5 = _md5(filename_bytes).hexdigest() - filename = re_url_scheme.sub("", filename) - filename = re_unsafe.sub("", filename) - - # limit length of filename (vital for Windows) - # https://github.com/httplib2/httplib2/pull/74 - # C:\Users\ \AppData\Local\Temp\ , - # 9 chars + max 104 chars + 20 chars + x + 1 + 32 = max 259 chars - # Thus max safe filename x = 93 chars. Let it be 90 to make a round sum: - filename = filename[:90] - - return ",".join((filename, filemd5)) - - -NORMALIZE_SPACE = re.compile(r"(?:\r\n)?[ \t]+") - - -def _normalize_headers(headers): - return dict( - [ - (_convert_byte_str(key).lower(), NORMALIZE_SPACE.sub(_convert_byte_str(value), " ").strip(),) - for (key, value) in headers.items() - ] - ) - - -def _convert_byte_str(s): - if not isinstance(s, str): - return str(s, "utf-8") - return s - - -def _parse_cache_control(headers): - retval = {} - if "cache-control" in headers: - parts = headers["cache-control"].split(",") - parts_with_args = [ - tuple([x.strip().lower() for x in part.split("=", 1)]) for part in parts if -1 != part.find("=") - ] - parts_wo_args = [(name.strip().lower(), 1) for name in parts if -1 == name.find("=")] - retval = dict(parts_with_args + parts_wo_args) - return retval - - -# Whether to use a strict mode to parse WWW-Authenticate headers -# Might lead to bad results in case of ill-formed header value, -# so disabled by default, falling back to relaxed parsing. -# Set to true to turn on, useful for testing servers. -USE_WWW_AUTH_STRICT_PARSING = 0 - - -def _entry_disposition(response_headers, request_headers): - """Determine freshness from the Date, Expires and Cache-Control headers. - - We don't handle the following: - - 1. Cache-Control: max-stale - 2. Age: headers are not used in the calculations. - - Not that this algorithm is simpler than you might think - because we are operating as a private (non-shared) cache. - This lets us ignore 's-maxage'. We can also ignore - 'proxy-invalidate' since we aren't a proxy. - We will never return a stale document as - fresh as a design decision, and thus the non-implementation - of 'max-stale'. This also lets us safely ignore 'must-revalidate' - since we operate as if every server has sent 'must-revalidate'. - Since we are private we get to ignore both 'public' and - 'private' parameters. We also ignore 'no-transform' since - we don't do any transformations. - The 'no-store' parameter is handled at a higher level. - So the only Cache-Control parameters we look at are: - - no-cache - only-if-cached - max-age - min-fresh - """ - - retval = "STALE" - cc = _parse_cache_control(request_headers) - cc_response = _parse_cache_control(response_headers) - - if "pragma" in request_headers and request_headers["pragma"].lower().find("no-cache") != -1: - retval = "TRANSPARENT" - if "cache-control" not in request_headers: - request_headers["cache-control"] = "no-cache" - elif "no-cache" in cc: - retval = "TRANSPARENT" - elif "no-cache" in cc_response: - retval = "STALE" - elif "only-if-cached" in cc: - retval = "FRESH" - elif "date" in response_headers: - date = calendar.timegm(email.utils.parsedate_tz(response_headers["date"])) - now = time.time() - current_age = max(0, now - date) - if "max-age" in cc_response: - try: - freshness_lifetime = int(cc_response["max-age"]) - except ValueError: - freshness_lifetime = 0 - elif "expires" in response_headers: - expires = email.utils.parsedate_tz(response_headers["expires"]) - if None == expires: - freshness_lifetime = 0 - else: - freshness_lifetime = max(0, calendar.timegm(expires) - date) - else: - freshness_lifetime = 0 - if "max-age" in cc: - try: - freshness_lifetime = int(cc["max-age"]) - except ValueError: - freshness_lifetime = 0 - if "min-fresh" in cc: - try: - min_fresh = int(cc["min-fresh"]) - except ValueError: - min_fresh = 0 - current_age += min_fresh - if freshness_lifetime > current_age: - retval = "FRESH" - return retval - - -def _decompressContent(response, new_content): - content = new_content - try: - encoding = response.get("content-encoding", None) - if encoding in ["gzip", "deflate"]: - if encoding == "gzip": - content = gzip.GzipFile(fileobj=io.BytesIO(new_content)).read() - if encoding == "deflate": - try: - content = zlib.decompress(content, zlib.MAX_WBITS) - except (IOError, zlib.error): - content = zlib.decompress(content, -zlib.MAX_WBITS) - response["content-length"] = str(len(content)) - # Record the historical presence of the encoding in a way the won't interfere. - response["-content-encoding"] = response["content-encoding"] - del response["content-encoding"] - except (IOError, zlib.error): - content = "" - raise FailedToDecompressContent( - _("Content purported to be compressed with %s but failed to decompress.") % response.get("content-encoding"), - response, - content, - ) - return content - - -def _bind_write_headers(msg): - def _write_headers(self): - # Self refers to the Generator object. - for h, v in msg.items(): - print("%s:" % h, end=" ", file=self._fp) - if isinstance(v, header.Header): - print(v.encode(maxlinelen=self._maxheaderlen), file=self._fp) - else: - # email.Header got lots of smarts, so use it. - headers = header.Header(v, maxlinelen=self._maxheaderlen, charset="utf-8", header_name=h) - print(headers.encode(), file=self._fp) - # A blank line always separates headers from body. - print(file=self._fp) - - return _write_headers - - -def _updateCache(request_headers, response_headers, content, cache, cachekey): - if cachekey: - cc = _parse_cache_control(request_headers) - cc_response = _parse_cache_control(response_headers) - if "no-store" in cc or "no-store" in cc_response: - cache.delete(cachekey) - else: - info = email.message.Message() - for key, value in response_headers.items(): - if key not in ["status", "content-encoding", "transfer-encoding"]: - info[key] = value - - # Add annotations to the cache to indicate what headers - # are variant for this request. - vary = response_headers.get("vary", None) - if vary: - vary_headers = vary.lower().replace(" ", "").split(",") - for header in vary_headers: - key = "-varied-%s" % header - try: - info[key] = request_headers[header] - except KeyError: - pass - - status = response_headers.status - if status == 304: - status = 200 - - status_header = "status: %d\r\n" % status - - try: - header_str = info.as_string() - except UnicodeEncodeError: - setattr(info, "_write_headers", _bind_write_headers(info)) - header_str = info.as_string() - - header_str = re.sub("\r(?!\n)|(? 0: - service = "cl" - # No point in guessing Base or Spreadsheet - # elif request_uri.find("spreadsheets") > 0: - # service = "wise" - - auth = dict(Email=credentials[0], Passwd=credentials[1], service=service, source=headers["user-agent"],) - resp, content = self.http.request( - "https://www.google.com/accounts/ClientLogin", - method="POST", - body=urlencode(auth), - headers={"Content-Type": "application/x-www-form-urlencoded"}, - ) - lines = content.split("\n") - d = dict([tuple(line.split("=", 1)) for line in lines if line]) - if resp.status == 403: - self.Auth = "" - else: - self.Auth = d["Auth"] - - def request(self, method, request_uri, headers, content): - """Modify the request headers to add the appropriate - Authorization header.""" - headers["authorization"] = "GoogleLogin Auth=" + self.Auth - - -AUTH_SCHEME_CLASSES = { - "basic": BasicAuthentication, - "wsse": WsseAuthentication, - "digest": DigestAuthentication, - "hmacdigest": HmacDigestAuthentication, - "googlelogin": GoogleLoginAuthentication, -} - -AUTH_SCHEME_ORDER = ["hmacdigest", "googlelogin", "digest", "wsse", "basic"] - - -class FileCache(object): - """Uses a local directory as a store for cached files. - Not really safe to use if multiple threads or processes are going to - be running on the same cache. - """ - - def __init__(self, cache, safe=safename): # use safe=lambda x: md5.new(x).hexdigest() for the old behavior - self.cache = cache - self.safe = safe - if not os.path.exists(cache): - os.makedirs(self.cache) - - def get(self, key): - retval = None - cacheFullPath = os.path.join(self.cache, self.safe(key)) - try: - f = open(cacheFullPath, "rb") - retval = f.read() - f.close() - except IOError: - pass - return retval - - def set(self, key, value): - cacheFullPath = os.path.join(self.cache, self.safe(key)) - f = open(cacheFullPath, "wb") - f.write(value) - f.close() - - def delete(self, key): - cacheFullPath = os.path.join(self.cache, self.safe(key)) - if os.path.exists(cacheFullPath): - os.remove(cacheFullPath) - - -class Credentials(object): - def __init__(self): - self.credentials = [] - - def add(self, name, password, domain=""): - self.credentials.append((domain.lower(), name, password)) - - def clear(self): - self.credentials = [] - - def iter(self, domain): - for (cdomain, name, password) in self.credentials: - if cdomain == "" or domain == cdomain: - yield (name, password) - - -class KeyCerts(Credentials): - """Identical to Credentials except that - name/password are mapped to key/cert.""" - - def add(self, key, cert, domain, password): - self.credentials.append((domain.lower(), key, cert, password)) - - def iter(self, domain): - for (cdomain, key, cert, password) in self.credentials: - if cdomain == "" or domain == cdomain: - yield (key, cert, password) - - -class AllHosts(object): - pass - - -class ProxyInfo(object): - """Collect information required to use a proxy.""" - - bypass_hosts = () - - def __init__( - self, proxy_type, proxy_host, proxy_port, proxy_rdns=True, proxy_user=None, proxy_pass=None, proxy_headers=None, - ): - """Args: - - proxy_type: The type of proxy server. This must be set to one of - socks.PROXY_TYPE_XXX constants. For example: p = - ProxyInfo(proxy_type=socks.PROXY_TYPE_HTTP, proxy_host='localhost', - proxy_port=8000) - proxy_host: The hostname or IP address of the proxy server. - proxy_port: The port that the proxy server is running on. - proxy_rdns: If True (default), DNS queries will not be performed - locally, and instead, handed to the proxy to resolve. This is useful - if the network does not allow resolution of non-local names. In - httplib2 0.9 and earlier, this defaulted to False. - proxy_user: The username used to authenticate with the proxy server. - proxy_pass: The password used to authenticate with the proxy server. - proxy_headers: Additional or modified headers for the proxy connect - request. - """ - if isinstance(proxy_user, bytes): - proxy_user = proxy_user.decode() - if isinstance(proxy_pass, bytes): - proxy_pass = proxy_pass.decode() - ( - self.proxy_type, - self.proxy_host, - self.proxy_port, - self.proxy_rdns, - self.proxy_user, - self.proxy_pass, - self.proxy_headers, - ) = ( - proxy_type, - proxy_host, - proxy_port, - proxy_rdns, - proxy_user, - proxy_pass, - proxy_headers, - ) - - def astuple(self): - return ( - self.proxy_type, - self.proxy_host, - self.proxy_port, - self.proxy_rdns, - self.proxy_user, - self.proxy_pass, - self.proxy_headers, - ) - - def isgood(self): - return socks and (self.proxy_host != None) and (self.proxy_port != None) - - def applies_to(self, hostname): - return not self.bypass_host(hostname) - - def bypass_host(self, hostname): - """Has this host been excluded from the proxy config""" - if self.bypass_hosts is AllHosts: - return True - - hostname = "." + hostname.lstrip(".") - for skip_name in self.bypass_hosts: - # *.suffix - if skip_name.startswith(".") and hostname.endswith(skip_name): - return True - # exact match - if hostname == "." + skip_name: - return True - return False - - def __repr__(self): - return ( - "" - ).format(p=self) - - -def proxy_info_from_environment(method="http"): - """Read proxy info from the environment variables. - """ - if method not in ("http", "https"): - return - - env_var = method + "_proxy" - url = os.environ.get(env_var, os.environ.get(env_var.upper())) - if not url: - return - return proxy_info_from_url(url, method, noproxy=None) - - -def proxy_info_from_url(url, method="http", noproxy=None): - """Construct a ProxyInfo from a URL (such as http_proxy env var) - """ - url = urllib.parse.urlparse(url) - - proxy_type = 3 # socks.PROXY_TYPE_HTTP - pi = ProxyInfo( - proxy_type=proxy_type, - proxy_host=url.hostname, - proxy_port=url.port or dict(https=443, http=80)[method], - proxy_user=url.username or None, - proxy_pass=url.password or None, - proxy_headers=None, - ) - - bypass_hosts = [] - # If not given an explicit noproxy value, respect values in env vars. - if noproxy is None: - noproxy = os.environ.get("no_proxy", os.environ.get("NO_PROXY", "")) - # Special case: A single '*' character means all hosts should be bypassed. - if noproxy == "*": - bypass_hosts = AllHosts - elif noproxy.strip(): - bypass_hosts = noproxy.split(",") - bypass_hosts = tuple(filter(bool, bypass_hosts)) # To exclude empty string. - - pi.bypass_hosts = bypass_hosts - return pi - - -class HTTPConnectionWithTimeout(http.client.HTTPConnection): - """HTTPConnection subclass that supports timeouts - - HTTPConnection subclass that supports timeouts - - All timeouts are in seconds. If None is passed for timeout then - Python's default timeout for sockets will be used. See for example - the docs of socket.setdefaulttimeout(): - http://docs.python.org/library/socket.html#socket.setdefaulttimeout - """ - - def __init__(self, host, port=None, timeout=None, proxy_info=None): - http.client.HTTPConnection.__init__(self, host, port=port, timeout=timeout) - - self.proxy_info = proxy_info - if proxy_info and not isinstance(proxy_info, ProxyInfo): - self.proxy_info = proxy_info("http") - - def connect(self): - """Connect to the host and port specified in __init__.""" - if self.proxy_info and socks is None: - raise ProxiesUnavailableError("Proxy support missing but proxy use was requested!") - if self.proxy_info and self.proxy_info.isgood() and self.proxy_info.applies_to(self.host): - use_proxy = True - ( - proxy_type, - proxy_host, - proxy_port, - proxy_rdns, - proxy_user, - proxy_pass, - proxy_headers, - ) = self.proxy_info.astuple() - - host = proxy_host - port = proxy_port - else: - use_proxy = False - - host = self.host - port = self.port - proxy_type = None - - socket_err = None - - for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM): - af, socktype, proto, canonname, sa = res - try: - if use_proxy: - self.sock = socks.socksocket(af, socktype, proto) - self.sock.setproxy( - proxy_type, proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, - ) - else: - self.sock = socket.socket(af, socktype, proto) - self.sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - if has_timeout(self.timeout): - self.sock.settimeout(self.timeout) - if self.debuglevel > 0: - print("connect: ({0}, {1}) ************".format(self.host, self.port)) - if use_proxy: - print( - "proxy: {0} ************".format( - str((proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers,)) - ) - ) - - self.sock.connect((self.host, self.port) + sa[2:]) - except socket.error as e: - socket_err = e - if self.debuglevel > 0: - print("connect fail: ({0}, {1})".format(self.host, self.port)) - if use_proxy: - print( - "proxy: {0}".format( - str((proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers,)) - ) - ) - if self.sock: - self.sock.close() - self.sock = None - continue - break - if not self.sock: - raise socket_err - - -class HTTPSConnectionWithTimeout(http.client.HTTPSConnection): - """This class allows communication via SSL. - - All timeouts are in seconds. If None is passed for timeout then - Python's default timeout for sockets will be used. See for example - the docs of socket.setdefaulttimeout(): - http://docs.python.org/library/socket.html#socket.setdefaulttimeout - """ - - def __init__( - self, - host, - port=None, - key_file=None, - cert_file=None, - timeout=None, - proxy_info=None, - ca_certs=None, - disable_ssl_certificate_validation=False, - tls_maximum_version=None, - tls_minimum_version=None, - key_password=None, - ): - - self.disable_ssl_certificate_validation = disable_ssl_certificate_validation - self.ca_certs = ca_certs if ca_certs else CA_CERTS - - self.proxy_info = proxy_info - if proxy_info and not isinstance(proxy_info, ProxyInfo): - self.proxy_info = proxy_info("https") - - context = _build_ssl_context( - self.disable_ssl_certificate_validation, - self.ca_certs, - cert_file, - key_file, - maximum_version=tls_maximum_version, - minimum_version=tls_minimum_version, - key_password=key_password, - ) - super(HTTPSConnectionWithTimeout, self).__init__( - host, port=port, timeout=timeout, context=context, - ) - self.key_file = key_file - self.cert_file = cert_file - self.key_password = key_password - - def connect(self): - """Connect to a host on a given (SSL) port.""" - if self.proxy_info and self.proxy_info.isgood() and self.proxy_info.applies_to(self.host): - use_proxy = True - ( - proxy_type, - proxy_host, - proxy_port, - proxy_rdns, - proxy_user, - proxy_pass, - proxy_headers, - ) = self.proxy_info.astuple() - - host = proxy_host - port = proxy_port - else: - use_proxy = False - - host = self.host - port = self.port - proxy_type = None - proxy_headers = None - - socket_err = None - - address_info = socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM) - for family, socktype, proto, canonname, sockaddr in address_info: - try: - if use_proxy: - sock = socks.socksocket(family, socktype, proto) - - sock.setproxy( - proxy_type, proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, - ) - else: - sock = socket.socket(family, socktype, proto) - sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) - if has_timeout(self.timeout): - sock.settimeout(self.timeout) - sock.connect((self.host, self.port)) - - self.sock = self._context.wrap_socket(sock, server_hostname=self.host) - - # Python 3.3 compatibility: emulate the check_hostname behavior - if not hasattr(self._context, "check_hostname") and not self.disable_ssl_certificate_validation: - try: - ssl.match_hostname(self.sock.getpeercert(), self.host) - except Exception: - self.sock.shutdown(socket.SHUT_RDWR) - self.sock.close() - raise - - if self.debuglevel > 0: - print("connect: ({0}, {1})".format(self.host, self.port)) - if use_proxy: - print( - "proxy: {0}".format( - str((proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers,)) - ) - ) - except (ssl.SSLError, ssl.CertificateError) as e: - if sock: - sock.close() - if self.sock: - self.sock.close() - self.sock = None - raise - except (socket.timeout, socket.gaierror): - raise - except socket.error as e: - socket_err = e - if self.debuglevel > 0: - print("connect fail: ({0}, {1})".format(self.host, self.port)) - if use_proxy: - print( - "proxy: {0}".format( - str((proxy_host, proxy_port, proxy_rdns, proxy_user, proxy_pass, proxy_headers,)) - ) - ) - if self.sock: - self.sock.close() - self.sock = None - continue - break - if not self.sock: - raise socket_err - - -SCHEME_TO_CONNECTION = { - "http": HTTPConnectionWithTimeout, - "https": HTTPSConnectionWithTimeout, -} - - -class Http(object): - """An HTTP client that handles: - - - all methods - - caching - - ETags - - compression, - - HTTPS - - Basic - - Digest - - WSSE - - and more. - """ - - def __init__( - self, - cache=None, - timeout=None, - proxy_info=proxy_info_from_environment, - ca_certs=None, - disable_ssl_certificate_validation=False, - tls_maximum_version=None, - tls_minimum_version=None, - ): - """If 'cache' is a string then it is used as a directory name for - a disk cache. Otherwise it must be an object that supports the - same interface as FileCache. - - All timeouts are in seconds. If None is passed for timeout - then Python's default timeout for sockets will be used. See - for example the docs of socket.setdefaulttimeout(): - http://docs.python.org/library/socket.html#socket.setdefaulttimeout - - `proxy_info` may be: - - a callable that takes the http scheme ('http' or 'https') and - returns a ProxyInfo instance per request. By default, uses - proxy_info_from_environment. - - a ProxyInfo instance (static proxy config). - - None (proxy disabled). - - ca_certs is the path of a file containing root CA certificates for SSL - server certificate validation. By default, a CA cert file bundled with - httplib2 is used. - - If disable_ssl_certificate_validation is true, SSL cert validation will - not be performed. - - tls_maximum_version / tls_minimum_version require Python 3.7+ / - OpenSSL 1.1.0g+. A value of "TLSv1_3" requires OpenSSL 1.1.1+. - """ - self.proxy_info = proxy_info - self.ca_certs = ca_certs - self.disable_ssl_certificate_validation = disable_ssl_certificate_validation - self.tls_maximum_version = tls_maximum_version - self.tls_minimum_version = tls_minimum_version - # Map domain name to an httplib connection - self.connections = {} - # The location of the cache, for now a directory - # where cached responses are held. - if cache and isinstance(cache, str): - self.cache = FileCache(cache) - else: - self.cache = cache - - # Name/password - self.credentials = Credentials() - - # Key/cert - self.certificates = KeyCerts() - - # authorization objects - self.authorizations = [] - - # If set to False then no redirects are followed, even safe ones. - self.follow_redirects = True - - self.redirect_codes = REDIRECT_CODES - - # Which HTTP methods do we apply optimistic concurrency to, i.e. - # which methods get an "if-match:" etag header added to them. - self.optimistic_concurrency_methods = ["PUT", "PATCH"] - - self.safe_methods = list(SAFE_METHODS) - - # If 'follow_redirects' is True, and this is set to True then - # all redirecs are followed, including unsafe ones. - self.follow_all_redirects = False - - self.ignore_etag = False - - self.force_exception_to_status_code = False - - self.timeout = timeout - - # Keep Authorization: headers on a redirect. - self.forward_authorization_headers = False - - def close(self): - """Close persistent connections, clear sensitive data. - Not thread-safe, requires external synchronization against concurrent requests. - """ - existing, self.connections = self.connections, {} - for _, c in existing.items(): - c.close() - self.certificates.clear() - self.clear_credentials() - - def __getstate__(self): - state_dict = copy.copy(self.__dict__) - # In case request is augmented by some foreign object such as - # credentials which handle auth - if "request" in state_dict: - del state_dict["request"] - if "connections" in state_dict: - del state_dict["connections"] - return state_dict - - def __setstate__(self, state): - self.__dict__.update(state) - self.connections = {} - - def _auth_from_challenge(self, host, request_uri, headers, response, content): - """A generator that creates Authorization objects - that can be applied to requests. - """ - challenges = auth._parse_www_authenticate(response, "www-authenticate") - for cred in self.credentials.iter(host): - for scheme in AUTH_SCHEME_ORDER: - if scheme in challenges: - yield AUTH_SCHEME_CLASSES[scheme](cred, host, request_uri, headers, response, content, self) - - def add_credentials(self, name, password, domain=""): - """Add a name and password that will be used - any time a request requires authentication.""" - self.credentials.add(name, password, domain) - - def add_certificate(self, key, cert, domain, password=None): - """Add a key and cert that will be used - any time a request requires authentication.""" - self.certificates.add(key, cert, domain, password) - - def clear_credentials(self): - """Remove all the names and passwords - that are used for authentication""" - self.credentials.clear() - self.authorizations = [] - - def _conn_request(self, conn, request_uri, method, body, headers): - i = 0 - seen_bad_status_line = False - while i < RETRIES: - i += 1 - try: - if conn.sock is None: - conn.connect() - conn.request(method, request_uri, body, headers) - except socket.timeout: - conn.close() - raise - except socket.gaierror: - conn.close() - raise ServerNotFoundError("Unable to find the server at %s" % conn.host) - except socket.error as e: - errno_ = _errno_from_exception(e) - if errno_ in (errno.ENETUNREACH, errno.EADDRNOTAVAIL) and i < RETRIES: - continue # retry on potentially transient errors - raise - except http.client.HTTPException: - if conn.sock is None: - if i < RETRIES - 1: - conn.close() - conn.connect() - continue - else: - conn.close() - raise - if i < RETRIES - 1: - conn.close() - conn.connect() - continue - # Just because the server closed the connection doesn't apparently mean - # that the server didn't send a response. - pass - try: - response = conn.getresponse() - except (http.client.BadStatusLine, http.client.ResponseNotReady): - # If we get a BadStatusLine on the first try then that means - # the connection just went stale, so retry regardless of the - # number of RETRIES set. - if not seen_bad_status_line and i == 1: - i = 0 - seen_bad_status_line = True - conn.close() - conn.connect() - continue - else: - conn.close() - raise - except socket.timeout: - raise - except (socket.error, http.client.HTTPException): - conn.close() - if i == 0: - conn.close() - conn.connect() - continue - else: - raise - else: - content = b"" - if method == "HEAD": - conn.close() - else: - content = response.read() - response = Response(response) - if method != "HEAD": - content = _decompressContent(response, content) - - break - return (response, content) - - def _request( - self, conn, host, absolute_uri, request_uri, method, body, headers, redirections, cachekey, - ): - """Do the actual request using the connection object - and also follow one level of redirects if necessary""" - - auths = [(auth.depth(request_uri), auth) for auth in self.authorizations if auth.inscope(host, request_uri)] - auth = auths and sorted(auths)[0][1] or None - if auth: - auth.request(method, request_uri, headers, body) - - (response, content) = self._conn_request(conn, request_uri, method, body, headers) - - if auth: - if auth.response(response, body): - auth.request(method, request_uri, headers, body) - (response, content) = self._conn_request(conn, request_uri, method, body, headers) - response._stale_digest = 1 - - if response.status == 401: - for authorization in self._auth_from_challenge(host, request_uri, headers, response, content): - authorization.request(method, request_uri, headers, body) - (response, content) = self._conn_request(conn, request_uri, method, body, headers) - if response.status != 401: - self.authorizations.append(authorization) - authorization.response(response, body) - break - - if self.follow_all_redirects or method in self.safe_methods or response.status in (303, 308): - if self.follow_redirects and response.status in self.redirect_codes: - # Pick out the location header and basically start from the beginning - # remembering first to strip the ETag header and decrement our 'depth' - if redirections: - if "location" not in response and response.status != 300: - raise RedirectMissingLocation( - _("Redirected but the response is missing a Location: header."), response, content, - ) - # Fix-up relative redirects (which violate an RFC 2616 MUST) - if "location" in response: - location = response["location"] - (scheme, authority, path, query, fragment) = parse_uri(location) - if authority == None: - response["location"] = urllib.parse.urljoin(absolute_uri, location) - if response.status == 308 or (response.status == 301 and (method in self.safe_methods)): - response["-x-permanent-redirect-url"] = response["location"] - if "content-location" not in response: - response["content-location"] = absolute_uri - _updateCache(headers, response, content, self.cache, cachekey) - if "if-none-match" in headers: - del headers["if-none-match"] - if "if-modified-since" in headers: - del headers["if-modified-since"] - if "authorization" in headers and not self.forward_authorization_headers: - del headers["authorization"] - if "location" in response: - location = response["location"] - old_response = copy.deepcopy(response) - if "content-location" not in old_response: - old_response["content-location"] = absolute_uri - redirect_method = method - if response.status in [302, 303]: - redirect_method = "GET" - body = None - (response, content) = self.request( - location, method=redirect_method, body=body, headers=headers, redirections=redirections - 1, - ) - response.previous = old_response - else: - raise RedirectLimit( - "Redirected more times than redirection_limit allows.", response, content, - ) - elif response.status in [200, 203] and method in self.safe_methods: - # Don't cache 206's since we aren't going to handle byte range requests - if "content-location" not in response: - response["content-location"] = absolute_uri - _updateCache(headers, response, content, self.cache, cachekey) - - return (response, content) - - def _normalize_headers(self, headers): - return _normalize_headers(headers) - - # Need to catch and rebrand some exceptions - # Then need to optionally turn all exceptions into status codes - # including all socket.* and httplib.* exceptions. - - def request( - self, uri, method="GET", body=None, headers=None, redirections=DEFAULT_MAX_REDIRECTS, connection_type=None, - ): - """ Performs a single HTTP request. -The 'uri' is the URI of the HTTP resource and can begin -with either 'http' or 'https'. The value of 'uri' must be an absolute URI. - -The 'method' is the HTTP method to perform, such as GET, POST, DELETE, etc. -There is no restriction on the methods allowed. - -The 'body' is the entity body to be sent with the request. It is a string -object. - -Any extra headers that are to be sent with the request should be provided in the -'headers' dictionary. - -The maximum number of redirect to follow before raising an -exception is 'redirections. The default is 5. - -The return value is a tuple of (response, content), the first -being and instance of the 'Response' class, the second being -a string that contains the response entity body. - """ - conn_key = "" - - try: - if headers is None: - headers = {} - else: - headers = self._normalize_headers(headers) - - if "user-agent" not in headers: - headers["user-agent"] = "Python-httplib2/%s (gzip)" % __version__ - - uri = iri2uri(uri) - # Prevent CWE-75 space injection to manipulate request via part of uri. - # Prevent CWE-93 CRLF injection to modify headers via part of uri. - uri = uri.replace(" ", "%20").replace("\r", "%0D").replace("\n", "%0A") - - (scheme, authority, request_uri, defrag_uri) = urlnorm(uri) - - conn_key = scheme + ":" + authority - conn = self.connections.get(conn_key) - if conn is None: - if not connection_type: - connection_type = SCHEME_TO_CONNECTION[scheme] - certs = list(self.certificates.iter(authority)) - if issubclass(connection_type, HTTPSConnectionWithTimeout): - if certs: - conn = self.connections[conn_key] = connection_type( - authority, - key_file=certs[0][0], - cert_file=certs[0][1], - timeout=self.timeout, - proxy_info=self.proxy_info, - ca_certs=self.ca_certs, - disable_ssl_certificate_validation=self.disable_ssl_certificate_validation, - tls_maximum_version=self.tls_maximum_version, - tls_minimum_version=self.tls_minimum_version, - key_password=certs[0][2], - ) - else: - conn = self.connections[conn_key] = connection_type( - authority, - timeout=self.timeout, - proxy_info=self.proxy_info, - ca_certs=self.ca_certs, - disable_ssl_certificate_validation=self.disable_ssl_certificate_validation, - tls_maximum_version=self.tls_maximum_version, - tls_minimum_version=self.tls_minimum_version, - ) - else: - conn = self.connections[conn_key] = connection_type( - authority, timeout=self.timeout, proxy_info=self.proxy_info - ) - conn.set_debuglevel(debuglevel) - - if "range" not in headers and "accept-encoding" not in headers: - headers["accept-encoding"] = "gzip, deflate" - - info = email.message.Message() - cachekey = None - cached_value = None - if self.cache: - cachekey = defrag_uri - cached_value = self.cache.get(cachekey) - if cached_value: - try: - info, content = cached_value.split(b"\r\n\r\n", 1) - info = email.message_from_bytes(info) - for k, v in info.items(): - if v.startswith("=?") and v.endswith("?="): - info.replace_header(k, str(*email.header.decode_header(v)[0])) - except (IndexError, ValueError): - self.cache.delete(cachekey) - cachekey = None - cached_value = None - - if ( - method in self.optimistic_concurrency_methods - and self.cache - and "etag" in info - and not self.ignore_etag - and "if-match" not in headers - ): - # http://www.w3.org/1999/04/Editing/ - headers["if-match"] = info["etag"] - - # https://tools.ietf.org/html/rfc7234 - # A cache MUST invalidate the effective Request URI as well as [...] Location and Content-Location - # when a non-error status code is received in response to an unsafe request method. - if self.cache and cachekey and method not in self.safe_methods: - self.cache.delete(cachekey) - - # Check the vary header in the cache to see if this request - # matches what varies in the cache. - if method in self.safe_methods and "vary" in info: - vary = info["vary"] - vary_headers = vary.lower().replace(" ", "").split(",") - for header in vary_headers: - key = "-varied-%s" % header - value = info[key] - if headers.get(header, None) != value: - cached_value = None - break - - if ( - self.cache - and cached_value - and (method in self.safe_methods or info["status"] == "308") - and "range" not in headers - ): - redirect_method = method - if info["status"] not in ("307", "308"): - redirect_method = "GET" - if "-x-permanent-redirect-url" in info: - # Should cached permanent redirects be counted in our redirection count? For now, yes. - if redirections <= 0: - raise RedirectLimit( - "Redirected more times than redirection_limit allows.", {}, "", - ) - (response, new_content) = self.request( - info["-x-permanent-redirect-url"], - method=redirect_method, - headers=headers, - redirections=redirections - 1, - ) - response.previous = Response(info) - response.previous.fromcache = True - else: - # Determine our course of action: - # Is the cached entry fresh or stale? - # Has the client requested a non-cached response? - # - # There seems to be three possible answers: - # 1. [FRESH] Return the cache entry w/o doing a GET - # 2. [STALE] Do the GET (but add in cache validators if available) - # 3. [TRANSPARENT] Do a GET w/o any cache validators (Cache-Control: no-cache) on the request - entry_disposition = _entry_disposition(info, headers) - - if entry_disposition == "FRESH": - response = Response(info) - response.fromcache = True - return (response, content) - - if entry_disposition == "STALE": - if "etag" in info and not self.ignore_etag and not "if-none-match" in headers: - headers["if-none-match"] = info["etag"] - if "last-modified" in info and not "last-modified" in headers: - headers["if-modified-since"] = info["last-modified"] - elif entry_disposition == "TRANSPARENT": - pass - - (response, new_content) = self._request( - conn, authority, uri, request_uri, method, body, headers, redirections, cachekey, - ) - - if response.status == 304 and method == "GET": - # Rewrite the cache entry with the new end-to-end headers - # Take all headers that are in response - # and overwrite their values in info. - # unless they are hop-by-hop, or are listed in the connection header. - - for key in _get_end2end_headers(response): - info[key] = response[key] - merged_response = Response(info) - if hasattr(response, "_stale_digest"): - merged_response._stale_digest = response._stale_digest - _updateCache(headers, merged_response, content, self.cache, cachekey) - response = merged_response - response.status = 200 - response.fromcache = True - - elif response.status == 200: - content = new_content - else: - self.cache.delete(cachekey) - content = new_content - else: - cc = _parse_cache_control(headers) - if "only-if-cached" in cc: - info["status"] = "504" - response = Response(info) - content = b"" - else: - (response, content) = self._request( - conn, authority, uri, request_uri, method, body, headers, redirections, cachekey, - ) - except Exception as e: - is_timeout = isinstance(e, socket.timeout) - if is_timeout: - conn = self.connections.pop(conn_key, None) - if conn: - conn.close() - - if self.force_exception_to_status_code: - if isinstance(e, HttpLib2ErrorWithResponse): - response = e.response - content = e.content - response.status = 500 - response.reason = str(e) - elif isinstance(e, socket.timeout): - content = b"Request Timeout" - response = Response({"content-type": "text/plain", "status": "408", "content-length": len(content),}) - response.reason = "Request Timeout" - else: - content = str(e).encode("utf-8") - response = Response({"content-type": "text/plain", "status": "400", "content-length": len(content),}) - response.reason = "Bad Request" - else: - raise - - return (response, content) - - -class Response(dict): - """An object more like email.message than httplib.HTTPResponse.""" - - """Is this response from our local cache""" - fromcache = False - """HTTP protocol version used by server. - - 10 for HTTP/1.0, 11 for HTTP/1.1. - """ - version = 11 - - "Status code returned by server. " - status = 200 - """Reason phrase returned by server.""" - reason = "Ok" - - previous = None - - def __init__(self, info): - # info is either an email.message or - # an httplib.HTTPResponse object. - if isinstance(info, http.client.HTTPResponse): - for key, value in info.getheaders(): - key = key.lower() - prev = self.get(key) - if prev is not None: - value = ", ".join((prev, value)) - self[key] = value - self.status = info.status - self["status"] = str(self.status) - self.reason = info.reason - self.version = info.version - elif isinstance(info, email.message.Message): - for key, value in list(info.items()): - self[key.lower()] = value - self.status = int(self["status"]) - else: - for key, value in info.items(): - self[key.lower()] = value - self.status = int(self.get("status", self.status)) - - def __getattr__(self, name): - if name == "dict": - return self - else: - raise AttributeError(name) diff --git a/shotgun_api3/lib/httplib2/python3/__pycache__/__init__.cpython-310.pyc b/shotgun_api3/lib/httplib2/python3/__pycache__/__init__.cpython-310.pyc new file mode 100644 index 000000000..5252a4a8c Binary files /dev/null and b/shotgun_api3/lib/httplib2/python3/__pycache__/__init__.cpython-310.pyc differ diff --git a/shotgun_api3/lib/httplib2/python3/__pycache__/auth.cpython-310.pyc b/shotgun_api3/lib/httplib2/python3/__pycache__/auth.cpython-310.pyc new file mode 100644 index 000000000..40bd5a8d0 Binary files /dev/null and b/shotgun_api3/lib/httplib2/python3/__pycache__/auth.cpython-310.pyc differ diff --git a/shotgun_api3/lib/httplib2/python3/__pycache__/certs.cpython-310.pyc b/shotgun_api3/lib/httplib2/python3/__pycache__/certs.cpython-310.pyc new file mode 100644 index 000000000..376741d95 Binary files /dev/null and b/shotgun_api3/lib/httplib2/python3/__pycache__/certs.cpython-310.pyc differ diff --git a/shotgun_api3/lib/httplib2/python3/__pycache__/error.cpython-310.pyc b/shotgun_api3/lib/httplib2/python3/__pycache__/error.cpython-310.pyc new file mode 100644 index 000000000..c894a54d4 Binary files /dev/null and b/shotgun_api3/lib/httplib2/python3/__pycache__/error.cpython-310.pyc differ diff --git a/shotgun_api3/lib/httplib2/python3/__pycache__/iri2uri.cpython-310.pyc b/shotgun_api3/lib/httplib2/python3/__pycache__/iri2uri.cpython-310.pyc new file mode 100644 index 000000000..78828c4fb Binary files /dev/null and b/shotgun_api3/lib/httplib2/python3/__pycache__/iri2uri.cpython-310.pyc differ diff --git a/shotgun_api3/lib/httplib2/python3/__pycache__/socks.cpython-310.pyc b/shotgun_api3/lib/httplib2/python3/__pycache__/socks.cpython-310.pyc new file mode 100644 index 000000000..176d842d9 Binary files /dev/null and b/shotgun_api3/lib/httplib2/python3/__pycache__/socks.cpython-310.pyc differ diff --git a/shotgun_api3/lib/httplib2/python3/auth.py b/shotgun_api3/lib/httplib2/python3/auth.py deleted file mode 100644 index 53f427be1..000000000 --- a/shotgun_api3/lib/httplib2/python3/auth.py +++ /dev/null @@ -1,69 +0,0 @@ -import base64 -import re - -from ... import pyparsing as pp - -from .error import * - - -try: # pyparsing>=3.0.0 - downcaseTokens = pp.common.downcaseTokens -except AttributeError: - downcaseTokens = pp.downcaseTokens - -UNQUOTE_PAIRS = re.compile(r"\\(.)") -unquote = lambda s, l, t: UNQUOTE_PAIRS.sub(r"\1", t[0][1:-1]) - -# https://tools.ietf.org/html/rfc7235#section-1.2 -# https://tools.ietf.org/html/rfc7235#appendix-B -tchar = "!#$%&'*+-.^_`|~" + pp.nums + pp.alphas -token = pp.Word(tchar).setName("token") -token68 = pp.Combine(pp.Word("-._~+/" + pp.nums + pp.alphas) + pp.Optional(pp.Word("=").leaveWhitespace())).setName( - "token68" -) - -quoted_string = pp.dblQuotedString.copy().setName("quoted-string").setParseAction(unquote) -auth_param_name = token.copy().setName("auth-param-name").addParseAction(downcaseTokens) -auth_param = auth_param_name + pp.Suppress("=") + (quoted_string | token) -params = pp.Dict(pp.delimitedList(pp.Group(auth_param))) - -scheme = token("scheme") -challenge = scheme + (params("params") | token68("token")) - -authentication_info = params.copy() -www_authenticate = pp.delimitedList(pp.Group(challenge)) - - -def _parse_authentication_info(headers, headername="authentication-info"): - """https://tools.ietf.org/html/rfc7615 - """ - header = headers.get(headername, "").strip() - if not header: - return {} - try: - parsed = authentication_info.parseString(header) - except pp.ParseException as ex: - # print(ex.explain(ex)) - raise MalformedHeader(headername) - - return parsed.asDict() - - -def _parse_www_authenticate(headers, headername="www-authenticate"): - """Returns a dictionary of dictionaries, one dict per auth_scheme.""" - header = headers.get(headername, "").strip() - if not header: - return {} - try: - parsed = www_authenticate.parseString(header) - except pp.ParseException as ex: - # print(ex.explain(ex)) - raise MalformedHeader(headername) - - retval = { - challenge["scheme"].lower(): challenge["params"].asDict() - if "params" in challenge - else {"token": challenge.get("token")} - for challenge in parsed - } - return retval diff --git a/shotgun_api3/lib/httplib2/python3/cacerts.txt b/shotgun_api3/lib/httplib2/python3/cacerts.txt deleted file mode 100644 index 78a444c43..000000000 --- a/shotgun_api3/lib/httplib2/python3/cacerts.txt +++ /dev/null @@ -1,2225 +0,0 @@ -# Issuer: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Subject: CN=GTE CyberTrust Global Root O=GTE Corporation OU=GTE CyberTrust Solutions, Inc. -# Label: "GTE CyberTrust Global Root" -# Serial: 421 -# MD5 Fingerprint: ca:3d:d3:68:f1:03:5c:d0:32:fa:b8:2b:59:e8:5a:db -# SHA1 Fingerprint: 97:81:79:50:d8:1c:96:70:cc:34:d8:09:cf:79:44:31:36:7e:f4:74 -# SHA256 Fingerprint: a5:31:25:18:8d:21:10:aa:96:4b:02:c7:b7:c6:da:32:03:17:08:94:e5:fb:71:ff:fb:66:67:d5:e6:81:0a:36 ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD -VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv -bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv -b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV -UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU -cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds -b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH -iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS -r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 -04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r -GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 -3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P -lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -# Issuer: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Server CA" -# Serial: 1 -# MD5 Fingerprint: c5:70:c4:a2:ed:53:78:0c:c8:10:53:81:64:cb:d0:1d -# SHA1 Fingerprint: 23:e5:94:94:51:95:f2:41:48:03:b4:d5:64:d2:a3:a3:f5:d8:8b:8c -# SHA256 Fingerprint: b4:41:0b:73:e2:e6:ea:ca:47:fb:c4:2f:8f:a4:01:8a:f4:38:1d:c5:4c:fa:a8:44:50:46:1e:ed:09:45:4d:e9 ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm -MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx -MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 -dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl -cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 -DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD -gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 -yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX -L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj -EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG -7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e -QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ -qdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -# Issuer: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Subject: CN=Thawte Premium Server CA O=Thawte Consulting cc OU=Certification Services Division -# Label: "Thawte Premium Server CA" -# Serial: 1 -# MD5 Fingerprint: 06:9f:69:79:16:66:90:02:1b:8c:8c:a2:c3:07:6f:3a -# SHA1 Fingerprint: 62:7f:8d:78:27:65:63:99:d2:7d:7f:90:44:c9:fe:b3:f3:3e:fa:9a -# SHA256 Fingerprint: ab:70:36:36:5c:71:54:aa:29:c2:c2:9f:5d:41:91:16:3b:16:2a:22:25:01:13:57:d5:6d:07:ff:a7:bc:1f:72 ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx -FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD -VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv -biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy -dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t -MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB -MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG -A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp -b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl -cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv -bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE -VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ -ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR -uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG -9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI -hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM -pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -# Issuer: O=Equifax OU=Equifax Secure Certificate Authority -# Subject: O=Equifax OU=Equifax Secure Certificate Authority -# Label: "Equifax Secure CA" -# Serial: 903804111 -# MD5 Fingerprint: 67:cb:9d:c0:13:24:8a:82:9b:b2:17:1e:d1:1b:ec:d4 -# SHA1 Fingerprint: d2:32:09:ad:23:d3:14:23:21:74:e4:0d:7f:9d:62:13:97:86:63:3a -# SHA256 Fingerprint: 08:29:7a:40:47:db:a2:36:80:c7:31:db:6e:31:76:53:ca:78:48:e1:be:bd:3a:0b:01:79:a7:07:f9:2c:f1:78 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy -dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 -MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx -dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f -BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A -cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ -MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm -aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw -ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj -IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y -7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh -1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 ------END CERTIFICATE----- - -# Issuer: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Subject: O=VeriSign, Inc. OU=Class 3 Public Primary Certification Authority - G2/(c) 1998 VeriSign, Inc. - For authorized use only/VeriSign Trust Network -# Label: "Verisign Class 3 Public Primary Certification Authority - G2" -# Serial: 167285380242319648451154478808036881606 -# MD5 Fingerprint: a2:33:9b:4c:74:78:73:d4:6c:e7:c1:f3:8d:cb:5c:e9 -# SHA1 Fingerprint: 85:37:1c:a6:e5:50:14:3d:ce:28:03:47:1b:de:3a:09:e8:f8:77:0f -# SHA256 Fingerprint: 83:ce:3c:12:29:68:8a:59:3d:48:5f:81:97:3c:0f:91:95:43:1e:da:37:cc:5e:36:43:0e:79:c7:a8:88:63:8b ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh -c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy -MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp -emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X -DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw -FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg -UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo -YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 -MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB -AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 -pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 -13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID -AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk -U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i -F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY -oJ2daZH9 ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Subject: CN=GlobalSign Root CA O=GlobalSign nv-sa OU=Root CA -# Label: "GlobalSign Root CA" -# Serial: 4835703278459707669005204 -# MD5 Fingerprint: 3e:45:52:15:09:51:92:e1:b7:5d:37:9f:b1:87:29:8a -# SHA1 Fingerprint: b1:bc:96:8b:d4:f4:9d:62:2a:a8:9a:81:f2:15:01:52:a4:1d:82:9c -# SHA256 Fingerprint: eb:d4:10:40:e4:bb:3e:c7:42:c9:e3:81:d3:1e:f2:a4:1a:48:b6:68:5c:96:e7:ce:f3:c1:df:6c:d4:33:1c:99 ------BEGIN CERTIFICATE----- -MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG -A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv -b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw -MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i -YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT -aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ -jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp -xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp -1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG -snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ -U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 -9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B -AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz -yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE -38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP -AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad -DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME -HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2 -# Label: "GlobalSign Root CA - R2" -# Serial: 4835703278459682885658125 -# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30 -# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe -# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 -MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL -v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 -eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq -tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd -C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa -zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB -mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH -V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n -bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG -3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs -J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO -291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS -ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd -AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 -TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 1 Policy Validation Authority -# Label: "ValiCert Class 1 VA" -# Serial: 1 -# MD5 Fingerprint: 65:58:ab:15:ad:57:6c:1e:a8:a7:b5:69:ac:bf:ff:eb -# SHA1 Fingerprint: e5:df:74:3c:b6:01:c4:9b:98:43:dc:ab:8c:e8:6a:81:10:9f:e4:8e -# SHA256 Fingerprint: f4:c1:49:55:1a:30:13:a3:5b:c7:bf:fe:17:a7:f3:44:9b:c1:ab:5b:5a:0a:e7:4b:06:c2:3b:90:00:4c:01:04 ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy -NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y -LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ -TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y -TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 -LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW -I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw -nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 2 Policy Validation Authority -# Label: "ValiCert Class 2 VA" -# Serial: 1 -# MD5 Fingerprint: a9:23:75:9b:ba:49:36:6e:31:c2:db:f2:e7:66:ba:87 -# SHA1 Fingerprint: 31:7a:2a:d0:7f:2b:33:5e:f5:a1:c3:4e:4b:57:e8:b7:d8:f1:fc:a6 -# SHA256 Fingerprint: 58:d0:17:27:9c:d4:dc:63:ab:dd:b1:96:a6:c9:90:6c:30:c4:e0:87:83:ea:e8:c1:60:99:54:d6:93:55:59:6b ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy -NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY -dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 -WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS -v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v -UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu -IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC -W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd ------END CERTIFICATE----- - -# Issuer: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Subject: CN=http://www.valicert.com/ O=ValiCert, Inc. OU=ValiCert Class 3 Policy Validation Authority -# Label: "RSA Root Certificate 1" -# Serial: 1 -# MD5 Fingerprint: a2:6f:53:b7:ee:40:db:4a:68:e7:fa:18:d9:10:4b:72 -# SHA1 Fingerprint: 69:bd:8c:f4:9c:d3:00:fb:59:2e:17:93:ca:55:6a:f3:ec:aa:35:fb -# SHA256 Fingerprint: bc:23:f9:8a:31:3c:b9:2d:e3:bb:fc:3a:5a:9f:44:61:ac:39:49:4c:4a:e1:5a:9e:9d:f1:31:e9:9b:73:01:9a ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 -IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz -BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y -aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG -9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy -NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y -azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw -Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl -cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD -cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs -2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY -JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE -Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ -n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A -PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 3 Public Primary Certification Authority - G3" -# Serial: 206684696279472310254277870180966723415 -# MD5 Fingerprint: cd:68:b6:a7:c7:c4:ce:75:e0:1d:4f:57:44:61:92:09 -# SHA1 Fingerprint: 13:2d:0d:45:53:4b:69:97:cd:b2:d5:c3:39:e2:55:76:60:9b:5c:c6 -# SHA256 Fingerprint: eb:04:cf:5e:b1:f3:9a:fa:76:2f:2b:b1:20:f2:96:cb:a5:20:c1:b9:7d:b1:58:95:65:b8:1c:b9:a1:7b:72:44 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b -N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t -KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu -kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm -CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ -Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu -imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te -2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe -DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC -/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p -F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt -TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 4 Public Primary Certification Authority - G3 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 1999 VeriSign, Inc. - For authorized use only -# Label: "Verisign Class 4 Public Primary Certification Authority - G3" -# Serial: 314531972711909413743075096039378935511 -# MD5 Fingerprint: db:c8:f2:27:2e:b1:ea:6a:29:23:5d:fe:56:3e:33:df -# SHA1 Fingerprint: c8:ec:8c:87:92:69:cb:4b:ab:39:e9:8d:7e:57:67:f3:14:95:73:9d -# SHA256 Fingerprint: e3:89:36:0d:0f:db:ae:b3:d2:50:58:4b:47:30:31:4e:22:2f:39:c1:56:a0:20:14:4e:8d:96:05:61:79:15:06 ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl -cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu -LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT -aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp -dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD -VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT -aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ -bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu -IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 -GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ -+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd -U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm -NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY -ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ -ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 -CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq -g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c -2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ -bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Secure Server Certification Authority O=Entrust.net OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Secure Server CA" -# Serial: 927650371 -# MD5 Fingerprint: df:f2:80:73:cc:f1:e6:61:73:fc:f5:42:e9:c5:7c:ee -# SHA1 Fingerprint: 99:a6:9b:e6:1a:fe:88:6b:4d:2b:82:00:7c:b8:54:fc:31:7e:15:39 -# SHA256 Fingerprint: 62:f2:40:27:8c:56:4c:4d:d8:bf:7d:9d:4f:6f:36:6e:a8:94:d2:2f:5f:34:d9:89:a9:83:ac:ec:2f:ff:ed:50 ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC -VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u -ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc -KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u -ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 -MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE -ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j -b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg -U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ -I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 -wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC -AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb -oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 -BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p -dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk -MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp -b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 -MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi -E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa -MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI -hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN -95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd -2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - -# Issuer: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Subject: CN=Entrust.net Certification Authority (2048) O=Entrust.net OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.)/(c) 1999 Entrust.net Limited -# Label: "Entrust.net Premium 2048 Secure Server CA" -# Serial: 946059622 -# MD5 Fingerprint: ba:21:ea:20:d6:dd:db:8f:c1:57:8b:40:ad:a1:fc:fc -# SHA1 Fingerprint: 80:1d:62:d0:7b:44:9d:5c:5c:03:5c:98:ea:61:fa:44:3c:2a:58:fe -# SHA256 Fingerprint: d1:c3:39:ea:27:84:eb:87:0f:93:4f:c5:63:4e:4a:a9:ad:55:05:01:64:01:f2:64:65:d3:7a:57:46:63:35:9f ------BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML -RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp -bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 -IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy -MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 -LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp -YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG -A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq -K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe -sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX -MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT -XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ -HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH -4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA -vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G -CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA -WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ -h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 -f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN -B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy -vUxFnmG6v4SBkgPR0ml8xQ== ------END CERTIFICATE----- - -# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust -# Label: "Baltimore CyberTrust Root" -# Serial: 33554617 -# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4 -# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74 -# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb ------BEGIN CERTIFICATE----- -MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ -RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD -VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX -DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y -ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy -VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr -mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr -IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK -mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu -XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy -dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye -jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 -BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 -DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 -9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx -jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 -Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz -ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS -R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure Global eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure Global eBusiness CA" -# Serial: 1 -# MD5 Fingerprint: 8f:5d:77:06:27:c4:98:3c:5b:93:78:e7:d7:7d:9b:cc -# SHA1 Fingerprint: 7e:78:4a:10:1c:82:65:cc:2d:e1:f1:6d:47:b4:40:ca:d9:0a:19:45 -# SHA256 Fingerprint: 5f:0b:62:ea:b5:e3:53:ea:65:21:65:16:58:fb:b6:53:59:f4:43:28:0a:4a:fb:d1:04:d7:7d:10:f9:f0:4c:07 ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT -ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw -MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj -dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l -c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC -UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc -58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/ -o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH -MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr -aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA -A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA -Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv -8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -# Issuer: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Subject: CN=Equifax Secure eBusiness CA-1 O=Equifax Secure Inc. -# Label: "Equifax Secure eBusiness CA 1" -# Serial: 4 -# MD5 Fingerprint: 64:9c:ef:2e:44:fc:c6:8f:52:07:d0:51:73:8f:cb:3d -# SHA1 Fingerprint: da:40:18:8b:91:89:a3:ed:ee:ae:da:97:fe:2f:9d:f5:b7:d1:8a:41 -# SHA256 Fingerprint: cf:56:ff:46:a4:a1:86:10:9d:d9:65:84:b5:ee:b5:8a:51:0c:42:75:b0:e5:f9:4f:40:bb:ae:86:5e:19:f6:73 ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT -ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw -MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j -LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ -KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo -RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu -WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw -Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD -AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK -eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM -zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+ -WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN -/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -# Issuer: O=Equifax Secure OU=Equifax Secure eBusiness CA-2 -# Subject: O=Equifax Secure OU=Equifax Secure eBusiness CA-2 -# Label: "Equifax Secure eBusiness CA 2" -# Serial: 930140085 -# MD5 Fingerprint: aa:bf:bf:64:97:da:98:1d:6f:c6:08:3a:95:70:33:ca -# SHA1 Fingerprint: 39:4f:f6:85:0b:06:be:52:e5:18:56:cc:10:e1:80:e8:82:b3:85:cc -# SHA256 Fingerprint: 2f:27:4e:48:ab:a4:ac:7b:76:59:33:10:17:75:50:6d:c3:0e:e3:8e:f6:ac:d5:c0:49:32:cf:e0:41:23:42:20 ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj -dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0 -NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD -VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B -AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G -vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/ -BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C -AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX -MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl -IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw -NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq -y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF -MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA -A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy -0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1 -E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Class 1 CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Low-Value Services Root" -# Serial: 1 -# MD5 Fingerprint: 1e:42:95:02:33:92:6b:b9:5f:c0:7f:da:d6:b2:4b:fc -# SHA1 Fingerprint: cc:ab:0e:a0:4c:23:01:d6:69:7b:dd:37:9f:cd:12:eb:24:e3:94:9d -# SHA256 Fingerprint: 8c:72:09:27:9a:c0:4e:27:5e:16:d0:7f:d3:b7:75:e8:01:54:b5:96:80:46:e3:1f:52:dd:25:76:63:24:e9:a7 ------BEGIN CERTIFICATE----- -MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw -MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML -QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD -VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA -A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul -CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n -tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl -dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch -PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC -+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O -BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E -BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl -MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk -ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB -IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X -7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz -43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY -eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl -pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA -WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Subject: CN=AddTrust External CA Root O=AddTrust AB OU=AddTrust External TTP Network -# Label: "AddTrust External Root" -# Serial: 1 -# MD5 Fingerprint: 1d:35:54:04:85:78:b0:3f:42:42:4d:bf:20:73:0a:3f -# SHA1 Fingerprint: 02:fa:f3:e2:91:43:54:68:60:78:57:69:4d:f5:e4:5b:68:85:18:68 -# SHA256 Fingerprint: 68:7f:a4:51:38:22:78:ff:f0:c8:b1:1f:8d:43:d5:76:67:1c:6e:b2:bc:ea:b4:13:fb:83:d9:65:d0:6d:2f:f2 ------BEGIN CERTIFICATE----- -MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs -IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 -MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux -FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h -bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v -dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt -H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 -uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX -mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX -a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN -E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 -WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD -VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 -Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU -cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx -IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN -AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH -YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 -6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC -Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX -c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a -mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Public CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Public Services Root" -# Serial: 1 -# MD5 Fingerprint: c1:62:3e:23:c5:82:73:9c:03:59:4b:2b:e9:77:49:7f -# SHA1 Fingerprint: 2a:b6:28:48:5e:78:fb:f3:ad:9e:79:10:dd:6b:df:99:72:2c:96:e5 -# SHA256 Fingerprint: 07:91:ca:07:49:b2:07:82:aa:d3:c7:d7:bd:0c:df:c9:48:58:35:84:3e:b2:d7:99:60:09:ce:43:ab:6c:69:27 ------BEGIN CERTIFICATE----- -MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx -MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB -ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV -BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV -6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX -GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP -dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH -1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF -62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW -BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw -AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL -MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU -cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv -b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 -IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ -iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao -GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh -4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm -XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= ------END CERTIFICATE----- - -# Issuer: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Subject: CN=AddTrust Qualified CA Root O=AddTrust AB OU=AddTrust TTP Network -# Label: "AddTrust Qualified Certificates Root" -# Serial: 1 -# MD5 Fingerprint: 27:ec:39:47:cd:da:5a:af:e2:9a:01:65:21:a9:4c:bb -# SHA1 Fingerprint: 4d:23:78:ec:91:95:39:b5:00:7f:75:8f:03:3b:21:1e:c5:4d:8b:cf -# SHA256 Fingerprint: 80:95:21:08:05:db:4b:bc:35:5e:44:28:d8:fd:6e:c2:cd:e3:ab:5f:b9:7a:99:42:98:8e:b8:f4:dc:d0:60:16 ------BEGIN CERTIFICATE----- -MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU -MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 -b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 -MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK -EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh -BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq -xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G -87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i -2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U -WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 -0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G -A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr -pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL -ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm -aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv -hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm -hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X -dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 -P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y -iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no -xqE= ------END CERTIFICATE----- - -# Issuer: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Subject: CN=Entrust Root Certification Authority O=Entrust, Inc. OU=www.entrust.net/CPS is incorporated by reference/(c) 2006 Entrust, Inc. -# Label: "Entrust Root Certification Authority" -# Serial: 1164660820 -# MD5 Fingerprint: d6:a5:c3:ed:5d:dd:3e:00:c1:3d:87:92:1f:1d:3f:e4 -# SHA1 Fingerprint: b3:1e:b1:b7:40:e3:6c:84:02:da:dc:37:d4:4d:f5:d4:67:49:52:f9 -# SHA256 Fingerprint: 73:c1:76:43:4f:1b:c6:d5:ad:f4:5b:0e:76:e7:27:28:7c:8d:e5:76:16:c1:e6:e6:14:1a:2b:2c:bc:7d:8e:4c ------BEGIN CERTIFICATE----- -MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC -VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 -Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW -KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw -NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw -NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy -ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV -BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ -KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo -Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 -4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 -KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI -rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi -94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB -sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi -gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo -kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE -vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA -A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t -O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua -AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP -9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ -eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m -0vdXcDazv/wor3ElhVsT/h5/WrQ8 ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA O=GeoTrust Inc. -# Label: "GeoTrust Global CA" -# Serial: 144470 -# MD5 Fingerprint: f7:75:ab:29:fb:51:4e:b7:77:5e:ff:05:3c:99:8e:f5 -# SHA1 Fingerprint: de:28:f4:a4:ff:e5:b9:2f:a3:c5:03:d1:a3:49:a7:f9:96:2a:82:12 -# SHA256 Fingerprint: ff:85:6a:2d:25:1d:cd:88:d3:66:56:f4:50:12:67:98:cf:ab:aa:de:40:79:9c:72:2d:e4:d2:b5:db:36:a7:3a ------BEGIN CERTIFICATE----- -MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT -MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i -YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg -R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 -9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq -fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv -iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU -1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ -bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW -MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA -ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l -uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn -Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS -tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF -PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un -hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV -5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Global CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Global CA 2" -# Serial: 1 -# MD5 Fingerprint: 0e:40:a7:6c:de:03:5d:8f:d1:0f:e4:d1:8d:f9:6c:a9 -# SHA1 Fingerprint: a9:e9:78:08:14:37:58:88:f2:05:19:b0:6d:2b:0d:2b:60:16:90:7d -# SHA256 Fingerprint: ca:2d:82:a0:86:77:07:2f:8a:b6:76:4f:f0:35:67:6c:fe:3e:5e:32:5e:01:21:72:df:3f:92:09:6d:b7:9b:85 ------BEGIN CERTIFICATE----- -MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs -IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG -EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg -R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A -PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8 -Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL -TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL -5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7 -S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe -2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE -FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap -EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td -EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv -/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN -A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0 -abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF -I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz -4iIprn2DQKi6bA== ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA O=GeoTrust Inc. -# Label: "GeoTrust Universal CA" -# Serial: 1 -# MD5 Fingerprint: 92:65:58:8b:a2:1a:31:72:73:68:5c:b4:a5:7a:07:48 -# SHA1 Fingerprint: e6:21:f3:35:43:79:05:9a:4b:68:30:9d:8a:2f:74:22:15:87:ec:79 -# SHA256 Fingerprint: a0:45:9b:9f:63:b2:25:59:f5:fa:5d:4c:6d:b3:f9:f7:2f:f1:93:42:03:35:78:f0:73:bf:1d:1b:46:cb:b9:12 ------BEGIN CERTIFICATE----- -MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy -c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE -BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0 -IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV -VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8 -cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT -QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh -F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v -c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w -mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd -VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX -teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ -f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe -Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+ -nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB -/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY -MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG -9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc -aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX -IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn -ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z -uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN -Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja -QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW -koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9 -ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt -DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm -bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Subject: CN=GeoTrust Universal CA 2 O=GeoTrust Inc. -# Label: "GeoTrust Universal CA 2" -# Serial: 1 -# MD5 Fingerprint: 34:fc:b8:d0:36:db:9e:14:b3:c2:f2:db:8f:e4:94:c7 -# SHA1 Fingerprint: 37:9a:19:7b:41:85:45:35:0c:a6:03:69:f3:3c:2e:af:47:4f:20:79 -# SHA256 Fingerprint: a0:23:4f:3b:c8:52:7c:a5:62:8e:ec:81:ad:5d:69:89:5d:a5:68:0d:c9:1d:1c:b8:47:7f:33:f8:78:b9:5b:0b ------BEGIN CERTIFICATE----- -MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW -MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy -c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD -VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1 -c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC -AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81 -WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG -FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq -XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL -se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb -KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd -IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73 -y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt -hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc -QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4 -Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV -HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ -KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z -dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ -L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr -Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo -ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY -T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz -GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m -1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV -OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH -6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX -QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS ------END CERTIFICATE----- - -# Issuer: CN=America Online Root Certification Authority 1 O=America Online Inc. -# Subject: CN=America Online Root Certification Authority 1 O=America Online Inc. -# Label: "America Online Root Certification Authority 1" -# Serial: 1 -# MD5 Fingerprint: 14:f1:08:ad:9d:fa:64:e2:89:e7:1c:cf:a8:ad:7d:5e -# SHA1 Fingerprint: 39:21:c1:15:c1:5d:0e:ca:5c:cb:5b:c4:f0:7d:21:d8:05:0b:56:6a -# SHA256 Fingerprint: 77:40:73:12:c6:3a:15:3d:5b:c0:0b:4e:51:75:9c:df:da:c2:37:dc:2a:33:b6:79:46:e9:8e:9b:fa:68:0a:e3 ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk -hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym -1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW -OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb -2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko -O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw -AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU -AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB -BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF -Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb -LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir -oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C -MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -# Issuer: CN=America Online Root Certification Authority 2 O=America Online Inc. -# Subject: CN=America Online Root Certification Authority 2 O=America Online Inc. -# Label: "America Online Root Certification Authority 2" -# Serial: 1 -# MD5 Fingerprint: d6:ed:3c:ca:e2:66:0f:af:10:43:0d:77:9b:04:09:bf -# SHA1 Fingerprint: 85:b5:ff:67:9b:0c:79:96:1f:c8:6e:44:22:00:46:13:db:17:92:84 -# SHA256 Fingerprint: 7d:3b:46:5a:60:14:e5:26:c0:af:fc:ee:21:27:d2:31:17:27:ad:81:1c:26:84:2d:00:6a:f3:73:06:cc:80:bd ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc -MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP -bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2 -MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft -ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP -ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC -206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci -KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2 -JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9 -BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e -Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B -PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67 -Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq -Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ -o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3 -+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj -YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj -FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn -xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2 -LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc -obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8 -CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe -IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA -DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F -AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX -Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb -AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl -Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw -RY8mkaKO/qk= ------END CERTIFICATE----- - -# Issuer: CN=AAA Certificate Services O=Comodo CA Limited -# Subject: CN=AAA Certificate Services O=Comodo CA Limited -# Label: "Comodo AAA Services root" -# Serial: 1 -# MD5 Fingerprint: 49:79:04:b0:eb:87:19:ac:47:b0:bc:11:51:9b:74:d0 -# SHA1 Fingerprint: d1:eb:23:a4:6d:17:d6:8f:d9:25:64:c2:f1:f1:60:17:64:d8:e3:49 -# SHA256 Fingerprint: d7:a7:a0:fb:5d:7e:27:31:d7:71:e9:48:4e:bc:de:f7:1d:5f:0c:3e:0a:29:48:78:2b:c8:3e:e0:ea:69:9e:f4 ------BEGIN CERTIFICATE----- -MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj -YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM -GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP -ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua -BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe -3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 -YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR -rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm -ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU -oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF -MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v -QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t -b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF -AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q -GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz -Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 -G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi -l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 -smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== ------END CERTIFICATE----- - -# Issuer: CN=Secure Certificate Services O=Comodo CA Limited -# Subject: CN=Secure Certificate Services O=Comodo CA Limited -# Label: "Comodo Secure Services root" -# Serial: 1 -# MD5 Fingerprint: d3:d9:bd:ae:9f:ac:67:24:b3:c8:1b:52:e1:b9:a9:bd -# SHA1 Fingerprint: 4a:65:d5:f4:1d:ef:39:b8:b8:90:4a:4a:d3:64:81:33:cf:c7:a1:d1 -# SHA256 Fingerprint: bd:81:ce:3b:4f:65:91:d1:1a:67:b5:fc:7a:47:fd:ef:25:52:1b:f9:aa:4e:18:b9:e3:df:2e:34:a7:80:3b:e8 ------BEGIN CERTIFICATE----- -MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp -ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow -fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV -BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM -cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S -HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 -CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk -3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz -6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV -HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv -Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw -Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww -DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 -5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj -Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI -gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ -aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl -izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= ------END CERTIFICATE----- - -# Issuer: CN=Trusted Certificate Services O=Comodo CA Limited -# Subject: CN=Trusted Certificate Services O=Comodo CA Limited -# Label: "Comodo Trusted Services root" -# Serial: 1 -# MD5 Fingerprint: 91:1b:3f:6e:cd:9e:ab:ee:07:fe:1f:71:d2:b3:61:27 -# SHA1 Fingerprint: e1:9f:e3:0e:8b:84:60:9e:80:9b:17:0d:72:a8:c5:ba:6e:14:09:bd -# SHA256 Fingerprint: 3f:06:e5:56:81:d4:96:f5:be:16:9e:b5:38:9f:9f:2b:8f:f6:1e:17:08:df:68:81:72:48:49:cd:5d:27:cb:69 ------BEGIN CERTIFICATE----- -MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb -MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow -GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 -aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla -MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO -BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD -VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B -AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW -fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt -TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL -fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW -1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 -kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G -A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD -VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v -ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo -dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu -Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ -HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 -pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS -jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ -xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn -dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi ------END CERTIFICATE----- - -# Issuer: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN - DATACorp SGC O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN DATACorp SGC Root CA" -# Serial: 91374294542884689855167577680241077609 -# MD5 Fingerprint: b3:a5:3e:77:21:6d:ac:4a:c0:c9:fb:d5:41:3d:ca:06 -# SHA1 Fingerprint: 58:11:9f:0e:12:82:87:ea:50:fd:d9:87:45:6f:4f:78:dc:fa:d6:d4 -# SHA256 Fingerprint: 85:fb:2f:91:dd:12:27:5a:01:45:b6:36:53:4f:84:02:4a:d6:8b:69:b8:ee:88:68:4f:f7:11:37:58:05:b3:48 ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB -kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw -IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG -EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD -VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu -dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN -BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 -E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ -D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK -4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq -lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW -bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB -o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT -MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js -LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr -BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB -AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj -j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH -KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv -2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 -mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -# Issuer: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Subject: CN=UTN-USERFirst-Hardware O=The USERTRUST Network OU=http://www.usertrust.com -# Label: "UTN USERFirst Hardware Root CA" -# Serial: 91374294542884704022267039221184531197 -# MD5 Fingerprint: 4c:56:41:e5:0d:bb:2b:e8:ca:a3:ed:18:08:ad:43:39 -# SHA1 Fingerprint: 04:83:ed:33:99:ac:36:08:05:87:22:ed:bc:5e:46:00:e3:be:f9:d7 -# SHA256 Fingerprint: 6e:a5:47:41:d0:04:66:7e:ed:1b:48:16:63:4a:a3:a7:9e:6e:4b:96:95:0f:82:79:da:fc:8d:9b:d8:81:21:37 ------BEGIN CERTIFICATE----- -MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB -lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug -Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt -SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG -A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe -MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v -d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh -cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn -0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ -M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a -MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd -oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI -DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy -oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD -VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 -dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy -bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF -BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM -//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli -CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE -CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t -3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS -KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== ------END CERTIFICATE----- - -# Issuer: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Subject: CN=XRamp Global Certification Authority O=XRamp Security Services Inc OU=www.xrampsecurity.com -# Label: "XRamp Global CA Root" -# Serial: 107108908803651509692980124233745014957 -# MD5 Fingerprint: a1:0b:44:b3:ca:10:d8:00:6e:9d:0f:d8:0f:92:0a:d1 -# SHA1 Fingerprint: b8:01:86:d1:eb:9c:86:a5:41:04:cf:30:54:f3:4c:52:b7:e5:58:c6 -# SHA256 Fingerprint: ce:cd:dc:90:50:99:d8:da:df:c5:b1:d2:09:b7:37:cb:e2:c1:8c:fb:2c:10:c0:ff:0b:cf:0d:32:86:fc:1a:a2 ------BEGIN CERTIFICATE----- -MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB -gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk -MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY -UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx -NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 -dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy -dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB -dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 -38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP -KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q -DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 -qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa -JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi -PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P -BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs -jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 -eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD -ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR -vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt -qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa -IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy -i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ -O+7ETPTsJ3xCwnR8gooJybQDJbw= ------END CERTIFICATE----- - -# Issuer: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Subject: O=The Go Daddy Group, Inc. OU=Go Daddy Class 2 Certification Authority -# Label: "Go Daddy Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 91:de:06:25:ab:da:fd:32:17:0c:bb:25:17:2a:84:67 -# SHA1 Fingerprint: 27:96:ba:e6:3f:18:01:e2:77:26:1b:a0:d7:77:70:02:8f:20:ee:e4 -# SHA256 Fingerprint: c3:84:6b:f2:4b:9e:93:ca:64:27:4c:0e:c6:7c:1e:cc:5e:02:4f:fc:ac:d2:d7:40:19:35:0e:81:fe:54:6a:e4 ------BEGIN CERTIFICATE----- -MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh -MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE -YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 -MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo -ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg -MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN -ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA -PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w -wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi -EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY -avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ -YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE -sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h -/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 -IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj -YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD -ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy -OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P -TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ -HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER -dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf -ReYNnyicsbkqWletNw+vHX/bvZ8= ------END CERTIFICATE----- - -# Issuer: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Subject: O=Starfield Technologies, Inc. OU=Starfield Class 2 Certification Authority -# Label: "Starfield Class 2 CA" -# Serial: 0 -# MD5 Fingerprint: 32:4a:4b:bb:c8:63:69:9b:be:74:9a:c6:dd:1d:46:24 -# SHA1 Fingerprint: ad:7e:1c:28:b0:64:ef:8f:60:03:40:20:14:c3:d0:e3:37:0e:b5:8a -# SHA256 Fingerprint: 14:65:fa:20:53:97:b8:76:fa:a6:f0:a9:95:8e:55:90:e4:0f:cc:7f:aa:4f:b7:c2:c8:67:75:21:fb:5f:b6:58 ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl -MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp -U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw -NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE -ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp -ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 -DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf -8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN -+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 -X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa -K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA -1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G -A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR -zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 -YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD -bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w -DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 -L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D -eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl -xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp -VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY -WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 1 -# MD5 Fingerprint: 22:4d:8f:8a:fc:f7:35:c2:bb:57:34:90:7b:8b:22:16 -# SHA1 Fingerprint: 3e:2b:f7:f2:03:1b:96:f3:8c:e6:c4:d8:a8:5d:3e:2d:58:47:6a:0f -# SHA256 Fingerprint: c7:66:a9:be:f2:d4:07:1c:86:3a:31:aa:49:20:e8:13:b2:d1:98:60:8c:b7:b7:cf:e2:11:43:b8:36:df:09:ea ------BEGIN CERTIFICATE----- -MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE -FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j -ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js -LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM -BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 -Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy -dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh -cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh -YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg -dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp -bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ -YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT -TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ -9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 -jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW -FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz -ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 -ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L -EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu -L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq -yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC -O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V -um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh -NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Assured ID Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Assured ID Root CA" -# Serial: 17154717934120587862167794914071425081 -# MD5 Fingerprint: 87:ce:0b:7b:2a:0e:49:00:e1:58:71:9b:37:a8:93:72 -# SHA1 Fingerprint: 05:63:b8:63:0d:62:d7:5a:bb:c8:ab:1e:4b:df:b5:a8:99:b2:4d:43 -# SHA256 Fingerprint: 3e:90:99:b5:01:5e:8f:48:6c:00:bc:ea:9d:11:1e:e7:21:fa:ba:35:5a:89:bc:f1:df:69:56:1e:3d:c6:32:5c ------BEGIN CERTIFICATE----- -MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv -b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG -EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl -cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi -MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c -JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP -mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ -wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 -VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ -AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB -AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW -BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun -pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC -dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf -fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm -NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx -H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe -+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert Global Root CA" -# Serial: 10944719598952040374951832963794454346 -# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e -# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36 -# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61 ------BEGIN CERTIFICATE----- -MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD -QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB -CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 -nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt -43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P -T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 -gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO -BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR -TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw -DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr -hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg -06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF -PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls -YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk -CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= ------END CERTIFICATE----- - -# Issuer: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Subject: CN=DigiCert High Assurance EV Root CA O=DigiCert Inc OU=www.digicert.com -# Label: "DigiCert High Assurance EV Root CA" -# Serial: 3553400076410547919724730734378100087 -# MD5 Fingerprint: d4:74:de:57:5c:39:b2:d3:9c:85:83:c5:c0:65:49:8a -# SHA1 Fingerprint: 5f:b7:ee:06:33:e2:59:db:ad:0c:4c:9a:e6:d3:8f:1a:61:c7:dc:25 -# SHA256 Fingerprint: 74:31:e5:f4:c3:c1:ce:46:90:77:4f:0b:61:e0:54:40:88:3b:a9:a0:1e:d0:0b:a6:ab:d7:80:6e:d3:b1:18:cf ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j -ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 -LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug -RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm -+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW -PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM -xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB -Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 -hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg -EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF -MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA -FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec -nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z -eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF -hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 -Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe -vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep -+OkuE6N36B9K ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Subject: CN=GeoTrust Primary Certification Authority O=GeoTrust Inc. -# Label: "GeoTrust Primary Certification Authority" -# Serial: 32798226551256963324313806436981982369 -# MD5 Fingerprint: 02:26:c3:01:5e:08:30:37:43:a9:d0:7d:cf:37:e6:bf -# SHA1 Fingerprint: 32:3c:11:8e:1b:f7:b8:b6:52:54:e2:e2:10:0d:d6:02:90:37:f0:96 -# SHA256 Fingerprint: 37:d5:10:06:c5:12:ea:ab:62:64:21:f1:ec:8c:92:01:3f:c5:f8:2a:e9:8e:e5:33:eb:46:19:b8:de:b4:d0:6c ------BEGIN CERTIFICATE----- -MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY -MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo -R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx -MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK -Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp -ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 -AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA -ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 -7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W -kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI -mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ -KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 -6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl -4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K -oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj -UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU -AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA O=thawte, Inc. OU=Certification Services Division/(c) 2006 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA" -# Serial: 69529181992039203566298953787712940909 -# MD5 Fingerprint: 8c:ca:dc:0b:22:ce:f5:be:72:ac:41:1a:11:a8:d8:12 -# SHA1 Fingerprint: 91:c6:d6:ee:3e:8a:c8:63:84:e5:48:c2:99:29:5c:75:6c:81:7b:81 -# SHA256 Fingerprint: 8d:72:2f:81:a9:c1:13:c0:79:1d:f1:36:a2:96:6d:b2:6c:95:0a:97:1d:b4:6b:41:99:f4:ea:54:b7:8b:fb:9f ------BEGIN CERTIFICATE----- -MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB -qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV -BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw -NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j -LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG -A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs -W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta -3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk -6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 -Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J -NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA -MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP -r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU -DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz -YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX -xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 -/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ -LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 -jVaMaA== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G5 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2006 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G5" -# Serial: 33037644167568058970164719475676101450 -# MD5 Fingerprint: cb:17:e4:31:67:3e:e2:09:fe:45:57:93:f3:0a:fa:1c -# SHA1 Fingerprint: 4e:b6:d5:78:49:9b:1c:cf:5f:58:1e:ad:56:be:3d:9b:67:44:a5:e5 -# SHA256 Fingerprint: 9a:cf:ab:7e:43:c8:d8:80:d0:6b:26:2a:94:de:ee:e4:b4:65:99:89:c3:d0:ca:f1:9b:af:64:05:e4:1a:b7:df ------BEGIN CERTIFICATE----- -MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB -yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW -ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 -nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex -t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz -SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG -BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ -rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ -NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E -BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH -BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy -aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv -MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE -p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y -5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK -WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ -4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N -hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq ------END CERTIFICATE----- - -# Issuer: CN=COMODO Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO Certification Authority O=COMODO CA Limited -# Label: "COMODO Certification Authority" -# Serial: 104350513648249232941998508985834464573 -# MD5 Fingerprint: 5c:48:dc:f7:42:72:ec:56:94:6d:1c:cc:71:35:80:75 -# SHA1 Fingerprint: 66:31:bf:9e:f7:4f:9e:b6:c9:d5:a6:0c:ba:6a:be:d1:f7:bd:ef:7b -# SHA256 Fingerprint: 0c:2c:d6:3d:f7:80:6f:a3:99:ed:e8:09:11:6b:57:5b:f8:79:89:f0:65:18:f9:80:8c:86:05:03:17:8b:af:66 ------BEGIN CERTIFICATE----- -MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB -gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G -A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV -BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw -MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl -YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P -RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 -UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI -2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 -Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp -+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ -DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O -nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW -/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g -PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u -QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY -SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv -IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ -RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 -zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd -BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB -ZQ== ------END CERTIFICATE----- - -# Issuer: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Subject: CN=Network Solutions Certificate Authority O=Network Solutions L.L.C. -# Label: "Network Solutions Certificate Authority" -# Serial: 116697915152937497490437556386812487904 -# MD5 Fingerprint: d3:f3:a6:16:c0:fa:6b:1d:59:b1:2d:96:4d:0e:11:2e -# SHA1 Fingerprint: 74:f8:a3:c3:ef:e7:b3:90:06:4b:83:90:3c:21:64:60:20:e5:df:ce -# SHA256 Fingerprint: 15:f0:ba:00:a3:ac:7a:f3:ac:88:4c:07:2b:10:11:a0:77:bd:77:c0:97:f4:01:64:b2:f8:59:8a:bd:83:86:0c ------BEGIN CERTIFICATE----- -MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi -MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu -MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp -dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV -UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO -ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz -c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP -OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl -mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF -BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 -qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw -gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB -BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu -bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp -dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 -6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ -h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH -/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv -wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN -pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey ------END CERTIFICATE----- - -# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited -# Label: "COMODO ECC Certification Authority" -# Serial: 41578283867086692638256921589707938090 -# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23 -# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11 -# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7 ------BEGIN CERTIFICATE----- -MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL -MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE -BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT -IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw -MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy -ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N -T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv -biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR -FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J -cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW -BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ -BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm -fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv -GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA -# Subject: CN=TC TrustCenter Class 2 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 2 CA -# Label: "TC TrustCenter Class 2 CA II" -# Serial: 941389028203453866782103406992443 -# MD5 Fingerprint: ce:78:33:5c:59:78:01:6e:18:ea:b9:36:a0:b9:2e:23 -# SHA1 Fingerprint: ae:50:83:ed:7c:f4:5c:bc:8f:61:c6:21:fe:68:5d:79:42:21:15:6e -# SHA256 Fingerprint: e6:b8:f8:76:64:85:f8:07:ae:7f:8d:ac:16:70:46:1f:07:c0:a1:3e:ef:3a:1f:f7:17:53:8d:7a:ba:d3:91:b4 ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf -tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg -uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J -XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK -8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 -5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 -kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS -GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt -ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 -au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV -hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI -dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA -# Subject: CN=TC TrustCenter Class 3 CA II O=TC TrustCenter GmbH OU=TC TrustCenter Class 3 CA -# Label: "TC TrustCenter Class 3 CA II" -# Serial: 1506523511417715638772220530020799 -# MD5 Fingerprint: 56:5f:aa:80:61:12:17:f6:67:21:e6:2b:6d:61:56:8e -# SHA1 Fingerprint: 80:25:ef:f4:6e:70:c8:d4:72:24:65:84:fe:40:3b:8a:8d:6a:db:f5 -# SHA256 Fingerprint: 8d:a0:84:fc:f9:9c:e0:77:22:f8:9b:32:05:93:98:06:fa:5c:b8:11:e1:c8:13:f6:a1:08:c7:d3:36:b3:40:8e ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV -BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 -Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 -OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i -SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc -VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW -Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q -Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 -1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq -ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 -Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX -XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy -dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 -Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz -JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 -Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN -irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 -TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 -g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB -95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj -S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Subject: CN=TC TrustCenter Universal CA I O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Label: "TC TrustCenter Universal CA I" -# Serial: 601024842042189035295619584734726 -# MD5 Fingerprint: 45:e1:a5:72:c5:a9:36:64:40:9e:f5:e4:58:84:67:8c -# SHA1 Fingerprint: 6b:2f:34:ad:89:58:be:62:fd:b0:6b:5c:ce:bb:9d:d9:4f:4e:39:f3 -# SHA256 Fingerprint: eb:f3:c0:2a:87:89:b1:fb:7d:51:19:95:d6:63:b7:29:06:d9:13:ce:0d:5e:10:56:8a:8a:77:e2:58:61:67:e7 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx -MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg -R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD -VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN -AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR -JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T -fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu -jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z -wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ -fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD -VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G -CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 -7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn -8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs -ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ -2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - -# Issuer: CN=Cybertrust Global Root O=Cybertrust, Inc -# Subject: CN=Cybertrust Global Root O=Cybertrust, Inc -# Label: "Cybertrust Global Root" -# Serial: 4835703278459682877484360 -# MD5 Fingerprint: 72:e4:4a:87:e3:69:40:80:77:ea:bc:e3:f4:ff:f0:e1 -# SHA1 Fingerprint: 5f:43:e5:b1:bf:f8:78:8c:ac:1c:c7:ca:4a:9a:c6:22:2b:cc:34:c6 -# SHA256 Fingerprint: 96:0a:df:00:63:e9:63:56:75:0c:29:65:dd:0a:08:67:da:0b:9c:bd:6e:77:71:4a:ea:fb:23:49:ab:39:3d:a3 ------BEGIN CERTIFICATE----- -MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYG -A1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2Jh -bCBSb290MB4XDTA2MTIxNTA4MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UE -ChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBS -b290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+Mi8vRRQZhP/8NN5 -7CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW0ozS -J8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2y -HLtgwEZLAfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iP -t3sMpTjr3kfb1V05/Iin89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNz -FtApD0mpSPCzqrdsxacwOUBdrsTiXSZT8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAY -XSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ -MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2MDSgMqAw -hi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3Js -MB8GA1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUA -A4IBAQBW7wojoFROlZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMj -Wqd8BfP9IjsO0QbE2zZMcwSO5bAi5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUx -XOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2hO0j9n0Hq0V+09+zv+mKts2o -omcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+TX3EJIrduPuoc -A06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW -WL1WMRJOEcgh4LMRkWXbtKaIOM5V ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G3 O=GeoTrust Inc. OU=(c) 2008 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G3" -# Serial: 28809105769928564313984085209975885599 -# MD5 Fingerprint: b5:e8:34:36:c9:10:44:58:48:70:6d:2e:83:d4:b8:05 -# SHA1 Fingerprint: 03:9e:ed:b8:0b:e7:a0:3c:69:53:89:3b:20:d2:d9:32:3a:4c:2a:fd -# SHA256 Fingerprint: b4:78:b8:12:25:0d:f8:78:63:5c:2a:a7:ec:7d:15:5e:aa:62:5e:e8:29:16:e2:cd:29:43:61:88:6c:d1:fb:d4 ------BEGIN CERTIFICATE----- -MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB -mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT -MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s -eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ -BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg -MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 -BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg -LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz -+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm -hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn -5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W -JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL -DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC -huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw -HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB -AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB -zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN -kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD -AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH -SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G -spki4cErx5z481+oghLrGREt ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G2 O=thawte, Inc. OU=(c) 2007 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G2" -# Serial: 71758320672825410020661621085256472406 -# MD5 Fingerprint: 74:9d:ea:60:24:c4:fd:22:53:3e:cc:3a:72:d9:29:4f -# SHA1 Fingerprint: aa:db:bc:22:23:8f:c4:01:a1:27:bb:38:dd:f4:1d:db:08:9e:f0:12 -# SHA256 Fingerprint: a4:31:0d:50:af:18:a6:44:71:90:37:2a:86:af:af:8b:95:1f:fb:43:1d:83:7f:1e:56:88:b4:59:71:ed:15:57 ------BEGIN CERTIFICATE----- -MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL -MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp -IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi -BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw -MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh -d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig -YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v -dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ -BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 -papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E -BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K -DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 -KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox -XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== ------END CERTIFICATE----- - -# Issuer: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Subject: CN=thawte Primary Root CA - G3 O=thawte, Inc. OU=Certification Services Division/(c) 2008 thawte, Inc. - For authorized use only -# Label: "thawte Primary Root CA - G3" -# Serial: 127614157056681299805556476275995414779 -# MD5 Fingerprint: fb:1b:5d:43:8a:94:cd:44:c6:76:f2:43:4b:47:e7:31 -# SHA1 Fingerprint: f1:8b:53:8d:1b:e9:03:b6:a6:f0:56:43:5b:17:15:89:ca:f3:6b:f2 -# SHA256 Fingerprint: 4b:03:f4:58:07:ad:70:f2:1b:fc:2c:ae:71:c9:fd:e4:60:4c:06:4c:f5:ff:b6:86:ba:e5:db:aa:d7:fd:d3:4c ------BEGIN CERTIFICATE----- -MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB -rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf -Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw -MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV -BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa -Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl -LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u -MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl -ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm -gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 -YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf -b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 -9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S -zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk -OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV -HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA -2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW -oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu -t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c -KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM -m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu -MdRAGmI0Nj81Aa6sY6A= ------END CERTIFICATE----- - -# Issuer: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Subject: CN=GeoTrust Primary Certification Authority - G2 O=GeoTrust Inc. OU=(c) 2007 GeoTrust Inc. - For authorized use only -# Label: "GeoTrust Primary Certification Authority - G2" -# Serial: 80682863203381065782177908751794619243 -# MD5 Fingerprint: 01:5e:d8:6b:bd:6f:3d:8e:a1:31:f8:12:e0:98:73:6a -# SHA1 Fingerprint: 8d:17:84:d5:37:f3:03:7d:ec:70:fe:57:8b:51:9a:99:e6:10:d7:b0 -# SHA256 Fingerprint: 5e:db:7a:c4:3b:82:a0:6a:87:61:e8:d7:be:49:79:eb:f2:61:1f:7d:d7:9b:f9:1c:1c:6b:56:6a:21:9e:d7:66 ------BEGIN CERTIFICATE----- -MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL -MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj -KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 -MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 -eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV -BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw -NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV -BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH -MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL -So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal -tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG -CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT -qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz -rD6ogRLQy7rQkgu2npaqBA+K ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Universal Root Certification Authority O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2008 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Universal Root Certification Authority" -# Serial: 85209574734084581917763752644031726877 -# MD5 Fingerprint: 8e:ad:b5:01:aa:4d:81:e4:8c:1d:d1:e1:14:00:95:19 -# SHA1 Fingerprint: 36:79:ca:35:66:87:72:30:4d:30:a5:fb:87:3b:0f:a7:7b:b7:0d:54 -# SHA256 Fingerprint: 23:99:56:11:27:a5:71:25:de:8c:ef:ea:61:0d:df:2f:a0:78:b5:c8:06:7f:4e:82:82:90:bf:b8:60:e8:4b:3c ------BEGIN CERTIFICATE----- -MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB -vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL -ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp -U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W -ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe -Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX -MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 -IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y -IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh -bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF -AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF -9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH -H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H -LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN -/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT -rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud -EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw -WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs -exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud -DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 -sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ -seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz -4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ -BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR -lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 -7M2CYfE45k+XmCpajQ== ------END CERTIFICATE----- - -# Issuer: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Subject: CN=VeriSign Class 3 Public Primary Certification Authority - G4 O=VeriSign, Inc. OU=VeriSign Trust Network/(c) 2007 VeriSign, Inc. - For authorized use only -# Label: "VeriSign Class 3 Public Primary Certification Authority - G4" -# Serial: 63143484348153506665311985501458640051 -# MD5 Fingerprint: 3a:52:e1:e7:fd:6f:3a:e3:6f:f3:6f:99:1b:f9:22:41 -# SHA1 Fingerprint: 22:d5:d8:df:8f:02:31:d1:8d:f7:9d:b7:cf:8a:2d:64:c9:3f:6c:3a -# SHA256 Fingerprint: 69:dd:d7:ea:90:bb:57:c9:3e:13:5d:c8:5e:a6:fc:d5:48:0b:60:32:39:bd:c4:54:fc:75:8b:2a:26:cf:7f:79 ------BEGIN CERTIFICATE----- -MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL -MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW -ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp -U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y -aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG -A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp -U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg -SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln -biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 -IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm -GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve -fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw -AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ -aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj -aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW -kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC -4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga -FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== ------END CERTIFICATE----- - -# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R3 -# Label: "GlobalSign Root CA - R3" -# Serial: 4835703278459759426209954 -# MD5 Fingerprint: c5:df:b8:49:ca:05:13:55:ee:2d:ba:1a:c3:3e:b0:28 -# SHA1 Fingerprint: d6:9b:56:11:48:f0:1c:77:c5:45:78:c1:09:26:df:5b:85:69:76:ad -# SHA256 Fingerprint: cb:b5:22:d7:b7:f1:27:ad:6a:01:13:86:5b:df:1c:d4:10:2e:7d:07:59:af:63:5a:7c:f4:72:0d:c9:63:c5:3b ------BEGIN CERTIFICATE----- -MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G -A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp -Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 -MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG -A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 -RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT -gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm -KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd -QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ -XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw -DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o -LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU -RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp -jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK -6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX -mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs -Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH -WD9f ------END CERTIFICATE----- - -# Issuer: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Subject: CN=TC TrustCenter Universal CA III O=TC TrustCenter GmbH OU=TC TrustCenter Universal CA -# Label: "TC TrustCenter Universal CA III" -# Serial: 2010889993983507346460533407902964 -# MD5 Fingerprint: 9f:dd:db:ab:ff:8e:ff:45:21:5f:f0:6c:9d:8f:fe:2b -# SHA1 Fingerprint: 96:56:cd:7b:57:96:98:95:d0:e1:41:46:68:06:fb:b8:c6:11:06:87 -# SHA256 Fingerprint: 30:9b:4a:87:f6:ca:56:c9:31:69:aa:a9:9c:6d:98:88:54:d7:89:2b:d5:43:7e:2d:07:b2:9c:be:da:55:d3:5d ------BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL -MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV -BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1 -c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy -MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl -ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm -BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF -5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv -DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v -zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT -yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj -dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh -MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB -Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI -4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz -dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY -aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G -DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH -LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== ------END CERTIFICATE----- - -# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc. -# Label: "Go Daddy Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01 -# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b -# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da ------BEGIN CERTIFICATE----- -MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT -EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp -ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz -NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH -EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE -AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw -DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD -E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH -/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy -DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh -GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR -tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA -AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE -FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX -WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu -9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr -gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo -2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO -LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI -4uJEvlz36hz1 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: d6:39:81:c6:52:7e:96:69:fc:fc:ca:66:ed:05:f2:96 -# SHA1 Fingerprint: b5:1c:06:7c:ee:2b:0c:3d:f8:55:ab:2d:92:f4:fe:39:d4:e7:0f:0e -# SHA256 Fingerprint: 2c:e1:cb:0b:f9:d2:f9:e1:02:99:3f:be:21:51:52:c3:b2:dd:0c:ab:de:1c:68:e5:31:9b:83:91:54:db:b7:f5 ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs -ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw -MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 -b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj -aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp -Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg -nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 -HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N -Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN -dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 -HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO -BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G -CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU -sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 -4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg -8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K -pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 -mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 ------END CERTIFICATE----- - -# Issuer: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Subject: CN=Starfield Services Root Certificate Authority - G2 O=Starfield Technologies, Inc. -# Label: "Starfield Services Root Certificate Authority - G2" -# Serial: 0 -# MD5 Fingerprint: 17:35:74:af:7b:61:1c:eb:f4:f9:3c:e2:ee:40:f9:a2 -# SHA1 Fingerprint: 92:5a:8f:8d:2c:6d:04:e0:66:5f:59:6a:ff:22:d8:63:e8:25:6f:3f -# SHA256 Fingerprint: 56:8d:69:05:a2:c8:87:08:a4:b3:02:51:90:ed:cf:ed:b1:97:4a:60:6a:13:c6:e5:29:0f:cb:2a:e6:3e:da:b5 ------BEGIN CERTIFICATE----- -MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx -EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT -HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs -ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 -MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD -VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy -ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy -dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p -OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 -8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K -Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe -hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk -6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw -DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q -AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI -bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB -ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z -qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd -iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn -0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN -sSi6 ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Commercial O=AffirmTrust -# Subject: CN=AffirmTrust Commercial O=AffirmTrust -# Label: "AffirmTrust Commercial" -# Serial: 8608355977964138876 -# MD5 Fingerprint: 82:92:ba:5b:ef:cd:8a:6f:a6:3d:55:f9:84:f6:d6:b7 -# SHA1 Fingerprint: f9:b5:b6:32:45:5f:9c:be:ec:57:5f:80:dc:e9:6e:2c:c7:b2:78:b7 -# SHA256 Fingerprint: 03:76:ab:1d:54:c5:f9:80:3c:e4:b2:e2:01:a0:ee:7e:ef:7b:57:b6:36:e8:a9:3c:9b:8d:48:60:c9:6f:5f:a7 ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP -Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr -ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL -MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 -yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr -VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ -nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG -XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj -vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt -Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g -N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC -nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Networking O=AffirmTrust -# Subject: CN=AffirmTrust Networking O=AffirmTrust -# Label: "AffirmTrust Networking" -# Serial: 8957382827206547757 -# MD5 Fingerprint: 42:65:ca:be:01:9a:9a:4c:a9:8c:41:49:cd:c0:d5:7f -# SHA1 Fingerprint: 29:36:21:02:8b:20:ed:02:f5:66:c5:32:d1:d6:ed:90:9f:45:00:2f -# SHA256 Fingerprint: 0a:81:ec:5a:92:97:77:f1:45:90:4a:f3:8d:5d:50:9f:66:b5:e2:c5:8f:cd:b5:31:05:8b:0e:17:f3:f0:b4:1b ------BEGIN CERTIFICATE----- -MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz -dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL -MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp -cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y -YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua -kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL -QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp -6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG -yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i -QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ -KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO -tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu -QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ -Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u -olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 -x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium O=AffirmTrust -# Subject: CN=AffirmTrust Premium O=AffirmTrust -# Label: "AffirmTrust Premium" -# Serial: 7893706540734352110 -# MD5 Fingerprint: c4:5d:0e:48:b6:ac:28:30:4e:0a:bc:f9:38:16:87:57 -# SHA1 Fingerprint: d8:a6:33:2c:e0:03:6f:b1:85:f6:63:4f:7d:6a:06:65:26:32:28:27 -# SHA256 Fingerprint: 70:a7:3f:7f:37:6b:60:07:42:48:90:45:34:b1:14:82:d5:bf:0e:69:8e:cc:49:8d:f5:25:77:eb:f2:e9:3b:9a ------BEGIN CERTIFICATE----- -MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE -BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz -dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG -A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U -cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf -qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ -JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ -+jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS -s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 -HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 -70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG -V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S -qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S -5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia -C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX -OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE -FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 -KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg -Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B -8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ -MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc -0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ -u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF -u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH -YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 -GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO -RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e -KeC2uAloGRwYQw== ------END CERTIFICATE----- - -# Issuer: CN=AffirmTrust Premium ECC O=AffirmTrust -# Subject: CN=AffirmTrust Premium ECC O=AffirmTrust -# Label: "AffirmTrust Premium ECC" -# Serial: 8401224907861490260 -# MD5 Fingerprint: 64:b0:09:55:cf:b1:d5:99:e2:be:13:ab:a6:5d:ea:4d -# SHA1 Fingerprint: b8:23:6b:00:2f:1d:16:86:53:01:55:6c:11:a4:37:ca:eb:ff:c3:bb -# SHA256 Fingerprint: bd:71:fd:f6:da:97:e4:cf:62:d1:64:7a:dd:25:81:b0:7d:79:ad:f8:39:7e:b4:ec:ba:9c:5e:84:88:82:14:23 ------BEGIN CERTIFICATE----- -MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC -VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ -cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ -BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt -VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D -0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 -ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G -A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G -A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs -aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I -flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Subject: CN=StartCom Certification Authority O=StartCom Ltd. OU=Secure Digital Certificate Signing -# Label: "StartCom Certification Authority" -# Serial: 45 -# MD5 Fingerprint: c9:3b:0d:84:41:fc:a4:76:79:23:08:57:de:10:19:16 -# SHA1 Fingerprint: a3:f1:33:3f:e2:42:bf:cf:c5:d1:4e:8f:39:42:98:40:68:10:d1:a0 -# SHA256 Fingerprint: e1:78:90:ee:09:a3:fb:f4:f4:8b:9c:41:4a:17:d6:37:b7:a5:06:47:e9:bc:75:23:22:72:7f:cc:17:42:a9:11 ------BEGIN CERTIFICATE----- -MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg -Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 -MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi -U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh -cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA -A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk -pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf -OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C -Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT -Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi -HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM -Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w -+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ -Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 -Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B -26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID -AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD -VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul -F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC -ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w -ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk -aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 -YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg -c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 -aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 -d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG -CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 -dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF -wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS -Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst -0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc -pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl -CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF -P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK -1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm -KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE -JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ -8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm -fyWl8kgAwKQB2j8= ------END CERTIFICATE----- - -# Issuer: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Subject: CN=StartCom Certification Authority G2 O=StartCom Ltd. -# Label: "StartCom Certification Authority G2" -# Serial: 59 -# MD5 Fingerprint: 78:4b:fb:9e:64:82:0a:d3:b8:4c:62:f3:64:f2:90:64 -# SHA1 Fingerprint: 31:f1:fd:68:22:63:20:ee:c6:3b:3f:9d:ea:4a:3e:53:7c:7c:39:17 -# SHA256 Fingerprint: c7:ba:65:67:de:93:a7:98:ae:1f:aa:79:1e:71:2d:37:8f:ae:1f:93:c4:39:7f:ea:44:1b:b7:cb:e6:fd:59:95 ------BEGIN CERTIFICATE----- -MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW -MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm -aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 -OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG -A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G -CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ -JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD -vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo -D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ -Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW -RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK -HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN -nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM -0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i -UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 -Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg -TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL -BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K -2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX -UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl -6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK -9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ -HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI -wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY -XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l -IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo -hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr -so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI ------END CERTIFICATE----- - -# Issuer: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US -# Subject: CN=DigiCert Global Root G2, OU=www.digicert.com, O=DigiCert Inc, C=US -# Serial: 33af1e6a711a9a0bb2864b11d09fae5 -# MD5 Fingerprint: E4:A6:8A:C8:54:AC:52:42:46:0A:FD:72:48:1B:2A:44 -# SHA1 Fingerprint: DF:3C:24:F9:BF:D6:66:76:1B:26:80:73:FE:06:D1:CC:8D:4F:82:A4 -# SHA256 Fingerprint: CB:3C:CB:B7:60:31:E5:E0:13:8F:8D:D3:9A:23:F9:DE:47:FF:C3:5E:43:C1:14:4C:EA:27:D4:6A:5A:B1:CB:5F ------BEGIN CERTIFICATE----- -MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh -MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 -d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH -MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT -MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j -b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG -9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI -2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx -1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ -q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz -tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ -vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP -BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV -5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY -1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 -NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG -Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 -8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe -pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl -MrY= ------END CERTIFICATE----- - -# Issuer: /C=US/O=Internet Security Research Group/CN=ISRG Root X1 -# Subject: /C=US/O=Internet Security Research Group/CN=ISRG Root X1 -# Serial: 8210CFB0D240E3594463E0BB63828B00 -# SHA1 Fingerprint: CA:BD:2A:79:A1:07:6A:31:F2:1D:25:36:35:CB:03:9D:43:29:A5:E8 -# SHA256 Fingerprint: 96:BC:EC:06:26:49:76:F3:74:60:77:9A:CF:28:C5:A7:CF:E8:A3:C0:AA:E1:1A:8F:FC:EE:05:C0:BD:DF:08:C6 ------BEGIN CERTIFICATE----- -MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw -TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh -cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4 -WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu -ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY -MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc -h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+ -0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U -A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW -T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH -B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC -B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv -KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn -OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn -jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw -qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI -rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV -HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq -hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL -ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ -3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK -NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5 -ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur -TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC -jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc -oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq -4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA -mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d -emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc= ------END CERTIFICATE----- - -# Issuer: /C=US/O=Internet Security Research Group/CN=ISRG Root X2 -# Subject: /C=US/O=Internet Security Research Group/CN=ISRG Root X2 -# Serial: 41D29DD172EAEEA780C12C6CE92F8752 -# SHA1 Fingerprint: BD:B1:B9:3C:D5:97:8D:45:C6:26:14:55:F8:DB:95:C7:5A:D1:53:AF -# SHA256 Fingerprint: 69:72:9B:8E:15:A8:6E:FC:17:7A:57:AF:B7:17:1D:FC:64:AD:D2:8C:2F:CA:8C:F1:50:7E:34:45:3C:CB:14:70 ------BEGIN CERTIFICATE----- -MIICGzCCAaGgAwIBAgIQQdKd0XLq7qeAwSxs6S+HUjAKBggqhkjOPQQDAzBPMQsw -CQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2gg -R3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMjAeFw0yMDA5MDQwMDAwMDBaFw00 -MDA5MTcxNjAwMDBaME8xCzAJBgNVBAYTAlVTMSkwJwYDVQQKEyBJbnRlcm5ldCBT -ZWN1cml0eSBSZXNlYXJjaCBHcm91cDEVMBMGA1UEAxMMSVNSRyBSb290IFgyMHYw -EAYHKoZIzj0CAQYFK4EEACIDYgAEzZvVn4CDCuwJSvMWSj5cz3es3mcFDR0HttwW -+1qLFNvicWDEukWVEYmO6gbf9yoWHKS5xcUy4APgHoIYOIvXRdgKam7mAHf7AlF9 -ItgKbppbd9/w+kHsOdx1ymgHDB/qo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUfEKWrt5LSDv6kviejM9ti6lyN5UwCgYIKoZI -zj0EAwMDaAAwZQIwe3lORlCEwkSHRhtFcP9Ymd70/aTSVaYgLXTWNLxBo1BfASdW -tL4ndQavEi51mI38AjEAi/V3bNTIZargCyzuFJ0nN6T5U6VR5CmD1/iQMVtCnwr1 -/q4AaOeMSQ+2b1tbFfLn ------END CERTIFICATE----- diff --git a/shotgun_api3/lib/httplib2/python3/certs.py b/shotgun_api3/lib/httplib2/python3/certs.py deleted file mode 100644 index 59d1ffc70..000000000 --- a/shotgun_api3/lib/httplib2/python3/certs.py +++ /dev/null @@ -1,42 +0,0 @@ -"""Utilities for certificate management.""" - -import os - -certifi_available = False -certifi_where = None -try: - from certifi import where as certifi_where - certifi_available = True -except ImportError: - pass - -custom_ca_locater_available = False -custom_ca_locater_where = None -try: - from ca_certs_locater import get as custom_ca_locater_where - custom_ca_locater_available = True -except ImportError: - pass - - -BUILTIN_CA_CERTS = os.path.join( - os.path.dirname(os.path.abspath(__file__)), "cacerts.txt" -) - - -def where(): - env = os.environ.get("HTTPLIB2_CA_CERTS") - if env is not None: - if os.path.isfile(env): - return env - else: - raise RuntimeError("Environment variable HTTPLIB2_CA_CERTS not a valid file") - if custom_ca_locater_available: - return custom_ca_locater_where() - if certifi_available: - return certifi_where() - return BUILTIN_CA_CERTS - - -if __name__ == "__main__": - print(where()) diff --git a/shotgun_api3/lib/httplib2/python3/error.py b/shotgun_api3/lib/httplib2/python3/error.py deleted file mode 100644 index 0e68c12a8..000000000 --- a/shotgun_api3/lib/httplib2/python3/error.py +++ /dev/null @@ -1,48 +0,0 @@ -# All exceptions raised here derive from HttpLib2Error -class HttpLib2Error(Exception): - pass - - -# Some exceptions can be caught and optionally -# be turned back into responses. -class HttpLib2ErrorWithResponse(HttpLib2Error): - def __init__(self, desc, response, content): - self.response = response - self.content = content - HttpLib2Error.__init__(self, desc) - - -class RedirectMissingLocation(HttpLib2ErrorWithResponse): - pass - - -class RedirectLimit(HttpLib2ErrorWithResponse): - pass - - -class FailedToDecompressContent(HttpLib2ErrorWithResponse): - pass - - -class UnimplementedDigestAuthOptionError(HttpLib2ErrorWithResponse): - pass - - -class UnimplementedHmacDigestAuthOptionError(HttpLib2ErrorWithResponse): - pass - - -class MalformedHeader(HttpLib2Error): - pass - - -class RelativeURIError(HttpLib2Error): - pass - - -class ServerNotFoundError(HttpLib2Error): - pass - - -class ProxiesUnavailableError(HttpLib2Error): - pass diff --git a/shotgun_api3/lib/httplib2/python3/iri2uri.py b/shotgun_api3/lib/httplib2/python3/iri2uri.py deleted file mode 100644 index 86e361e62..000000000 --- a/shotgun_api3/lib/httplib2/python3/iri2uri.py +++ /dev/null @@ -1,124 +0,0 @@ -# -*- coding: utf-8 -*- -"""Converts an IRI to a URI.""" - -__author__ = "Joe Gregorio (joe@bitworking.org)" -__copyright__ = "Copyright 2006, Joe Gregorio" -__contributors__ = [] -__version__ = "1.0.0" -__license__ = "MIT" - -import urllib.parse - -# Convert an IRI to a URI following the rules in RFC 3987 -# -# The characters we need to enocde and escape are defined in the spec: -# -# iprivate = %xE000-F8FF / %xF0000-FFFFD / %x100000-10FFFD -# ucschar = %xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF -# / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD -# / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD -# / %x70000-7FFFD / %x80000-8FFFD / %x90000-9FFFD -# / %xA0000-AFFFD / %xB0000-BFFFD / %xC0000-CFFFD -# / %xD0000-DFFFD / %xE1000-EFFFD - -escape_range = [ - (0xA0, 0xD7FF), - (0xE000, 0xF8FF), - (0xF900, 0xFDCF), - (0xFDF0, 0xFFEF), - (0x10000, 0x1FFFD), - (0x20000, 0x2FFFD), - (0x30000, 0x3FFFD), - (0x40000, 0x4FFFD), - (0x50000, 0x5FFFD), - (0x60000, 0x6FFFD), - (0x70000, 0x7FFFD), - (0x80000, 0x8FFFD), - (0x90000, 0x9FFFD), - (0xA0000, 0xAFFFD), - (0xB0000, 0xBFFFD), - (0xC0000, 0xCFFFD), - (0xD0000, 0xDFFFD), - (0xE1000, 0xEFFFD), - (0xF0000, 0xFFFFD), - (0x100000, 0x10FFFD), -] - - -def encode(c): - retval = c - i = ord(c) - for low, high in escape_range: - if i < low: - break - if i >= low and i <= high: - retval = "".join(["%%%2X" % o for o in c.encode("utf-8")]) - break - return retval - - -def iri2uri(uri): - """Convert an IRI to a URI. Note that IRIs must be - passed in a unicode strings. That is, do not utf-8 encode - the IRI before passing it into the function.""" - if isinstance(uri, str): - (scheme, authority, path, query, fragment) = urllib.parse.urlsplit(uri) - authority = authority.encode("idna").decode("utf-8") - # For each character in 'ucschar' or 'iprivate' - # 1. encode as utf-8 - # 2. then %-encode each octet of that utf-8 - uri = urllib.parse.urlunsplit((scheme, authority, path, query, fragment)) - uri = "".join([encode(c) for c in uri]) - return uri - - -if __name__ == "__main__": - import unittest - - class Test(unittest.TestCase): - def test_uris(self): - """Test that URIs are invariant under the transformation.""" - invariant = [ - "ftp://ftp.is.co.za/rfc/rfc1808.txt", - "http://www.ietf.org/rfc/rfc2396.txt", - "ldap://[2001:db8::7]/c=GB?objectClass?one", - "mailto:John.Doe@example.com", - "news:comp.infosystems.www.servers.unix", - "tel:+1-816-555-1212", - "telnet://192.0.2.16:80/", - "urn:oasis:names:specification:docbook:dtd:xml:4.1.2", - ] - for uri in invariant: - self.assertEqual(uri, iri2uri(uri)) - - def test_iri(self): - """Test that the right type of escaping is done for each part of the URI.""" - self.assertEqual( - "http://xn--o3h.com/%E2%98%84", - iri2uri("http://\N{COMET}.com/\N{COMET}"), - ) - self.assertEqual( - "http://bitworking.org/?fred=%E2%98%84", - iri2uri("http://bitworking.org/?fred=\N{COMET}"), - ) - self.assertEqual( - "http://bitworking.org/#%E2%98%84", - iri2uri("http://bitworking.org/#\N{COMET}"), - ) - self.assertEqual("#%E2%98%84", iri2uri("#\N{COMET}")) - self.assertEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri("/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}"), - ) - self.assertEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri(iri2uri("/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}")), - ) - self.assertNotEqual( - "/fred?bar=%E2%98%9A#%E2%98%84", - iri2uri( - "/fred?bar=\N{BLACK LEFT POINTING INDEX}#\N{COMET}".encode("utf-8") - ), - ) - - unittest.main() diff --git a/shotgun_api3/lib/httplib2/python3/socks.py b/shotgun_api3/lib/httplib2/python3/socks.py deleted file mode 100644 index cc68e634c..000000000 --- a/shotgun_api3/lib/httplib2/python3/socks.py +++ /dev/null @@ -1,518 +0,0 @@ -"""SocksiPy - Python SOCKS module. - -Version 1.00 - -Copyright 2006 Dan-Haim. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of Dan Haim nor the names of his contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY DAN HAIM "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL DAN HAIM OR HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMANGE. - -This module provides a standard socket-like interface for Python -for tunneling connections through SOCKS proxies. - -Minor modifications made by Christopher Gilbert (http://motomastyle.com/) for -use in PyLoris (http://pyloris.sourceforge.net/). - -Minor modifications made by Mario Vilas (http://breakingcode.wordpress.com/) -mainly to merge bug fixes found in Sourceforge. -""" - -import base64 -import socket -import struct -import sys - -if getattr(socket, "socket", None) is None: - raise ImportError("socket.socket missing, proxy support unusable") - -PROXY_TYPE_SOCKS4 = 1 -PROXY_TYPE_SOCKS5 = 2 -PROXY_TYPE_HTTP = 3 -PROXY_TYPE_HTTP_NO_TUNNEL = 4 - -_defaultproxy = None -_orgsocket = socket.socket - - -class ProxyError(Exception): - pass - - -class GeneralProxyError(ProxyError): - pass - - -class Socks5AuthError(ProxyError): - pass - - -class Socks5Error(ProxyError): - pass - - -class Socks4Error(ProxyError): - pass - - -class HTTPError(ProxyError): - pass - - -_generalerrors = ( - "success", - "invalid data", - "not connected", - "not available", - "bad proxy type", - "bad input", -) - -_socks5errors = ( - "succeeded", - "general SOCKS server failure", - "connection not allowed by ruleset", - "Network unreachable", - "Host unreachable", - "Connection refused", - "TTL expired", - "Command not supported", - "Address type not supported", - "Unknown error", -) - -_socks5autherrors = ( - "succeeded", - "authentication is required", - "all offered authentication methods were rejected", - "unknown username or invalid password", - "unknown error", -) - -_socks4errors = ( - "request granted", - "request rejected or failed", - "request rejected because SOCKS server cannot connect to identd on the client", - "request rejected because the client program and identd report different " - "user-ids", - "unknown error", -) - - -def setdefaultproxy( - proxytype=None, addr=None, port=None, rdns=True, username=None, password=None -): - """setdefaultproxy(proxytype, addr[, port[, rdns[, username[, password]]]]) - Sets a default proxy which all further socksocket objects will use, - unless explicitly changed. - """ - global _defaultproxy - _defaultproxy = (proxytype, addr, port, rdns, username, password) - - -def wrapmodule(module): - """wrapmodule(module) - - Attempts to replace a module's socket library with a SOCKS socket. Must set - a default proxy using setdefaultproxy(...) first. - This will only work on modules that import socket directly into the - namespace; - most of the Python Standard Library falls into this category. - """ - if _defaultproxy != None: - module.socket.socket = socksocket - else: - raise GeneralProxyError((4, "no proxy specified")) - - -class socksocket(socket.socket): - """socksocket([family[, type[, proto]]]) -> socket object - Open a SOCKS enabled socket. The parameters are the same as - those of the standard socket init. In order for SOCKS to work, - you must specify family=AF_INET, type=SOCK_STREAM and proto=0. - """ - - def __init__( - self, family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0, _sock=None - ): - _orgsocket.__init__(self, family, type, proto, _sock) - if _defaultproxy != None: - self.__proxy = _defaultproxy - else: - self.__proxy = (None, None, None, None, None, None) - self.__proxysockname = None - self.__proxypeername = None - self.__httptunnel = True - - def __recvall(self, count): - """__recvall(count) -> data - Receive EXACTLY the number of bytes requested from the socket. - Blocks until the required number of bytes have been received. - """ - data = self.recv(count) - while len(data) < count: - d = self.recv(count - len(data)) - if not d: - raise GeneralProxyError((0, "connection closed unexpectedly")) - data = data + d - return data - - def sendall(self, content, *args): - """ override socket.socket.sendall method to rewrite the header - for non-tunneling proxies if needed - """ - if not self.__httptunnel: - content = self.__rewriteproxy(content) - return super(socksocket, self).sendall(content, *args) - - def __rewriteproxy(self, header): - """ rewrite HTTP request headers to support non-tunneling proxies - (i.e. those which do not support the CONNECT method). - This only works for HTTP (not HTTPS) since HTTPS requires tunneling. - """ - host, endpt = None, None - hdrs = header.split("\r\n") - for hdr in hdrs: - if hdr.lower().startswith("host:"): - host = hdr - elif hdr.lower().startswith("get") or hdr.lower().startswith("post"): - endpt = hdr - if host and endpt: - hdrs.remove(host) - hdrs.remove(endpt) - host = host.split(" ")[1] - endpt = endpt.split(" ") - if self.__proxy[4] != None and self.__proxy[5] != None: - hdrs.insert(0, self.__getauthheader()) - hdrs.insert(0, "Host: %s" % host) - hdrs.insert(0, "%s http://%s%s %s" % (endpt[0], host, endpt[1], endpt[2])) - return "\r\n".join(hdrs) - - def __getauthheader(self): - auth = self.__proxy[4] + b":" + self.__proxy[5] - return "Proxy-Authorization: Basic " + base64.b64encode(auth).decode() - - def setproxy( - self, - proxytype=None, - addr=None, - port=None, - rdns=True, - username=None, - password=None, - headers=None, - ): - """setproxy(proxytype, addr[, port[, rdns[, username[, password]]]]) - - Sets the proxy to be used. - proxytype - The type of the proxy to be used. Three types - are supported: PROXY_TYPE_SOCKS4 (including socks4a), - PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP - addr - The address of the server (IP or DNS). - port - The port of the server. Defaults to 1080 for SOCKS - servers and 8080 for HTTP proxy servers. - rdns - Should DNS queries be preformed on the remote side - (rather than the local side). The default is True. - Note: This has no effect with SOCKS4 servers. - username - Username to authenticate with to the server. - The default is no authentication. - password - Password to authenticate with to the server. - Only relevant when username is also provided. - headers - Additional or modified headers for the proxy connect - request. - """ - self.__proxy = ( - proxytype, - addr, - port, - rdns, - username.encode() if username else None, - password.encode() if password else None, - headers, - ) - - def __negotiatesocks5(self, destaddr, destport): - """__negotiatesocks5(self,destaddr,destport) - Negotiates a connection through a SOCKS5 server. - """ - # First we'll send the authentication packages we support. - if (self.__proxy[4] != None) and (self.__proxy[5] != None): - # The username/password details were supplied to the - # setproxy method so we support the USERNAME/PASSWORD - # authentication (in addition to the standard none). - self.sendall(struct.pack("BBBB", 0x05, 0x02, 0x00, 0x02)) - else: - # No username/password were entered, therefore we - # only support connections with no authentication. - self.sendall(struct.pack("BBB", 0x05, 0x01, 0x00)) - # We'll receive the server's response to determine which - # method was selected - chosenauth = self.__recvall(2) - if chosenauth[0:1] != chr(0x05).encode(): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - # Check the chosen authentication method - if chosenauth[1:2] == chr(0x00).encode(): - # No authentication is required - pass - elif chosenauth[1:2] == chr(0x02).encode(): - # Okay, we need to perform a basic username/password - # authentication. - packet = bytearray() - packet.append(0x01) - packet.append(len(self.__proxy[4])) - packet.extend(self.__proxy[4]) - packet.append(len(self.__proxy[5])) - packet.extend(self.__proxy[5]) - self.sendall(packet) - authstat = self.__recvall(2) - if authstat[0:1] != chr(0x01).encode(): - # Bad response - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if authstat[1:2] != chr(0x00).encode(): - # Authentication failed - self.close() - raise Socks5AuthError((3, _socks5autherrors[3])) - # Authentication succeeded - else: - # Reaching here is always bad - self.close() - if chosenauth[1] == chr(0xFF).encode(): - raise Socks5AuthError((2, _socks5autherrors[2])) - else: - raise GeneralProxyError((1, _generalerrors[1])) - # Now we can request the actual connection - req = struct.pack("BBB", 0x05, 0x01, 0x00) - # If the given destination address is an IP address, we'll - # use the IPv4 address request even if remote resolving was specified. - try: - ipaddr = socket.inet_aton(destaddr) - req = req + chr(0x01).encode() + ipaddr - except socket.error: - # Well it's not an IP number, so it's probably a DNS name. - if self.__proxy[3]: - # Resolve remotely - ipaddr = None - req = ( - req - + chr(0x03).encode() - + chr(len(destaddr)).encode() - + destaddr.encode() - ) - else: - # Resolve locally - ipaddr = socket.inet_aton(socket.gethostbyname(destaddr)) - req = req + chr(0x01).encode() + ipaddr - req = req + struct.pack(">H", destport) - self.sendall(req) - # Get the response - resp = self.__recvall(4) - if resp[0:1] != chr(0x05).encode(): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - elif resp[1:2] != chr(0x00).encode(): - # Connection failed - self.close() - if ord(resp[1:2]) <= 8: - raise Socks5Error((ord(resp[1:2]), _socks5errors[ord(resp[1:2])])) - else: - raise Socks5Error((9, _socks5errors[9])) - # Get the bound address/port - elif resp[3:4] == chr(0x01).encode(): - boundaddr = self.__recvall(4) - elif resp[3:4] == chr(0x03).encode(): - resp = resp + self.recv(1) - boundaddr = self.__recvall(ord(resp[4:5])) - else: - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - boundport = struct.unpack(">H", self.__recvall(2))[0] - self.__proxysockname = (boundaddr, boundport) - if ipaddr != None: - self.__proxypeername = (socket.inet_ntoa(ipaddr), destport) - else: - self.__proxypeername = (destaddr, destport) - - def getproxysockname(self): - """getsockname() -> address info - Returns the bound IP address and port number at the proxy. - """ - return self.__proxysockname - - def getproxypeername(self): - """getproxypeername() -> address info - Returns the IP and port number of the proxy. - """ - return _orgsocket.getpeername(self) - - def getpeername(self): - """getpeername() -> address info - Returns the IP address and port number of the destination - machine (note: getproxypeername returns the proxy) - """ - return self.__proxypeername - - def __negotiatesocks4(self, destaddr, destport): - """__negotiatesocks4(self,destaddr,destport) - Negotiates a connection through a SOCKS4 server. - """ - # Check if the destination address provided is an IP address - rmtrslv = False - try: - ipaddr = socket.inet_aton(destaddr) - except socket.error: - # It's a DNS name. Check where it should be resolved. - if self.__proxy[3]: - ipaddr = struct.pack("BBBB", 0x00, 0x00, 0x00, 0x01) - rmtrslv = True - else: - ipaddr = socket.inet_aton(socket.gethostbyname(destaddr)) - # Construct the request packet - req = struct.pack(">BBH", 0x04, 0x01, destport) + ipaddr - # The username parameter is considered userid for SOCKS4 - if self.__proxy[4] != None: - req = req + self.__proxy[4] - req = req + chr(0x00).encode() - # DNS name if remote resolving is required - # NOTE: This is actually an extension to the SOCKS4 protocol - # called SOCKS4A and may not be supported in all cases. - if rmtrslv: - req = req + destaddr + chr(0x00).encode() - self.sendall(req) - # Get the response from the server - resp = self.__recvall(8) - if resp[0:1] != chr(0x00).encode(): - # Bad data - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if resp[1:2] != chr(0x5A).encode(): - # Server returned an error - self.close() - if ord(resp[1:2]) in (91, 92, 93): - self.close() - raise Socks4Error((ord(resp[1:2]), _socks4errors[ord(resp[1:2]) - 90])) - else: - raise Socks4Error((94, _socks4errors[4])) - # Get the bound address/port - self.__proxysockname = ( - socket.inet_ntoa(resp[4:]), - struct.unpack(">H", resp[2:4])[0], - ) - if rmtrslv != None: - self.__proxypeername = (socket.inet_ntoa(ipaddr), destport) - else: - self.__proxypeername = (destaddr, destport) - - def __negotiatehttp(self, destaddr, destport): - """__negotiatehttp(self,destaddr,destport) - Negotiates a connection through an HTTP server. - """ - # If we need to resolve locally, we do this now - if not self.__proxy[3]: - addr = socket.gethostbyname(destaddr) - else: - addr = destaddr - headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] - wrote_host_header = False - wrote_auth_header = False - if self.__proxy[6] != None: - for key, val in self.__proxy[6].iteritems(): - headers += [key, ": ", val, "\r\n"] - wrote_host_header = key.lower() == "host" - wrote_auth_header = key.lower() == "proxy-authorization" - if not wrote_host_header: - headers += ["Host: ", destaddr, "\r\n"] - if not wrote_auth_header: - if self.__proxy[4] != None and self.__proxy[5] != None: - headers += [self.__getauthheader(), "\r\n"] - headers.append("\r\n") - self.sendall("".join(headers).encode()) - # We read the response until we get the string "\r\n\r\n" - resp = self.recv(1) - while resp.find("\r\n\r\n".encode()) == -1: - resp = resp + self.recv(1) - # We just need the first line to check if the connection - # was successful - statusline = resp.splitlines()[0].split(" ".encode(), 2) - if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - try: - statuscode = int(statusline[1]) - except ValueError: - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if statuscode != 200: - self.close() - raise HTTPError((statuscode, statusline[2])) - self.__proxysockname = ("0.0.0.0", 0) - self.__proxypeername = (addr, destport) - - def connect(self, destpair): - """connect(self, despair) - Connects to the specified destination through a proxy. - destpar - A tuple of the IP/DNS address and the port number. - (identical to socket's connect). - To select the proxy server use setproxy(). - """ - # Do a minimal input check first - if ( - (not type(destpair) in (list, tuple)) - or (len(destpair) < 2) - or (not isinstance(destpair[0], (str, bytes))) - or (type(destpair[1]) != int) - ): - raise GeneralProxyError((5, _generalerrors[5])) - if self.__proxy[0] == PROXY_TYPE_SOCKS5: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 1080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatesocks5(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_SOCKS4: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 1080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatesocks4(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_HTTP: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 8080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatehttp(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_HTTP_NO_TUNNEL: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 8080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - if destpair[1] == 443: - self.__negotiatehttp(destpair[0], destpair[1]) - else: - self.__httptunnel = False - elif self.__proxy[0] == None: - _orgsocket.connect(self, (destpair[0], destpair[1])) - else: - raise GeneralProxyError((4, _generalerrors[4])) diff --git a/shotgun_api3/lib/httplib2/socks.py b/shotgun_api3/lib/httplib2/socks.py deleted file mode 100644 index cc68e634c..000000000 --- a/shotgun_api3/lib/httplib2/socks.py +++ /dev/null @@ -1,518 +0,0 @@ -"""SocksiPy - Python SOCKS module. - -Version 1.00 - -Copyright 2006 Dan-Haim. All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. -3. Neither the name of Dan Haim nor the names of his contributors may be used - to endorse or promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY DAN HAIM "AS IS" AND ANY EXPRESS OR IMPLIED -WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO -EVENT SHALL DAN HAIM OR HIS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT -OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMANGE. - -This module provides a standard socket-like interface for Python -for tunneling connections through SOCKS proxies. - -Minor modifications made by Christopher Gilbert (http://motomastyle.com/) for -use in PyLoris (http://pyloris.sourceforge.net/). - -Minor modifications made by Mario Vilas (http://breakingcode.wordpress.com/) -mainly to merge bug fixes found in Sourceforge. -""" - -import base64 -import socket -import struct -import sys - -if getattr(socket, "socket", None) is None: - raise ImportError("socket.socket missing, proxy support unusable") - -PROXY_TYPE_SOCKS4 = 1 -PROXY_TYPE_SOCKS5 = 2 -PROXY_TYPE_HTTP = 3 -PROXY_TYPE_HTTP_NO_TUNNEL = 4 - -_defaultproxy = None -_orgsocket = socket.socket - - -class ProxyError(Exception): - pass - - -class GeneralProxyError(ProxyError): - pass - - -class Socks5AuthError(ProxyError): - pass - - -class Socks5Error(ProxyError): - pass - - -class Socks4Error(ProxyError): - pass - - -class HTTPError(ProxyError): - pass - - -_generalerrors = ( - "success", - "invalid data", - "not connected", - "not available", - "bad proxy type", - "bad input", -) - -_socks5errors = ( - "succeeded", - "general SOCKS server failure", - "connection not allowed by ruleset", - "Network unreachable", - "Host unreachable", - "Connection refused", - "TTL expired", - "Command not supported", - "Address type not supported", - "Unknown error", -) - -_socks5autherrors = ( - "succeeded", - "authentication is required", - "all offered authentication methods were rejected", - "unknown username or invalid password", - "unknown error", -) - -_socks4errors = ( - "request granted", - "request rejected or failed", - "request rejected because SOCKS server cannot connect to identd on the client", - "request rejected because the client program and identd report different " - "user-ids", - "unknown error", -) - - -def setdefaultproxy( - proxytype=None, addr=None, port=None, rdns=True, username=None, password=None -): - """setdefaultproxy(proxytype, addr[, port[, rdns[, username[, password]]]]) - Sets a default proxy which all further socksocket objects will use, - unless explicitly changed. - """ - global _defaultproxy - _defaultproxy = (proxytype, addr, port, rdns, username, password) - - -def wrapmodule(module): - """wrapmodule(module) - - Attempts to replace a module's socket library with a SOCKS socket. Must set - a default proxy using setdefaultproxy(...) first. - This will only work on modules that import socket directly into the - namespace; - most of the Python Standard Library falls into this category. - """ - if _defaultproxy != None: - module.socket.socket = socksocket - else: - raise GeneralProxyError((4, "no proxy specified")) - - -class socksocket(socket.socket): - """socksocket([family[, type[, proto]]]) -> socket object - Open a SOCKS enabled socket. The parameters are the same as - those of the standard socket init. In order for SOCKS to work, - you must specify family=AF_INET, type=SOCK_STREAM and proto=0. - """ - - def __init__( - self, family=socket.AF_INET, type=socket.SOCK_STREAM, proto=0, _sock=None - ): - _orgsocket.__init__(self, family, type, proto, _sock) - if _defaultproxy != None: - self.__proxy = _defaultproxy - else: - self.__proxy = (None, None, None, None, None, None) - self.__proxysockname = None - self.__proxypeername = None - self.__httptunnel = True - - def __recvall(self, count): - """__recvall(count) -> data - Receive EXACTLY the number of bytes requested from the socket. - Blocks until the required number of bytes have been received. - """ - data = self.recv(count) - while len(data) < count: - d = self.recv(count - len(data)) - if not d: - raise GeneralProxyError((0, "connection closed unexpectedly")) - data = data + d - return data - - def sendall(self, content, *args): - """ override socket.socket.sendall method to rewrite the header - for non-tunneling proxies if needed - """ - if not self.__httptunnel: - content = self.__rewriteproxy(content) - return super(socksocket, self).sendall(content, *args) - - def __rewriteproxy(self, header): - """ rewrite HTTP request headers to support non-tunneling proxies - (i.e. those which do not support the CONNECT method). - This only works for HTTP (not HTTPS) since HTTPS requires tunneling. - """ - host, endpt = None, None - hdrs = header.split("\r\n") - for hdr in hdrs: - if hdr.lower().startswith("host:"): - host = hdr - elif hdr.lower().startswith("get") or hdr.lower().startswith("post"): - endpt = hdr - if host and endpt: - hdrs.remove(host) - hdrs.remove(endpt) - host = host.split(" ")[1] - endpt = endpt.split(" ") - if self.__proxy[4] != None and self.__proxy[5] != None: - hdrs.insert(0, self.__getauthheader()) - hdrs.insert(0, "Host: %s" % host) - hdrs.insert(0, "%s http://%s%s %s" % (endpt[0], host, endpt[1], endpt[2])) - return "\r\n".join(hdrs) - - def __getauthheader(self): - auth = self.__proxy[4] + b":" + self.__proxy[5] - return "Proxy-Authorization: Basic " + base64.b64encode(auth).decode() - - def setproxy( - self, - proxytype=None, - addr=None, - port=None, - rdns=True, - username=None, - password=None, - headers=None, - ): - """setproxy(proxytype, addr[, port[, rdns[, username[, password]]]]) - - Sets the proxy to be used. - proxytype - The type of the proxy to be used. Three types - are supported: PROXY_TYPE_SOCKS4 (including socks4a), - PROXY_TYPE_SOCKS5 and PROXY_TYPE_HTTP - addr - The address of the server (IP or DNS). - port - The port of the server. Defaults to 1080 for SOCKS - servers and 8080 for HTTP proxy servers. - rdns - Should DNS queries be preformed on the remote side - (rather than the local side). The default is True. - Note: This has no effect with SOCKS4 servers. - username - Username to authenticate with to the server. - The default is no authentication. - password - Password to authenticate with to the server. - Only relevant when username is also provided. - headers - Additional or modified headers for the proxy connect - request. - """ - self.__proxy = ( - proxytype, - addr, - port, - rdns, - username.encode() if username else None, - password.encode() if password else None, - headers, - ) - - def __negotiatesocks5(self, destaddr, destport): - """__negotiatesocks5(self,destaddr,destport) - Negotiates a connection through a SOCKS5 server. - """ - # First we'll send the authentication packages we support. - if (self.__proxy[4] != None) and (self.__proxy[5] != None): - # The username/password details were supplied to the - # setproxy method so we support the USERNAME/PASSWORD - # authentication (in addition to the standard none). - self.sendall(struct.pack("BBBB", 0x05, 0x02, 0x00, 0x02)) - else: - # No username/password were entered, therefore we - # only support connections with no authentication. - self.sendall(struct.pack("BBB", 0x05, 0x01, 0x00)) - # We'll receive the server's response to determine which - # method was selected - chosenauth = self.__recvall(2) - if chosenauth[0:1] != chr(0x05).encode(): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - # Check the chosen authentication method - if chosenauth[1:2] == chr(0x00).encode(): - # No authentication is required - pass - elif chosenauth[1:2] == chr(0x02).encode(): - # Okay, we need to perform a basic username/password - # authentication. - packet = bytearray() - packet.append(0x01) - packet.append(len(self.__proxy[4])) - packet.extend(self.__proxy[4]) - packet.append(len(self.__proxy[5])) - packet.extend(self.__proxy[5]) - self.sendall(packet) - authstat = self.__recvall(2) - if authstat[0:1] != chr(0x01).encode(): - # Bad response - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if authstat[1:2] != chr(0x00).encode(): - # Authentication failed - self.close() - raise Socks5AuthError((3, _socks5autherrors[3])) - # Authentication succeeded - else: - # Reaching here is always bad - self.close() - if chosenauth[1] == chr(0xFF).encode(): - raise Socks5AuthError((2, _socks5autherrors[2])) - else: - raise GeneralProxyError((1, _generalerrors[1])) - # Now we can request the actual connection - req = struct.pack("BBB", 0x05, 0x01, 0x00) - # If the given destination address is an IP address, we'll - # use the IPv4 address request even if remote resolving was specified. - try: - ipaddr = socket.inet_aton(destaddr) - req = req + chr(0x01).encode() + ipaddr - except socket.error: - # Well it's not an IP number, so it's probably a DNS name. - if self.__proxy[3]: - # Resolve remotely - ipaddr = None - req = ( - req - + chr(0x03).encode() - + chr(len(destaddr)).encode() - + destaddr.encode() - ) - else: - # Resolve locally - ipaddr = socket.inet_aton(socket.gethostbyname(destaddr)) - req = req + chr(0x01).encode() + ipaddr - req = req + struct.pack(">H", destport) - self.sendall(req) - # Get the response - resp = self.__recvall(4) - if resp[0:1] != chr(0x05).encode(): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - elif resp[1:2] != chr(0x00).encode(): - # Connection failed - self.close() - if ord(resp[1:2]) <= 8: - raise Socks5Error((ord(resp[1:2]), _socks5errors[ord(resp[1:2])])) - else: - raise Socks5Error((9, _socks5errors[9])) - # Get the bound address/port - elif resp[3:4] == chr(0x01).encode(): - boundaddr = self.__recvall(4) - elif resp[3:4] == chr(0x03).encode(): - resp = resp + self.recv(1) - boundaddr = self.__recvall(ord(resp[4:5])) - else: - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - boundport = struct.unpack(">H", self.__recvall(2))[0] - self.__proxysockname = (boundaddr, boundport) - if ipaddr != None: - self.__proxypeername = (socket.inet_ntoa(ipaddr), destport) - else: - self.__proxypeername = (destaddr, destport) - - def getproxysockname(self): - """getsockname() -> address info - Returns the bound IP address and port number at the proxy. - """ - return self.__proxysockname - - def getproxypeername(self): - """getproxypeername() -> address info - Returns the IP and port number of the proxy. - """ - return _orgsocket.getpeername(self) - - def getpeername(self): - """getpeername() -> address info - Returns the IP address and port number of the destination - machine (note: getproxypeername returns the proxy) - """ - return self.__proxypeername - - def __negotiatesocks4(self, destaddr, destport): - """__negotiatesocks4(self,destaddr,destport) - Negotiates a connection through a SOCKS4 server. - """ - # Check if the destination address provided is an IP address - rmtrslv = False - try: - ipaddr = socket.inet_aton(destaddr) - except socket.error: - # It's a DNS name. Check where it should be resolved. - if self.__proxy[3]: - ipaddr = struct.pack("BBBB", 0x00, 0x00, 0x00, 0x01) - rmtrslv = True - else: - ipaddr = socket.inet_aton(socket.gethostbyname(destaddr)) - # Construct the request packet - req = struct.pack(">BBH", 0x04, 0x01, destport) + ipaddr - # The username parameter is considered userid for SOCKS4 - if self.__proxy[4] != None: - req = req + self.__proxy[4] - req = req + chr(0x00).encode() - # DNS name if remote resolving is required - # NOTE: This is actually an extension to the SOCKS4 protocol - # called SOCKS4A and may not be supported in all cases. - if rmtrslv: - req = req + destaddr + chr(0x00).encode() - self.sendall(req) - # Get the response from the server - resp = self.__recvall(8) - if resp[0:1] != chr(0x00).encode(): - # Bad data - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if resp[1:2] != chr(0x5A).encode(): - # Server returned an error - self.close() - if ord(resp[1:2]) in (91, 92, 93): - self.close() - raise Socks4Error((ord(resp[1:2]), _socks4errors[ord(resp[1:2]) - 90])) - else: - raise Socks4Error((94, _socks4errors[4])) - # Get the bound address/port - self.__proxysockname = ( - socket.inet_ntoa(resp[4:]), - struct.unpack(">H", resp[2:4])[0], - ) - if rmtrslv != None: - self.__proxypeername = (socket.inet_ntoa(ipaddr), destport) - else: - self.__proxypeername = (destaddr, destport) - - def __negotiatehttp(self, destaddr, destport): - """__negotiatehttp(self,destaddr,destport) - Negotiates a connection through an HTTP server. - """ - # If we need to resolve locally, we do this now - if not self.__proxy[3]: - addr = socket.gethostbyname(destaddr) - else: - addr = destaddr - headers = ["CONNECT ", addr, ":", str(destport), " HTTP/1.1\r\n"] - wrote_host_header = False - wrote_auth_header = False - if self.__proxy[6] != None: - for key, val in self.__proxy[6].iteritems(): - headers += [key, ": ", val, "\r\n"] - wrote_host_header = key.lower() == "host" - wrote_auth_header = key.lower() == "proxy-authorization" - if not wrote_host_header: - headers += ["Host: ", destaddr, "\r\n"] - if not wrote_auth_header: - if self.__proxy[4] != None and self.__proxy[5] != None: - headers += [self.__getauthheader(), "\r\n"] - headers.append("\r\n") - self.sendall("".join(headers).encode()) - # We read the response until we get the string "\r\n\r\n" - resp = self.recv(1) - while resp.find("\r\n\r\n".encode()) == -1: - resp = resp + self.recv(1) - # We just need the first line to check if the connection - # was successful - statusline = resp.splitlines()[0].split(" ".encode(), 2) - if statusline[0] not in ("HTTP/1.0".encode(), "HTTP/1.1".encode()): - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - try: - statuscode = int(statusline[1]) - except ValueError: - self.close() - raise GeneralProxyError((1, _generalerrors[1])) - if statuscode != 200: - self.close() - raise HTTPError((statuscode, statusline[2])) - self.__proxysockname = ("0.0.0.0", 0) - self.__proxypeername = (addr, destport) - - def connect(self, destpair): - """connect(self, despair) - Connects to the specified destination through a proxy. - destpar - A tuple of the IP/DNS address and the port number. - (identical to socket's connect). - To select the proxy server use setproxy(). - """ - # Do a minimal input check first - if ( - (not type(destpair) in (list, tuple)) - or (len(destpair) < 2) - or (not isinstance(destpair[0], (str, bytes))) - or (type(destpair[1]) != int) - ): - raise GeneralProxyError((5, _generalerrors[5])) - if self.__proxy[0] == PROXY_TYPE_SOCKS5: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 1080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatesocks5(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_SOCKS4: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 1080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatesocks4(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_HTTP: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 8080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - self.__negotiatehttp(destpair[0], destpair[1]) - elif self.__proxy[0] == PROXY_TYPE_HTTP_NO_TUNNEL: - if self.__proxy[2] != None: - portnum = self.__proxy[2] - else: - portnum = 8080 - _orgsocket.connect(self, (self.__proxy[1], portnum)) - if destpair[1] == 443: - self.__negotiatehttp(destpair[0], destpair[1]) - else: - self.__httptunnel = False - elif self.__proxy[0] == None: - _orgsocket.connect(self, (destpair[0], destpair[1])) - else: - raise GeneralProxyError((4, _generalerrors[4])) diff --git a/shotgun_api3/lib/mimetypes.py b/shotgun_api3/lib/mimetypes.py deleted file mode 100644 index bc8488535..000000000 --- a/shotgun_api3/lib/mimetypes.py +++ /dev/null @@ -1,598 +0,0 @@ -"""Guess the MIME type of a file. - -This module defines two useful functions: - -guess_type(url, strict=1) -- guess the MIME type and encoding of a URL. - -guess_extension(type, strict=1) -- guess the extension for a given MIME type. - -It also contains the following, for tuning the behavior: - -Data: - -knownfiles -- list of files to parse -inited -- flag set when init() has been called -suffix_map -- dictionary mapping suffixes to suffixes -encodings_map -- dictionary mapping suffixes to encodings -types_map -- dictionary mapping suffixes to types - -Functions: - -init([files]) -- parse a list of files, default knownfiles (on Windows, the - default values are taken from the registry) -read_mime_types(file) -- parse one file, return a dictionary or None - -Note that this code has not been updated for python 3 compatibility, as it is -a patched version of the native mimetypes module and is used only in Python -versions 2.7.0 - 2.7.9, which included a broken version of the mimetypes module. -""" - -import os -import sys -import posixpath -import urllib -try: - import _winreg -except ImportError: - _winreg = None - -__all__ = [ - "guess_type","guess_extension","guess_all_extensions", - "add_type","read_mime_types","init" -] - -knownfiles = [ - "/etc/mime.types", - "/etc/httpd/mime.types", # Mac OS X - "/etc/httpd/conf/mime.types", # Apache - "/etc/apache/mime.types", # Apache 1 - "/etc/apache2/mime.types", # Apache 2 - "/usr/local/etc/httpd/conf/mime.types", - "/usr/local/lib/netscape/mime.types", - "/usr/local/etc/httpd/conf/mime.types", # Apache 1.2 - "/usr/local/etc/mime.types", # Apache 1.3 - ] - -inited = False -_db = None - - -class MimeTypes: - """MIME-types datastore. - - This datastore can handle information from mime.types-style files - and supports basic determination of MIME type from a filename or - URL, and can guess a reasonable extension given a MIME type. - """ - - def __init__(self, filenames=(), strict=True): - if not inited: - init() - self.encodings_map = encodings_map.copy() - self.suffix_map = suffix_map.copy() - self.types_map = ({}, {}) # dict for (non-strict, strict) - self.types_map_inv = ({}, {}) - for (ext, type) in types_map.items(): - self.add_type(type, ext, True) - for (ext, type) in common_types.items(): - self.add_type(type, ext, False) - for name in filenames: - self.read(name, strict) - - def add_type(self, type, ext, strict=True): - """Add a mapping between a type and an extension. - - When the extension is already known, the new - type will replace the old one. When the type - is already known the extension will be added - to the list of known extensions. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - self.types_map[strict][ext] = type - exts = self.types_map_inv[strict].setdefault(type, []) - if ext not in exts: - exts.append(ext) - - def guess_type(self, url, strict=True): - """Guess the type of a file based on its URL. - - Return value is a tuple (type, encoding) where type is None if - the type can't be guessed (no or unknown suffix) or a string - of the form type/subtype, usable for a MIME Content-type - header; and encoding is None for no encoding or the name of - the program used to encode (e.g. compress or gzip). The - mappings are table driven. Encoding suffixes are case - sensitive; type suffixes are first tried case sensitive, then - case insensitive. - - The suffixes .tgz, .taz and .tz (case sensitive!) are all - mapped to '.tar.gz'. (This is table-driven too, using the - dictionary suffix_map.) - - Optional `strict' argument when False adds a bunch of commonly found, - but non-standard types. - """ - scheme, url = urllib.splittype(url) - if scheme == 'data': - # syntax of data URLs: - # dataurl := "data:" [ mediatype ] [ ";base64" ] "," data - # mediatype := [ type "/" subtype ] *( ";" parameter ) - # data := *urlchar - # parameter := attribute "=" value - # type/subtype defaults to "text/plain" - comma = url.find(',') - if comma < 0: - # bad data URL - return None, None - semi = url.find(';', 0, comma) - if semi >= 0: - type = url[:semi] - else: - type = url[:comma] - if '=' in type or '/' not in type: - type = 'text/plain' - return type, None # never compressed, so encoding is None - base, ext = posixpath.splitext(url) - while ext in self.suffix_map: - base, ext = posixpath.splitext(base + self.suffix_map[ext]) - if ext in self.encodings_map: - encoding = self.encodings_map[ext] - base, ext = posixpath.splitext(base) - else: - encoding = None - types_map = self.types_map[True] - if ext in types_map: - return types_map[ext], encoding - elif ext.lower() in types_map: - return types_map[ext.lower()], encoding - elif strict: - return None, encoding - types_map = self.types_map[False] - if ext in types_map: - return types_map[ext], encoding - elif ext.lower() in types_map: - return types_map[ext.lower()], encoding - else: - return None, encoding - - def guess_all_extensions(self, type, strict=True): - """Guess the extensions for a file based on its MIME type. - - Return value is a list of strings giving the possible filename - extensions, including the leading dot ('.'). The extension is not - guaranteed to have been associated with any particular data stream, - but would be mapped to the MIME type `type' by guess_type(). - - Optional `strict' argument when false adds a bunch of commonly found, - but non-standard types. - """ - type = type.lower() - extensions = self.types_map_inv[True].get(type, []) - if not strict: - for ext in self.types_map_inv[False].get(type, []): - if ext not in extensions: - extensions.append(ext) - return extensions - - def guess_extension(self, type, strict=True): - """Guess the extension for a file based on its MIME type. - - Return value is a string giving a filename extension, - including the leading dot ('.'). The extension is not - guaranteed to have been associated with any particular data - stream, but would be mapped to the MIME type `type' by - guess_type(). If no extension can be guessed for `type', None - is returned. - - Optional `strict' argument when false adds a bunch of commonly found, - but non-standard types. - """ - extensions = self.guess_all_extensions(type, strict) - if not extensions: - return None - return extensions[0] - - def read(self, filename, strict=True): - """ - Read a single mime.types-format file, specified by pathname. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - with open(filename) as fp: - self.readfp(fp, strict) - - def readfp(self, fp, strict=True): - """ - Read a single mime.types-format file. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - while 1: - line = fp.readline() - if not line: - break - words = line.split() - for i in range(len(words)): - if words[i][0] == '#': - del words[i:] - break - if not words: - continue - type, suffixes = words[0], words[1:] - for suff in suffixes: - self.add_type(type, '.' + suff, strict) - - def read_windows_registry(self, strict=True): - """ - Load the MIME types database from Windows registry. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - - # Windows only - if not _winreg: - return - - def enum_types(mimedb): - i = 0 - while True: - try: - ctype = _winreg.EnumKey(mimedb, i) - except EnvironmentError: - break - else: - if '\0' not in ctype: - yield ctype - i += 1 - - default_encoding = sys.getdefaultencoding() - with _winreg.OpenKey(_winreg.HKEY_CLASSES_ROOT, '') as hkcr: - for subkeyname in enum_types(hkcr): - try: - with _winreg.OpenKey(hkcr, subkeyname) as subkey: - # Only check file extensions - if not subkeyname.startswith("."): - continue - # raises EnvironmentError if no 'Content Type' value - mimetype, datatype = _winreg.QueryValueEx( - subkey, 'Content Type') - if datatype != _winreg.REG_SZ: - continue - try: - mimetype = mimetype.encode(default_encoding) - except UnicodeEncodeError: - continue - self.add_type(mimetype, subkeyname, strict) - except EnvironmentError: - continue - -def guess_type(url, strict=True): - """Guess the type of a file based on its URL. - - Return value is a tuple (type, encoding) where type is None if the - type can't be guessed (no or unknown suffix) or a string of the - form type/subtype, usable for a MIME Content-type header; and - encoding is None for no encoding or the name of the program used - to encode (e.g. compress or gzip). The mappings are table - driven. Encoding suffixes are case sensitive; type suffixes are - first tried case sensitive, then case insensitive. - - The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped - to ".tar.gz". (This is table-driven too, using the dictionary - suffix_map). - - Optional `strict' argument when false adds a bunch of commonly found, but - non-standard types. - """ - if _db is None: - init() - return _db.guess_type(url, strict) - - -def guess_all_extensions(type, strict=True): - """Guess the extensions for a file based on its MIME type. - - Return value is a list of strings giving the possible filename - extensions, including the leading dot ('.'). The extension is not - guaranteed to have been associated with any particular data - stream, but would be mapped to the MIME type `type' by - guess_type(). If no extension can be guessed for `type', None - is returned. - - Optional `strict' argument when false adds a bunch of commonly found, - but non-standard types. - """ - if _db is None: - init() - return _db.guess_all_extensions(type, strict) - -def guess_extension(type, strict=True): - """Guess the extension for a file based on its MIME type. - - Return value is a string giving a filename extension, including the - leading dot ('.'). The extension is not guaranteed to have been - associated with any particular data stream, but would be mapped to the - MIME type `type' by guess_type(). If no extension can be guessed for - `type', None is returned. - - Optional `strict' argument when false adds a bunch of commonly found, - but non-standard types. - """ - if _db is None: - init() - return _db.guess_extension(type, strict) - -def add_type(type, ext, strict=True): - """Add a mapping between a type and an extension. - - When the extension is already known, the new - type will replace the old one. When the type - is already known the extension will be added - to the list of known extensions. - - If strict is true, information will be added to - list of standard types, else to the list of non-standard - types. - """ - if _db is None: - init() - return _db.add_type(type, ext, strict) - - -def init(files=None): - global suffix_map, types_map, encodings_map, common_types - global inited, _db - inited = True # so that MimeTypes.__init__() doesn't call us again - db = MimeTypes() - if files is None: - if _winreg: - db.read_windows_registry() - files = knownfiles - for file in files: - if os.path.isfile(file): - db.read(file) - encodings_map = db.encodings_map - suffix_map = db.suffix_map - types_map = db.types_map[True] - common_types = db.types_map[False] - # Make the DB a global variable now that it is fully initialized - _db = db - - -def read_mime_types(file): - try: - f = open(file) - except IOError: - return None - with f: - db = MimeTypes() - db.readfp(f, True) - return db.types_map[True] - - -def _default_mime_types(): - global suffix_map - global encodings_map - global types_map - global common_types - - suffix_map = { - '.tgz': '.tar.gz', - '.taz': '.tar.gz', - '.tz': '.tar.gz', - '.tbz2': '.tar.bz2', - '.txz': '.tar.xz', - } - - encodings_map = { - '.gz': 'gzip', - '.Z': 'compress', - '.bz2': 'bzip2', - '.xz': 'xz', - } - - # Before adding new types, make sure they are either registered with IANA, - # at http://www.isi.edu/in-notes/iana/assignments/media-types - # or extensions, i.e. using the x- prefix - - # If you add to these, please keep them sorted! - types_map = { - '.a' : 'application/octet-stream', - '.ai' : 'application/postscript', - '.aif' : 'audio/x-aiff', - '.aifc' : 'audio/x-aiff', - '.aiff' : 'audio/x-aiff', - '.au' : 'audio/basic', - '.avi' : 'video/x-msvideo', - '.bat' : 'text/plain', - '.bcpio' : 'application/x-bcpio', - '.bin' : 'application/octet-stream', - '.bmp' : 'image/x-ms-bmp', - '.c' : 'text/plain', - # Duplicates :( - '.cdf' : 'application/x-cdf', - '.cdf' : 'application/x-netcdf', - '.cpio' : 'application/x-cpio', - '.csh' : 'application/x-csh', - '.css' : 'text/css', - '.dll' : 'application/octet-stream', - '.doc' : 'application/msword', - '.dot' : 'application/msword', - '.dvi' : 'application/x-dvi', - '.eml' : 'message/rfc822', - '.eps' : 'application/postscript', - '.etx' : 'text/x-setext', - '.exe' : 'application/octet-stream', - '.gif' : 'image/gif', - '.gtar' : 'application/x-gtar', - '.h' : 'text/plain', - '.hdf' : 'application/x-hdf', - '.htm' : 'text/html', - '.html' : 'text/html', - '.ico' : 'image/vnd.microsoft.icon', - '.ief' : 'image/ief', - '.jpe' : 'image/jpeg', - '.jpeg' : 'image/jpeg', - '.jpg' : 'image/jpeg', - '.js' : 'application/javascript', - '.ksh' : 'text/plain', - '.latex' : 'application/x-latex', - '.m1v' : 'video/mpeg', - '.man' : 'application/x-troff-man', - '.me' : 'application/x-troff-me', - '.mht' : 'message/rfc822', - '.mhtml' : 'message/rfc822', - '.mif' : 'application/x-mif', - '.mov' : 'video/quicktime', - '.movie' : 'video/x-sgi-movie', - '.mp2' : 'audio/mpeg', - '.mp3' : 'audio/mpeg', - '.mp4' : 'video/mp4', - '.mpa' : 'video/mpeg', - '.mpe' : 'video/mpeg', - '.mpeg' : 'video/mpeg', - '.mpg' : 'video/mpeg', - '.ms' : 'application/x-troff-ms', - '.nc' : 'application/x-netcdf', - '.nws' : 'message/rfc822', - '.o' : 'application/octet-stream', - '.obj' : 'application/octet-stream', - '.oda' : 'application/oda', - '.p12' : 'application/x-pkcs12', - '.p7c' : 'application/pkcs7-mime', - '.pbm' : 'image/x-portable-bitmap', - '.pdf' : 'application/pdf', - '.pfx' : 'application/x-pkcs12', - '.pgm' : 'image/x-portable-graymap', - '.pl' : 'text/plain', - '.png' : 'image/png', - '.pnm' : 'image/x-portable-anymap', - '.pot' : 'application/vnd.ms-powerpoint', - '.ppa' : 'application/vnd.ms-powerpoint', - '.ppm' : 'image/x-portable-pixmap', - '.pps' : 'application/vnd.ms-powerpoint', - '.ppt' : 'application/vnd.ms-powerpoint', - '.ps' : 'application/postscript', - '.pwz' : 'application/vnd.ms-powerpoint', - '.py' : 'text/x-python', - '.pyc' : 'application/x-python-code', - '.pyo' : 'application/x-python-code', - '.qt' : 'video/quicktime', - '.ra' : 'audio/x-pn-realaudio', - '.ram' : 'application/x-pn-realaudio', - '.ras' : 'image/x-cmu-raster', - '.rdf' : 'application/xml', - '.rgb' : 'image/x-rgb', - '.roff' : 'application/x-troff', - '.rtx' : 'text/richtext', - '.sgm' : 'text/x-sgml', - '.sgml' : 'text/x-sgml', - '.sh' : 'application/x-sh', - '.shar' : 'application/x-shar', - '.snd' : 'audio/basic', - '.so' : 'application/octet-stream', - '.src' : 'application/x-wais-source', - '.sv4cpio': 'application/x-sv4cpio', - '.sv4crc' : 'application/x-sv4crc', - '.swf' : 'application/x-shockwave-flash', - '.t' : 'application/x-troff', - '.tar' : 'application/x-tar', - '.tcl' : 'application/x-tcl', - '.tex' : 'application/x-tex', - '.texi' : 'application/x-texinfo', - '.texinfo': 'application/x-texinfo', - '.tif' : 'image/tiff', - '.tiff' : 'image/tiff', - '.tr' : 'application/x-troff', - '.tsv' : 'text/tab-separated-values', - '.txt' : 'text/plain', - '.ustar' : 'application/x-ustar', - '.vcf' : 'text/x-vcard', - '.wav' : 'audio/x-wav', - '.wiz' : 'application/msword', - '.wsdl' : 'application/xml', - '.xbm' : 'image/x-xbitmap', - '.xlb' : 'application/vnd.ms-excel', - # Duplicates :( - '.xls' : 'application/excel', - '.xls' : 'application/vnd.ms-excel', - '.xml' : 'text/xml', - '.xpdl' : 'application/xml', - '.xpm' : 'image/x-xpixmap', - '.xsl' : 'application/xml', - '.xwd' : 'image/x-xwindowdump', - '.zip' : 'application/zip', - } - - # These are non-standard types, commonly found in the wild. They will - # only match if strict=0 flag is given to the API methods. - - # Please sort these too - common_types = { - '.jpg' : 'image/jpg', - '.mid' : 'audio/midi', - '.midi': 'audio/midi', - '.pct' : 'image/pict', - '.pic' : 'image/pict', - '.pict': 'image/pict', - '.rtf' : 'application/rtf', - '.xul' : 'text/xul' - } - - -_default_mime_types() - - -if __name__ == '__main__': - import getopt - - USAGE = """\ -Usage: mimetypes.py [options] type - -Options: - --help / -h -- print this message and exit - --lenient / -l -- additionally search of some common, but non-standard - types. - --extension / -e -- guess extension instead of type - -More than one type argument may be given. -""" - - def usage(code, msg=''): - print USAGE - if msg: print msg - sys.exit(code) - - try: - opts, args = getopt.getopt(sys.argv[1:], 'hle', - ['help', 'lenient', 'extension']) - except getopt.error, msg: - usage(1, msg) - - strict = 1 - extension = 0 - for opt, arg in opts: - if opt in ('-h', '--help'): - usage(0) - elif opt in ('-l', '--lenient'): - strict = 0 - elif opt in ('-e', '--extension'): - extension = 1 - for gtype in args: - if extension: - guess = guess_extension(gtype, strict) - if not guess: print "I don't know anything about type", gtype - else: print guess - else: - guess, encoding = guess_type(gtype, strict) - if not guess: print "I don't know anything about type", gtype - else: print 'type:', guess, 'encoding:', encoding \ No newline at end of file diff --git a/shotgun_api3/lib/mockgun/__init__.py b/shotgun_api3/lib/mockgun/__init__.py deleted file mode 100644 index 6a83e99d7..000000000 --- a/shotgun_api3/lib/mockgun/__init__.py +++ /dev/null @@ -1,35 +0,0 @@ -""" - ----------------------------------------------------------------------------- - Copyright (c) 2009-2017, Shotgun Software Inc - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - - Neither the name of the Shotgun Software Inc nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------------------------------------------------------------------ -""" - -from .schema import generate_schema # noqa -from .mockgun import Shotgun # noqa -from .errors import MockgunError # noqa \ No newline at end of file diff --git a/shotgun_api3/lib/mockgun/errors.py b/shotgun_api3/lib/mockgun/errors.py deleted file mode 100644 index 481f194a4..000000000 --- a/shotgun_api3/lib/mockgun/errors.py +++ /dev/null @@ -1,42 +0,0 @@ -""" - ----------------------------------------------------------------------------- - Copyright (c) 2009-2017, Shotgun Software Inc - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - - Neither the name of the Shotgun Software Inc nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------------------------------------------------------------------ -""" - - -# ---------------------------------------------------------------------------- -# Errors -class MockgunError(Exception): - """ - Base for all Mockgun related API Errors. - These are errors that relate to mockgun specifically, for example - relating to mockups setup and initialization. For operational errors, - mockgun raises ShotgunErrors just like the Shotgun API. - """ diff --git a/shotgun_api3/lib/mockgun/mockgun.py b/shotgun_api3/lib/mockgun/mockgun.py deleted file mode 100644 index 18e4a142c..000000000 --- a/shotgun_api3/lib/mockgun/mockgun.py +++ /dev/null @@ -1,890 +0,0 @@ -""" - ----------------------------------------------------------------------------- - Copyright (c) 2009-2017, Shotgun Software Inc - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - - Neither the name of the Shotgun Software Inc nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------------------------------------------------------------------ - - - ------------------------------------------------------------------------------ -M O C K G U N ------------------------------------------------------------------------------ - -Experimental software ahead! ----------------------------- -Disclaimer! Mockgun is in its early stages of development. It is not fully -compatible with the Shotgun API yet and we offer no guarantees at this point -that future versions of Mockgun will be backwards compatible. Consider this -alpha level software and use at your own risk. - - -What is Mockgun? ----------------- -Mockgun is a Shotgun API mocker. It's a class that has got *most* of the same -methods and parameters that the Shotgun API has got. Mockgun is essentially a -Shotgun *emulator* that (for basic operations) looks and feels like Shotgun. - -The primary purpose of Mockgun is to drive unit test rigs where it becomes -too slow, cumbersome or non-practical to connect to a real Shotgun. Using a -Mockgun for unit tests means that a test can be rerun over and over again -from exactly the same database state. This can be hard to do if you connect -to a live Shotgun instance. - - -How do I use Mockgun? ---------------------- -First of all, you need a Shotgun schema to run against. This will define -all the fields and entities that mockgun will use. Simply connect to -your Shotgun site and use the generate_schema() method to download -the schema data: - - # connect to your site - from shotgun_api3 import Shotgun - sg = Shotgun("https://mysite.shotgunstudio.com", script_name="xyz", api_key="abc") - - # write out schema data to files - from shotgun_api3.lib import mockgun - mockgun.generate_schema(sg, "/tmp/schema", "/tmp/entity_schema") - -Now that you have a schema, you can tell your mockgun instance about it. -We do this as a class-level operation, so that the consctructor can be -exactly like the real Shotgun one: - - from shotgun_api3.lib import mockgun - - # tell mockgun about the schema - mockgun.Shotgun.set_schema_paths("/tmp/schema", "/tmp/entity_schema") - - # we are ready to mock! - # this call will not connect to mysite, but instead create a - # mockgun instance which is connected to an *empty* shotgun site - # which has got the same schema as mysite. - sg = mockgun.Shotgun("https://mysite.shotgunstudio.com", script_name="xyz", api_key="abc") - - # now you can start putting stuff in - print(sg.create("HumanUser", {"firstname": "John", "login": "john"})) - # prints {'login': 'john', 'type': 'HumanUser', 'id': 1, 'firstname': 'John'} - - # and find what you have created - print(sg.find("HumanUser", [["login", "is", "john"]])) - prints [{'type': 'HumanUser', 'id': 1}] - -That's it! Mockgun is used to run the Shotgun Pipeline Toolkit unit test rig. - -Mockgun has a 'database' in the form of a dictionary stored in Mockgun._db -By editing this directly, you can modify the database without going through -the API. - - -What are the limitations? ---------------------- -There are many. Don't expect mockgun to be fully featured at this point. -Below is a non-exhaustive list of things that we still need to implement: - -- Many find queries won't work -- Methods around session handling and authentication is not implemented -- Attachments and upload is rundimental at best -- Schema modification isn't most most likely will never be supported -- There is no validation or sanitation - -""" - -import datetime - -from ... import ShotgunError -from ...shotgun import _Config -from .errors import MockgunError -from .schema import SchemaFactory - -# ---------------------------------------------------------------------------- -# Version -__version__ = "0.0.1" - - -# ---------------------------------------------------------------------------- -# API - -class Shotgun(object): - """ - Mockgun is a mocked Shotgun API, designed for test purposes. - It generates an object which looks and feels like a normal Shotgun API instance. - Instead of connecting to a real server, it keeps all its data in memory in a way - which makes it easy to introspect and test. - - The methods presented in this class reflect the Shotgun API and are therefore - sparsely documented. - - Please note that this class is built for test purposes only and only creates an - object which *roughly* resembles the Shotgun API - however, for most common - use cases, this is enough to be able to perform relevant and straight forward - testing of code. - """ - - __schema_path = None - __schema_entity_path = None - - @classmethod - def set_schema_paths(cls, schema_path, schema_entity_path): - """ - Set the path where schema files can be found. This is done at the class - level so all Shotgun instances will share the same schema. - The responsability to generate and load these files is left to the user - changing the default value. - - :param schema_path: Directory path where schema files are. - """ - cls.__schema_path = schema_path - cls.__schema_entity_path = schema_entity_path - - @classmethod - def get_schema_paths(cls): - """ - Returns a tuple with paths to the files which are part of the schema. - These paths can then be used in generate_schema if needed. - - :returns: A tuple with schema_file_path and schema_entity_file_path - """ - return (cls.__schema_path, cls.__schema_entity_path) - - def __init__(self, - base_url, - script_name=None, - api_key=None, - convert_datetimes_to_utc=True, - http_proxy=None, - ensure_ascii=True, - connect=True, - ca_certs=None, - login=None, - password=None, - sudo_as_login=None, - session_token=None, - auth_token=None): - - # emulate the config object in the Shotgun API. - # these settings won't make sense for mockgun, but - # having them present means code and get and set them - # they way they would expect to in the real API. - self.config = _Config(self) - - self.config.set_server_params(base_url) - - # load in the shotgun schema to associate with this Shotgun - (schema_path, schema_entity_path) = self.get_schema_paths() - - if schema_path is None or schema_entity_path is None: - raise MockgunError("Cannot create Mockgun instance because no schema files have been defined. " - "Before creating a Mockgun instance, please call Mockgun.set_schema_paths() " - "in order to specify which Flow Production Tracking schema Mockgun should operate against.") - - self._schema, self._schema_entity = SchemaFactory.get_schemas(schema_path, schema_entity_path) - - # initialize the "database" - self._db = dict((entity, {}) for entity in self._schema) - - # set some basic public members that exist in the Shotgun API - self.base_url = base_url - - # bootstrap the event log - # let's make sure there is at least one event log id in our mock db - data = {} - data["event_type"] = "Hello_Mockgun_World" - data["description"] = "Mockgun was born. Yay." - self.create("EventLogEntry", data) - - self.finds = 0 - - ################################################################################################### - # public API methods - - def get_session_token(self): - return "bogus_session_token" - - def schema_read(self): - return self._schema - - def schema_field_create(self, entity_type, data_type, display_name, properties=None): - raise NotImplementedError - - def schema_field_update(self, entity_type, field_name, properties): - raise NotImplementedError - - def schema_field_delete(self, entity_type, field_name): - raise NotImplementedError - - def schema_entity_read(self): - return self._schema_entity - - def schema_field_read(self, entity_type, field_name=None): - if field_name is None: - return self._schema[entity_type] - else: - return dict((k, v) for k, v in self._schema[entity_type].items() if k == field_name) - - def find( - self, entity_type, filters, fields=None, order=None, filter_operator=None, - limit=0, retired_only=False, page=0 - ): - - self.finds += 1 - - self._validate_entity_type(entity_type) - # do not validate custom fields - this makes it hard to mock up a field quickly - # self._validate_entity_fields(entity_type, fields) - - # FIXME: This should be refactored so that we can use the complex filer - # style in nested filter operations. - if isinstance(filters, dict): - # complex filter style! - # {'conditions': [{'path': 'id', 'relation': 'is', 'values': [1]}], 'logical_operator': 'and'} - - resolved_filters = [] - for f in filters["conditions"]: - - if f["path"].startswith("$FROM$"): - # special $FROM$Task.step.entity syntax - # skip this for now - continue - - if len(f["values"]) != 1: - # {'path': 'id', 'relation': 'in', 'values': [1,2,3]} --> ["id", "in", [1,2,3]] - resolved_filters.append([f["path"], f["relation"], f["values"]]) - else: - # {'path': 'id', 'relation': 'is', 'values': [3]} --> ["id", "is", 3] - resolved_filters.append([f["path"], f["relation"], f["values"][0]]) - - else: - # traditiona style sg filters - resolved_filters = filters - - results = [ - # Apply the filters for every single entities for the given entity type. - row for row in self._db[entity_type].values() - if self._row_matches_filters( - entity_type, row, resolved_filters, filter_operator, retired_only - ) - ] - - # handle the ordering of the recordset - if order: - # order: [{"field_name": "code", "direction": "asc"}, ... ] - def sort_none(k, order_field): - """ - Handle sorting of None consistently. - Note: Doesn't handle [checkbox, serializable, url]. - """ - field_type = self._get_field_type(k["type"], order_field) - value = k[order_field] - if value is not None: - return value - elif field_type in ("number", "percent", "duration"): - return 0 - elif field_type == "float": - return 0.0 - elif field_type in ("text", "entity_type", "date", "list", "status_list"): - return "" - elif field_type == "date_time": - return datetime.datetime(datetime.MINYEAR, 1, 1) - return None - - for order_entry in order: - if "field_name" not in order_entry: - raise ValueError("Order clauses must be list of dicts with keys 'field_name' and 'direction'!") - - order_field = order_entry["field_name"] - if order_entry["direction"] == "asc": - desc_order = False - elif order_entry["direction"] == "desc": - desc_order = True - else: - raise ValueError("Unknown ordering direction") - - results = sorted( - results, - key=lambda k: sort_none(k, order_field), - reverse=desc_order, - ) - - if fields is None: - fields = set(["type", "id"]) - else: - fields = set(fields) | set(["type", "id"]) - - # get the values requested - val = [dict((field, self._get_field_from_row(entity_type, row, field)) for field in fields) for row in results] - - return val - - def find_one( - self, entity_type, filters, fields=None, order=None, filter_operator=None, - retired_only=False - ): - results = self.find( - entity_type, filters, fields=fields, - order=order, filter_operator=filter_operator, retired_only=retired_only - ) - return results[0] if results else None - - def batch(self, requests): - results = [] - for request in requests: - if request["request_type"] == "create": - results.append(self.create(request["entity_type"], request["data"])) - elif request["request_type"] == "update": - # note: Shotgun.update returns a list of a single item - results.append( - self.update(request["entity_type"], - request["entity_id"], - request["data"], - request.get("multi_entity_update_modes"))[0] - ) - elif request["request_type"] == "delete": - results.append(self.delete(request["entity_type"], request["entity_id"])) - else: - raise ShotgunError("Invalid request type %s in request %s" % (request["request_type"], request)) - return results - - def create(self, entity_type, data, return_fields=None): - - # special handling of storage fields - if a field value - # is a dict with a key local_path, then add fields - # local_path_linux, local_path_windows, local_path_mac - # as a reflection of this - for d in data: - if isinstance(data[d], dict) and "local_path" in data[d]: - # partly imitate some of the business logic happening on the - # server side of shotgun when a file/link entity value is created - if "local_storage" not in data[d]: - data[d]["local_storage"] = {"id": 0, "name": "auto_generated_by_mockgun", "type": "LocalStorage"} - if "local_path_linux" not in data[d]: - data[d]["local_path_linux"] = data[d]["local_path"] - if "local_path_windows" not in data[d]: - data[d]["local_path_windows"] = data[d]["local_path"] - if "local_path_mac" not in data[d]: - data[d]["local_path_mac"] = data[d]["local_path"] - - self._validate_entity_type(entity_type) - self._validate_entity_data(entity_type, data) - self._validate_entity_fields(entity_type, return_fields) - try: - # get next id in this table - next_id = max(self._db[entity_type]) + 1 - except ValueError: - next_id = 1 - - row = self._get_new_row(entity_type) - - self._update_row(entity_type, row, data) - row["id"] = next_id - - self._db[entity_type][next_id] = row - - if return_fields is None: - result = dict((field, self._get_field_from_row(entity_type, row, field)) for field in data) - else: - result = dict((field, self._get_field_from_row(entity_type, row, field)) for field in return_fields) - - result["type"] = row["type"] - result["id"] = row["id"] - - return result - - def update(self, entity_type, entity_id, data, multi_entity_update_modes=None): - self._validate_entity_type(entity_type) - self._validate_entity_data(entity_type, data) - self._validate_entity_exists(entity_type, entity_id) - - row = self._db[entity_type][entity_id] - self._update_row(entity_type, row, data, multi_entity_update_modes) - - return [dict((field, item) for field, item in row.items() if field in data or field in ("type", "id"))] - - def delete(self, entity_type, entity_id): - self._validate_entity_type(entity_type) - self._validate_entity_exists(entity_type, entity_id) - - row = self._db[entity_type][entity_id] - if not row["__retired"]: - row["__retired"] = True - return True - else: - return False - - def revive(self, entity_type, entity_id): - self._validate_entity_type(entity_type) - self._validate_entity_exists(entity_type, entity_id) - - row = self._db[entity_type][entity_id] - if row["__retired"]: - row["__retired"] = False - return True - else: - return False - - def upload(self, entity_type, entity_id, path, field_name=None, display_name=None, tag_list=None): - raise NotImplementedError - - def upload_thumbnail(self, entity_type, entity_id, path, **kwargs): - pass - - def add_user_agent(self, agent): - pass - - def set_session_uuid(self, session_uuid): - pass - - ################################################################################################### - # internal methods and members - - def _validate_entity_type(self, entity_type): - if entity_type not in self._schema: - raise ShotgunError("%s is not a valid entity" % entity_type) - - def _validate_entity_data(self, entity_type, data): - if "id" in data or "type" in data: - raise ShotgunError("Can't set id or type on create or update") - - self._validate_entity_fields(entity_type, data.keys()) - - for field, item in data.items(): - - if item is None: - # none is always ok - continue - - field_info = self._schema[entity_type][field] - - if field_info["data_type"]["value"] == "multi_entity": - if not isinstance(item, list): - raise ShotgunError( - "%s.%s is of type multi_entity, but data %s is not a list" % - (entity_type, field, item) - ) - elif item and any(not isinstance(sub_item, dict) for sub_item in item): - raise ShotgunError( - "%s.%s is of type multi_entity, but data %s contains a non-dictionary" % - (entity_type, field, item) - ) - elif item and any("id" not in sub_item or "type" not in sub_item for sub_item in item): - raise ShotgunError( - "%s.%s is of type multi-entity, but an item in data %s does not contain 'type' and 'id'" % - (entity_type, field, item) - ) - elif item and any( - sub_item["type"] not in field_info["properties"]["valid_types"]["value"] for sub_item in item - ): - raise ShotgunError( - "%s.%s is of multi-type entity, but an item in data %s has an invalid type (expected one of %s)" - % (entity_type, field, item, field_info["properties"]["valid_types"]["value"]) - ) - - elif field_info["data_type"]["value"] == "entity": - if not isinstance(item, dict): - raise ShotgunError( - "%s.%s is of type entity, but data %s is not a dictionary" % - (entity_type, field, item) - ) - elif "id" not in item or "type" not in item: - raise ShotgunError( - "%s.%s is of type entity, but data %s does not contain 'type' and 'id'" - % (entity_type, field, item) - ) - # elif item["type"] not in field_info["properties"]["valid_types"]["value"]: - # raise ShotgunError( - # "%s.%s is of type entity, but data %s has an invalid type (expected one of %s)" % - # (entity_type, field, item, field_info["properties"]["valid_types"]["value"]) - # ) - - else: - try: - sg_type = field_info["data_type"]["value"] - python_type = {"number": int, - "float": float, - "checkbox": bool, - "percent": int, - "text": str, - "serializable": dict, - "entity_type": str, - "date": str, - "date_time": datetime.datetime, - "duration": int, - "list": str, - "status_list": str, - "url": dict}[sg_type] - except KeyError: - raise ShotgunError( - "Field %s.%s: Handling for Flow Production Tracking type %s is not implemented" % - (entity_type, field, sg_type) - ) - - if not isinstance(item, python_type): - raise ShotgunError( - "%s.%s is of type %s, but data %s is not of type %s" % - (entity_type, field, type(item), sg_type, python_type) - ) - - # TODO: add check for correct timezone - - def _validate_entity_fields(self, entity_type, fields): - self._validate_entity_type(entity_type) - if fields is not None: - valid_fields = set(self._schema[entity_type].keys()) - for field in fields: - try: - field2, entity_type2, field3 = field.split(".", 2) - self._validate_entity_fields(entity_type2, [field3]) - except ValueError: - if field not in valid_fields and field not in ("type", "id"): - raise ShotgunError("%s is not a valid field for entity %s" % (field, entity_type)) - - def _get_default_value(self, entity_type, field): - field_info = self._schema[entity_type][field] - if field_info["data_type"]["value"] == "multi_entity": - default_value = [] - else: - default_value = field_info["properties"]["default_value"]["value"] - return default_value - - def _get_new_row(self, entity_type): - row = {"type": entity_type, "__retired": False} - for field in self._schema[entity_type]: - field_info = self._schema[entity_type][field] - if field_info["data_type"]["value"] == "multi_entity": - default_value = [] - else: - default_value = field_info["properties"]["default_value"]["value"] - row[field] = default_value - return row - - def _compare(self, field_type, lval, operator, rval): - """ - Compares a field using the operator and value provide by the filter. - - :param str field_type: Type of the field we are operating on. - :param lval: Value inside that field. Can be of any type: datetime, date, int, str, bool, etc. - :param str operator: Name of the operator to use. - :param rval: The value following the operator in a filter. - - :returns: The result of the operator that was applied. - :rtype: bool - """ - # If we have a list of scalar values - if isinstance(lval, list) and field_type != "multi_entity": - # Compare each one. If one matches the predicate we're good! - return any((self._compare(field_type, sub_val, operator, rval)) for sub_val in lval) - - if field_type == "checkbox": - if operator == "is": - return lval == rval - elif operator == "is_not": - return lval != rval - elif field_type in ("float", "number", "date", "date_time"): - if operator == "is": - return lval == rval - elif operator == "is_not": - return lval != rval - elif operator == "less_than": - return lval < rval - elif operator == "greater_than": - return lval > rval - elif operator == "between": - return lval >= rval[0] and lval <= rval[1] - elif operator == "not_between": - return lval < rval[0] or lval > rval[1] - elif operator == "in": - return lval in rval - elif field_type in ("list", "status_list"): - if operator == "is": - return lval == rval - elif operator == "is_not": - return lval != rval - elif operator == "in": - return lval in rval - elif operator == "not_in": - return lval not in rval - elif field_type == "entity_type": - if operator == "is": - return lval == rval - elif field_type == "text": - # Some operations expect a list but can deal with a single value - if operator in ("in", "not_in") and not isinstance(rval, list): - rval = [rval] - # Some operation expect a string but can deal with None - elif operator in ("starts_with", "ends_with", "contains", "not_contains"): - lval = lval or '' - rval = rval or '' - # Shotgun string comparison is case insensitive - lval = lval.lower() if lval is not None else None - if isinstance(rval, list): - rval = [val.lower() if val is not None else None for val in rval] - else: - rval = rval.lower() if rval is not None else None - - if operator == "is": - return lval == rval - elif operator == "is_not": - return lval != rval - elif operator == "in": - return lval in rval - elif operator == "contains": - return rval in lval - elif operator == "not_contains": - return rval not in lval - elif operator == "starts_with": - return lval.startswith(rval) - elif operator == "ends_with": - return lval.endswith(rval) - elif operator == "not_in": - return lval not in rval - elif field_type == "entity": - if operator == "is": - # If one of the two is None, ensure both are. - if lval is None or rval is None: - return lval == rval - # Both values are set, compare them. - return lval["type"] == rval["type"] and lval["id"] == rval["id"] - elif operator == "is_not": - if lval is None or rval is None: - return lval != rval - if rval is None: - # We already know lval is not None, so we know they are not equal. - return True - return lval["type"] != rval["type"] or lval["id"] != rval["id"] - elif operator == "in": - return all((lval["type"] == sub_rval["type"] and lval["id"] == sub_rval["id"]) for sub_rval in rval) - elif operator == "type_is": - return lval["type"] == rval - elif operator == "type_is_not": - return lval["type"] != rval - elif operator == "name_contains": - return rval in lval["name"] - elif operator == "name_not_contains": - return rval not in lval["name"] - elif operator == "name_starts_with": - return lval["name"].startswith(rval) - elif operator == "name_ends_with": - return lval["name"].endswith(rval) - elif field_type == "multi_entity": - if operator == "is": - if rval is None: - return len(lval) == 0 - return rval["id"] in (sub_lval["id"] for sub_lval in lval) - elif operator == "is_not": - if rval is None: - return len(lval) != 0 - return rval["id"] not in (sub_lval["id"] for sub_lval in lval) - - raise ShotgunError("The %s operator is not supported on the %s type" % (operator, field_type)) - - def _get_field_from_row(self, entity_type, row, field): - # split dotted form fields - try: - # is it something like sg_sequence.Sequence.code ? - field2, entity_type2, field3 = field.split(".", 2) - - if field2 in row: - - field_value = row[field2] - - # If we have a list of links, retrieve the subfields one by one. - if isinstance(field_value, list): - values = [] - for linked_row in field_value: - # Make sure we're actually iterating on links. - if not isinstance(linked_row, dict): - raise ShotgunError("Invalid deep query field %s.%s" % (entity_type, field)) - - # Skips entities that are not of the requested type. - if linked_row["type"] != entity_type2: - continue - - entity = self._db[linked_row["type"]][linked_row["id"]] - - sub_field_value = self._get_field_from_row(entity_type2, entity, field3) - values.append(sub_field_value) - return values - # The field is not set, so return None. - elif field_value is None: - return None - # not multi entity, must be entity. - elif not isinstance(field_value, dict): - raise ShotgunError("Invalid deep query field %s.%s" % (entity_type, field)) - - # make sure that types in the query match type in the linked field - if entity_type2 != field_value["type"]: - raise ShotgunError("Deep query field %s.%s does not match type " - "with data %s" % (entity_type, field, field_value)) - - # ok so looks like the value is an entity link - # e.g. db contains: {"sg_sequence": {"type":"Sequence", "id": 123 } } - linked_row = self._db[field_value["type"]][field_value["id"]] - - return self._get_field_from_row(entity_type2, linked_row, field3) - else: - # sg returns none for unknown stuff - return None - - except ValueError: - # this is not a deep-linked field - just something like "code" - if field in row: - return row[field] - else: - # sg returns none for unknown stuff - return None - - def _get_field_type(self, entity_type, field): - # split dotted form fields - try: - field2, entity_type2, field3 = field.split(".", 2) - return self._get_field_type(entity_type2, field3) - except ValueError: - return self._schema[entity_type][field]["data_type"]["value"] - - def _row_matches_filter(self, entity_type, row, sg_filter, retired_only): - - try: - field, operator, rval = sg_filter - except ValueError: - raise ShotgunError("Filters must be in the form [lval, operator, rval]") - - # Special case, field is None when we have a filter operator. - if field is None: - if operator in ["any", "all"]: - return self._row_matches_filters(entity_type, row, rval, operator, retired_only) - else: - raise ShotgunError("Unknown filter_operator type: %s" % operator) - else: - - lval = self._get_field_from_row(entity_type, row, field) - - field_type = self._get_field_type(entity_type, field) - - # if we're operating on an entity, we'll need to grab the name from the lval's row - if field_type == "entity": - # If the entity field is set, we'll retrieve the name of the entity. - if lval is not None: - link_type = lval["type"] - link_id = lval["id"] - lval_row = self._db[link_type][link_id] - if "name" in lval_row: - lval["name"] = lval_row["name"] - elif "code" in lval_row: - lval["name"] = lval_row["code"] - - return self._compare(field_type, lval, operator, rval) - - def _rearrange_filters(self, filters): - """ - Modifies the filter syntax to turn it into a list of three items regardless - of the actual filter. Most of the filters are list of three elements, so this doesn't change much. - - The filter_operator syntax uses a dictionary with two keys, "filters" and - "filter_operator". Filters using this syntax will be turned into - [None, filter["filter_operator"], filter["filters"]] - - Filters of the form [field, operator, values....] will be turned into - [field, operator, [values...]]. - - :param list filters: List of filters to rearrange. - - :returns: A list of three items. - """ - rearranged_filters = [] - - # now translate ["field", "in", 2,3,4] --> ["field", "in", [2, 3, 4]] - for f in filters: - if isinstance(f, list): - if len(f) > 3: - # ["field", "in", 2,3,4] --> ["field", "in", [2, 3, 4]] - new_filter = [f[0], f[1], f[2:]] - - elif f[1] == "in" and not isinstance(f[2], list): - # ["field", "in", 2] --> ["field", "in", [2]] - new_filter = [f[0], f[1], [f[2]]] - - else: - new_filter = f - elif isinstance(f, dict): - if "filter_operator" not in f or "filters" not in f: - raise ShotgunError( - "Bad filter operator, requires keys 'filter_operator' and 'filters', " - "found %s" % ", ".join(f.keys()) - ) - new_filter = [None, f["filter_operator"], f["filters"]] - else: - raise ShotgunError( - "Filters can only be lists or dictionaries, not %s." % type(f).__name__ - ) - - rearranged_filters.append(new_filter) - - return rearranged_filters - - def _row_matches_filters(self, entity_type, row, filters, filter_operator, retired_only): - filters = self._rearrange_filters(filters) - - if retired_only and not row["__retired"] or not retired_only and row["__retired"]: - # ignore retired rows unless the retired_only flag is set - # ignore live rows if the retired_only flag is set - return False - elif filter_operator in ("all", None): - return all(self._row_matches_filter(entity_type, row, filter, retired_only) for filter in filters) - elif filter_operator == "any": - return any(self._row_matches_filter(entity_type, row, filter, retired_only) for filter in filters) - else: - raise ShotgunError("%s is not a valid filter operator" % filter_operator) - - def _update_row(self, entity_type, row, data, multi_entity_update_modes=None): - for field in data: - field_type = self._get_field_type(entity_type, field) - if field_type == "entity" and data[field]: - row[field] = {"type": data[field]["type"], "id": data[field]["id"]} - elif field_type == "multi_entity": - update_mode = multi_entity_update_modes.get(field, "set") if multi_entity_update_modes else "set" - - if update_mode == "add": - for item in data[field]: - new_item = {"type": item["type"], "id": item["id"]} - if new_item not in row[field]: - row[field].append(new_item) - elif update_mode == "remove": - row[field] = [ - item - for item in row[field] - for new_item in data[field] - if item["id"] != new_item["id"] - or item["type"] != new_item["type"] - ] - elif update_mode == "set": - row[field] = [{"type": item["type"], "id": item["id"]} for item in data[field]] - else: - row[field] = data[field] - - def _validate_entity_exists(self, entity_type, entity_id): - if entity_id not in self._db[entity_type]: - raise ShotgunError("No entity of type %s exists with id %s" % (entity_type, entity_id)) diff --git a/shotgun_api3/lib/mockgun/schema.py b/shotgun_api3/lib/mockgun/schema.py deleted file mode 100644 index 5d5019df4..000000000 --- a/shotgun_api3/lib/mockgun/schema.py +++ /dev/null @@ -1,120 +0,0 @@ -""" - ----------------------------------------------------------------------------- - Copyright (c) 2009-2017, Shotgun Software Inc - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - - Neither the name of the Shotgun Software Inc nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ------------------------------------------------------------------------------ -""" - -from ..six.moves import cPickle as pickle -import os - -from .errors import MockgunError - - -class SchemaFactory(object): - """ - Allows to instantiate a pickled schema. - """ - - _schema_entity_cache = None - _schema_entity_cache_path = None - _schema_cache = None - _schema_cache_path = None - - @classmethod - def get_schemas(cls, schema_path, schema_entity_path): - """ - Retrieves the schemas from disk. - - :param str schema_path: Path to the schema. - :param str schema_entity_path: Path to the entities schema. - - :returns: Pair of dictionaries holding the schema and entities schema. - :rtype: tuple - """ - if not os.path.exists(schema_path): - raise MockgunError("Cannot locate Mockgun schema file '%s'!" % schema_path) - - if not os.path.exists(schema_entity_path): - raise MockgunError("Cannot locate Mockgun schema file '%s'!" % schema_entity_path) - - # Poor man's attempt at a cache. All of our use cases deal with a single pair of files - # for the duration of the unit tests, so keep a cache for both inputs. We don't want - # to deal with ever growing caches anyway. Just having this simple cache has shown - # speed increases of up to 500% for Toolkit unit tests alone. - - if schema_path != cls._schema_cache_path: - cls._schema_cache = cls._read_file(schema_path) - cls._schema_cache_path = schema_path - - if schema_entity_path != cls._schema_entity_cache_path: - cls._schema_entity_cache = cls._read_file(schema_entity_path) - cls._schema_entity_cache_path = schema_entity_path - - return cls._schema_cache, cls._schema_entity_cache - - @classmethod - def _read_file(cls, path): - with open(path, "rb") as fh: - return pickle.load(fh) - - -# Highest protocol that Python 2.4 supports, which is the earliest version of Python we support. -# Actually, this is the same version that Python 2.7 supports at the moment! -_HIGHEST_24_PICKLE_PROTOCOL = 2 - - -# ---------------------------------------------------------------------------- -# Utility methods -def generate_schema(shotgun, schema_file_path, schema_entity_file_path): - """ - Helper method for mockgun. - Generates the schema files needed by the mocker by connecting to a real shotgun - and downloading the schema information for that site. Once the generated schema - files are being passed to mockgun, it will mimic the site's schema structure. - - :param sg_url: Shotgun site url - :param sg_script: Script name to connect with - :param sg_key: Script key to connect with - :param schema_file_path: Path where to write the main schema file to - :param schema_entity_file_path: Path where to write the entity schema file to - """ - - schema = shotgun.schema_read() - fh = open(schema_file_path, "wb") - try: - pickle.dump(schema, fh, protocol=_HIGHEST_24_PICKLE_PROTOCOL) - finally: - fh.close() - - schema_entity = shotgun.schema_entity_read() - fh = open(schema_entity_file_path, "wb") - try: - pickle.dump(schema_entity, fh, protocol=_HIGHEST_24_PICKLE_PROTOCOL) - finally: - fh.close() diff --git a/shotgun_api3/lib/pyparsing.py b/shotgun_api3/lib/pyparsing.py deleted file mode 100644 index 774222bba..000000000 --- a/shotgun_api3/lib/pyparsing.py +++ /dev/null @@ -1,7106 +0,0 @@ -# -*- coding: utf-8 -*- -# module pyparsing.py -# -# Copyright (c) 2003-2019 Paul T. McGuire -# -# Permission is hereby granted, free of charge, to any person obtaining -# a copy of this software and associated documentation files (the -# "Software"), to deal in the Software without restriction, including -# without limitation the rights to use, copy, modify, merge, publish, -# distribute, sublicense, and/or sell copies of the Software, and to -# permit persons to whom the Software is furnished to do so, subject to -# the following conditions: -# -# The above copyright notice and this permission notice shall be -# included in all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -# - -__doc__ = \ -""" -pyparsing module - Classes and methods to define and execute parsing grammars -============================================================================= - -The pyparsing module is an alternative approach to creating and -executing simple grammars, vs. the traditional lex/yacc approach, or the -use of regular expressions. With pyparsing, you don't need to learn -a new syntax for defining grammars or matching expressions - the parsing -module provides a library of classes that you use to construct the -grammar directly in Python. - -Here is a program to parse "Hello, World!" (or any greeting of the form -``", !"``), built up using :class:`Word`, -:class:`Literal`, and :class:`And` elements -(the :class:`'+'` operators create :class:`And` expressions, -and the strings are auto-converted to :class:`Literal` expressions):: - - from pyparsing import Word, alphas - - # define grammar of a greeting - greet = Word(alphas) + "," + Word(alphas) + "!" - - hello = "Hello, World!" - print (hello, "->", greet.parseString(hello)) - -The program outputs the following:: - - Hello, World! -> ['Hello', ',', 'World', '!'] - -The Python representation of the grammar is quite readable, owing to the -self-explanatory class names, and the use of '+', '|' and '^' operators. - -The :class:`ParseResults` object returned from -:class:`ParserElement.parseString` can be -accessed as a nested list, a dictionary, or an object with named -attributes. - -The pyparsing module handles some of the problems that are typically -vexing when writing text parsers: - - - extra or missing whitespace (the above program will also handle - "Hello,World!", "Hello , World !", etc.) - - quoted strings - - embedded comments - - -Getting Started - ------------------ -Visit the classes :class:`ParserElement` and :class:`ParseResults` to -see the base classes that most other pyparsing -classes inherit from. Use the docstrings for examples of how to: - - - construct literal match expressions from :class:`Literal` and - :class:`CaselessLiteral` classes - - construct character word-group expressions using the :class:`Word` - class - - see how to create repetitive expressions using :class:`ZeroOrMore` - and :class:`OneOrMore` classes - - use :class:`'+'`, :class:`'|'`, :class:`'^'`, - and :class:`'&'` operators to combine simple expressions into - more complex ones - - associate names with your parsed results using - :class:`ParserElement.setResultsName` - - access the parsed data, which is returned as a :class:`ParseResults` - object - - find some helpful expression short-cuts like :class:`delimitedList` - and :class:`oneOf` - - find more useful common expressions in the :class:`pyparsing_common` - namespace class -""" - -__version__ = "2.4.7" -__versionTime__ = "30 Mar 2020 00:43 UTC" -__author__ = "Paul McGuire " - -import string -from weakref import ref as wkref -import copy -import sys -import warnings -import re -import collections -import pprint -import traceback -import types -from datetime import datetime -from operator import itemgetter -import itertools -from functools import wraps -from contextlib import contextmanager - -try: - # Python 3 - from itertools import filterfalse -except ImportError: - from itertools import ifilterfalse as filterfalse - -try: - from _thread import RLock -except ImportError: - from threading import RLock - -try: - # Python 3 - from collections.abc import Iterable - from collections.abc import MutableMapping, Mapping -except ImportError: - # Python 2.7 - from collections import Iterable - from collections import MutableMapping, Mapping - -try: - from collections import OrderedDict as _OrderedDict -except ImportError: - try: - from ordereddict import OrderedDict as _OrderedDict - except ImportError: - _OrderedDict = None - -try: - from types import SimpleNamespace -except ImportError: - class SimpleNamespace: pass - -# version compatibility configuration -__compat__ = SimpleNamespace() -__compat__.__doc__ = """ - A cross-version compatibility configuration for pyparsing features that will be - released in a future version. By setting values in this configuration to True, - those features can be enabled in prior versions for compatibility development - and testing. - - - collect_all_And_tokens - flag to enable fix for Issue #63 that fixes erroneous grouping - of results names when an And expression is nested within an Or or MatchFirst; set to - True to enable bugfix released in pyparsing 2.3.0, or False to preserve - pre-2.3.0 handling of named results -""" -__compat__.collect_all_And_tokens = True - -__diag__ = SimpleNamespace() -__diag__.__doc__ = """ -Diagnostic configuration (all default to False) - - warn_multiple_tokens_in_named_alternation - flag to enable warnings when a results - name is defined on a MatchFirst or Or expression with one or more And subexpressions - (only warns if __compat__.collect_all_And_tokens is False) - - warn_ungrouped_named_tokens_in_collection - flag to enable warnings when a results - name is defined on a containing expression with ungrouped subexpressions that also - have results names - - warn_name_set_on_empty_Forward - flag to enable warnings whan a Forward is defined - with a results name, but has no contents defined - - warn_on_multiple_string_args_to_oneof - flag to enable warnings whan oneOf is - incorrectly called with multiple str arguments - - enable_debug_on_named_expressions - flag to auto-enable debug on all subsequent - calls to ParserElement.setName() -""" -__diag__.warn_multiple_tokens_in_named_alternation = False -__diag__.warn_ungrouped_named_tokens_in_collection = False -__diag__.warn_name_set_on_empty_Forward = False -__diag__.warn_on_multiple_string_args_to_oneof = False -__diag__.enable_debug_on_named_expressions = False -__diag__._all_names = [nm for nm in vars(__diag__) if nm.startswith("enable_") or nm.startswith("warn_")] - -def _enable_all_warnings(): - __diag__.warn_multiple_tokens_in_named_alternation = True - __diag__.warn_ungrouped_named_tokens_in_collection = True - __diag__.warn_name_set_on_empty_Forward = True - __diag__.warn_on_multiple_string_args_to_oneof = True -__diag__.enable_all_warnings = _enable_all_warnings - - -__all__ = ['__version__', '__versionTime__', '__author__', '__compat__', '__diag__', - 'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', - 'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', - 'PrecededBy', 'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', - 'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', - 'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', - 'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', - 'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', 'Char', - 'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', - 'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', - 'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'hexnums', - 'htmlComment', 'javaStyleComment', 'line', 'lineEnd', 'lineStart', 'lineno', - 'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', - 'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', - 'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', - 'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', - 'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', - 'indentedBlock', 'originalTextFor', 'ungroup', 'infixNotation', 'locatedExpr', 'withClass', - 'CloseMatch', 'tokenMap', 'pyparsing_common', 'pyparsing_unicode', 'unicode_set', - 'conditionAsParseAction', 're', - ] - -system_version = tuple(sys.version_info)[:3] -PY_3 = system_version[0] == 3 -if PY_3: - _MAX_INT = sys.maxsize - basestring = str - unichr = chr - unicode = str - _ustr = str - - # build list of single arg builtins, that can be used as parse actions - singleArgBuiltins = [sum, len, sorted, reversed, list, tuple, set, any, all, min, max] - -else: - _MAX_INT = sys.maxint - range = xrange - - def _ustr(obj): - """Drop-in replacement for str(obj) that tries to be Unicode - friendly. It first tries str(obj). If that fails with - a UnicodeEncodeError, then it tries unicode(obj). It then - < returns the unicode object | encodes it with the default - encoding | ... >. - """ - if isinstance(obj, unicode): - return obj - - try: - # If this works, then _ustr(obj) has the same behaviour as str(obj), so - # it won't break any existing code. - return str(obj) - - except UnicodeEncodeError: - # Else encode it - ret = unicode(obj).encode(sys.getdefaultencoding(), 'xmlcharrefreplace') - xmlcharref = Regex(r'&#\d+;') - xmlcharref.setParseAction(lambda t: '\\u' + hex(int(t[0][2:-1]))[2:]) - return xmlcharref.transformString(ret) - - # build list of single arg builtins, tolerant of Python version, that can be used as parse actions - singleArgBuiltins = [] - import __builtin__ - - for fname in "sum len sorted reversed list tuple set any all min max".split(): - try: - singleArgBuiltins.append(getattr(__builtin__, fname)) - except AttributeError: - continue - -_generatorType = type((y for y in range(1))) - -def _xml_escape(data): - """Escape &, <, >, ", ', etc. in a string of data.""" - - # ampersand must be replaced first - from_symbols = '&><"\'' - to_symbols = ('&' + s + ';' for s in "amp gt lt quot apos".split()) - for from_, to_ in zip(from_symbols, to_symbols): - data = data.replace(from_, to_) - return data - -alphas = string.ascii_uppercase + string.ascii_lowercase -nums = "0123456789" -hexnums = nums + "ABCDEFabcdef" -alphanums = alphas + nums -_bslash = chr(92) -printables = "".join(c for c in string.printable if c not in string.whitespace) - - -def conditionAsParseAction(fn, message=None, fatal=False): - msg = message if message is not None else "failed user-defined condition" - exc_type = ParseFatalException if fatal else ParseException - fn = _trim_arity(fn) - - @wraps(fn) - def pa(s, l, t): - if not bool(fn(s, l, t)): - raise exc_type(s, l, msg) - - return pa - -class ParseBaseException(Exception): - """base exception class for all parsing runtime exceptions""" - # Performance tuning: we construct a *lot* of these, so keep this - # constructor as small and fast as possible - def __init__(self, pstr, loc=0, msg=None, elem=None): - self.loc = loc - if msg is None: - self.msg = pstr - self.pstr = "" - else: - self.msg = msg - self.pstr = pstr - self.parserElement = elem - self.args = (pstr, loc, msg) - - @classmethod - def _from_exception(cls, pe): - """ - internal factory method to simplify creating one type of ParseException - from another - avoids having __init__ signature conflicts among subclasses - """ - return cls(pe.pstr, pe.loc, pe.msg, pe.parserElement) - - def __getattr__(self, aname): - """supported attributes by name are: - - lineno - returns the line number of the exception text - - col - returns the column number of the exception text - - line - returns the line containing the exception text - """ - if aname == "lineno": - return lineno(self.loc, self.pstr) - elif aname in ("col", "column"): - return col(self.loc, self.pstr) - elif aname == "line": - return line(self.loc, self.pstr) - else: - raise AttributeError(aname) - - def __str__(self): - if self.pstr: - if self.loc >= len(self.pstr): - foundstr = ', found end of text' - else: - foundstr = (', found %r' % self.pstr[self.loc:self.loc + 1]).replace(r'\\', '\\') - else: - foundstr = '' - return ("%s%s (at char %d), (line:%d, col:%d)" % - (self.msg, foundstr, self.loc, self.lineno, self.column)) - def __repr__(self): - return _ustr(self) - def markInputline(self, markerString=">!<"): - """Extracts the exception line from the input string, and marks - the location of the exception with a special symbol. - """ - line_str = self.line - line_column = self.column - 1 - if markerString: - line_str = "".join((line_str[:line_column], - markerString, line_str[line_column:])) - return line_str.strip() - def __dir__(self): - return "lineno col line".split() + dir(type(self)) - -class ParseException(ParseBaseException): - """ - Exception thrown when parse expressions don't match class; - supported attributes by name are: - - lineno - returns the line number of the exception text - - col - returns the column number of the exception text - - line - returns the line containing the exception text - - Example:: - - try: - Word(nums).setName("integer").parseString("ABC") - except ParseException as pe: - print(pe) - print("column: {}".format(pe.col)) - - prints:: - - Expected integer (at char 0), (line:1, col:1) - column: 1 - - """ - - @staticmethod - def explain(exc, depth=16): - """ - Method to take an exception and translate the Python internal traceback into a list - of the pyparsing expressions that caused the exception to be raised. - - Parameters: - - - exc - exception raised during parsing (need not be a ParseException, in support - of Python exceptions that might be raised in a parse action) - - depth (default=16) - number of levels back in the stack trace to list expression - and function names; if None, the full stack trace names will be listed; if 0, only - the failing input line, marker, and exception string will be shown - - Returns a multi-line string listing the ParserElements and/or function names in the - exception's stack trace. - - Note: the diagnostic output will include string representations of the expressions - that failed to parse. These representations will be more helpful if you use `setName` to - give identifiable names to your expressions. Otherwise they will use the default string - forms, which may be cryptic to read. - - explain() is only supported under Python 3. - """ - import inspect - - if depth is None: - depth = sys.getrecursionlimit() - ret = [] - if isinstance(exc, ParseBaseException): - ret.append(exc.line) - ret.append(' ' * (exc.col - 1) + '^') - ret.append("{0}: {1}".format(type(exc).__name__, exc)) - - if depth > 0: - callers = inspect.getinnerframes(exc.__traceback__, context=depth) - seen = set() - for i, ff in enumerate(callers[-depth:]): - frm = ff[0] - - f_self = frm.f_locals.get('self', None) - if isinstance(f_self, ParserElement): - if frm.f_code.co_name not in ('parseImpl', '_parseNoCache'): - continue - if f_self in seen: - continue - seen.add(f_self) - - self_type = type(f_self) - ret.append("{0}.{1} - {2}".format(self_type.__module__, - self_type.__name__, - f_self)) - elif f_self is not None: - self_type = type(f_self) - ret.append("{0}.{1}".format(self_type.__module__, - self_type.__name__)) - else: - code = frm.f_code - if code.co_name in ('wrapper', ''): - continue - - ret.append("{0}".format(code.co_name)) - - depth -= 1 - if not depth: - break - - return '\n'.join(ret) - - -class ParseFatalException(ParseBaseException): - """user-throwable exception thrown when inconsistent parse content - is found; stops all parsing immediately""" - pass - -class ParseSyntaxException(ParseFatalException): - """just like :class:`ParseFatalException`, but thrown internally - when an :class:`ErrorStop` ('-' operator) indicates - that parsing is to stop immediately because an unbacktrackable - syntax error has been found. - """ - pass - -#~ class ReparseException(ParseBaseException): - #~ """Experimental class - parse actions can raise this exception to cause - #~ pyparsing to reparse the input string: - #~ - with a modified input string, and/or - #~ - with a modified start location - #~ Set the values of the ReparseException in the constructor, and raise the - #~ exception in a parse action to cause pyparsing to use the new string/location. - #~ Setting the values as None causes no change to be made. - #~ """ - #~ def __init_( self, newstring, restartLoc ): - #~ self.newParseText = newstring - #~ self.reparseLoc = restartLoc - -class RecursiveGrammarException(Exception): - """exception thrown by :class:`ParserElement.validate` if the - grammar could be improperly recursive - """ - def __init__(self, parseElementList): - self.parseElementTrace = parseElementList - - def __str__(self): - return "RecursiveGrammarException: %s" % self.parseElementTrace - -class _ParseResultsWithOffset(object): - def __init__(self, p1, p2): - self.tup = (p1, p2) - def __getitem__(self, i): - return self.tup[i] - def __repr__(self): - return repr(self.tup[0]) - def setOffset(self, i): - self.tup = (self.tup[0], i) - -class ParseResults(object): - """Structured parse results, to provide multiple means of access to - the parsed data: - - - as a list (``len(results)``) - - by list index (``results[0], results[1]``, etc.) - - by attribute (``results.`` - see :class:`ParserElement.setResultsName`) - - Example:: - - integer = Word(nums) - date_str = (integer.setResultsName("year") + '/' - + integer.setResultsName("month") + '/' - + integer.setResultsName("day")) - # equivalent form: - # date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - # parseString returns a ParseResults object - result = date_str.parseString("1999/12/31") - - def test(s, fn=repr): - print("%s -> %s" % (s, fn(eval(s)))) - test("list(result)") - test("result[0]") - test("result['month']") - test("result.day") - test("'month' in result") - test("'minutes' in result") - test("result.dump()", str) - - prints:: - - list(result) -> ['1999', '/', '12', '/', '31'] - result[0] -> '1999' - result['month'] -> '12' - result.day -> '31' - 'month' in result -> True - 'minutes' in result -> False - result.dump() -> ['1999', '/', '12', '/', '31'] - - day: 31 - - month: 12 - - year: 1999 - """ - def __new__(cls, toklist=None, name=None, asList=True, modal=True): - if isinstance(toklist, cls): - return toklist - retobj = object.__new__(cls) - retobj.__doinit = True - return retobj - - # Performance tuning: we construct a *lot* of these, so keep this - # constructor as small and fast as possible - def __init__(self, toklist=None, name=None, asList=True, modal=True, isinstance=isinstance): - if self.__doinit: - self.__doinit = False - self.__name = None - self.__parent = None - self.__accumNames = {} - self.__asList = asList - self.__modal = modal - if toklist is None: - toklist = [] - if isinstance(toklist, list): - self.__toklist = toklist[:] - elif isinstance(toklist, _generatorType): - self.__toklist = list(toklist) - else: - self.__toklist = [toklist] - self.__tokdict = dict() - - if name is not None and name: - if not modal: - self.__accumNames[name] = 0 - if isinstance(name, int): - name = _ustr(name) # will always return a str, but use _ustr for consistency - self.__name = name - if not (isinstance(toklist, (type(None), basestring, list)) and toklist in (None, '', [])): - if isinstance(toklist, basestring): - toklist = [toklist] - if asList: - if isinstance(toklist, ParseResults): - self[name] = _ParseResultsWithOffset(ParseResults(toklist.__toklist), 0) - else: - self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]), 0) - self[name].__name = name - else: - try: - self[name] = toklist[0] - except (KeyError, TypeError, IndexError): - self[name] = toklist - - def __getitem__(self, i): - if isinstance(i, (int, slice)): - return self.__toklist[i] - else: - if i not in self.__accumNames: - return self.__tokdict[i][-1][0] - else: - return ParseResults([v[0] for v in self.__tokdict[i]]) - - def __setitem__(self, k, v, isinstance=isinstance): - if isinstance(v, _ParseResultsWithOffset): - self.__tokdict[k] = self.__tokdict.get(k, list()) + [v] - sub = v[0] - elif isinstance(k, (int, slice)): - self.__toklist[k] = v - sub = v - else: - self.__tokdict[k] = self.__tokdict.get(k, list()) + [_ParseResultsWithOffset(v, 0)] - sub = v - if isinstance(sub, ParseResults): - sub.__parent = wkref(self) - - def __delitem__(self, i): - if isinstance(i, (int, slice)): - mylen = len(self.__toklist) - del self.__toklist[i] - - # convert int to slice - if isinstance(i, int): - if i < 0: - i += mylen - i = slice(i, i + 1) - # get removed indices - removed = list(range(*i.indices(mylen))) - removed.reverse() - # fixup indices in token dictionary - for name, occurrences in self.__tokdict.items(): - for j in removed: - for k, (value, position) in enumerate(occurrences): - occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) - else: - del self.__tokdict[i] - - def __contains__(self, k): - return k in self.__tokdict - - def __len__(self): - return len(self.__toklist) - - def __bool__(self): - return (not not self.__toklist) - __nonzero__ = __bool__ - - def __iter__(self): - return iter(self.__toklist) - - def __reversed__(self): - return iter(self.__toklist[::-1]) - - def _iterkeys(self): - if hasattr(self.__tokdict, "iterkeys"): - return self.__tokdict.iterkeys() - else: - return iter(self.__tokdict) - - def _itervalues(self): - return (self[k] for k in self._iterkeys()) - - def _iteritems(self): - return ((k, self[k]) for k in self._iterkeys()) - - if PY_3: - keys = _iterkeys - """Returns an iterator of all named result keys.""" - - values = _itervalues - """Returns an iterator of all named result values.""" - - items = _iteritems - """Returns an iterator of all named result key-value tuples.""" - - else: - iterkeys = _iterkeys - """Returns an iterator of all named result keys (Python 2.x only).""" - - itervalues = _itervalues - """Returns an iterator of all named result values (Python 2.x only).""" - - iteritems = _iteritems - """Returns an iterator of all named result key-value tuples (Python 2.x only).""" - - def keys(self): - """Returns all named result keys (as a list in Python 2.x, as an iterator in Python 3.x).""" - return list(self.iterkeys()) - - def values(self): - """Returns all named result values (as a list in Python 2.x, as an iterator in Python 3.x).""" - return list(self.itervalues()) - - def items(self): - """Returns all named result key-values (as a list of tuples in Python 2.x, as an iterator in Python 3.x).""" - return list(self.iteritems()) - - def haskeys(self): - """Since keys() returns an iterator, this method is helpful in bypassing - code that looks for the existence of any defined results names.""" - return bool(self.__tokdict) - - def pop(self, *args, **kwargs): - """ - Removes and returns item at specified index (default= ``last``). - Supports both ``list`` and ``dict`` semantics for ``pop()``. If - passed no argument or an integer argument, it will use ``list`` - semantics and pop tokens from the list of parsed tokens. If passed - a non-integer argument (most likely a string), it will use ``dict`` - semantics and pop the corresponding value from any defined results - names. A second default return value argument is supported, just as in - ``dict.pop()``. - - Example:: - - def remove_first(tokens): - tokens.pop(0) - print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] - print(OneOrMore(Word(nums)).addParseAction(remove_first).parseString("0 123 321")) # -> ['123', '321'] - - label = Word(alphas) - patt = label("LABEL") + OneOrMore(Word(nums)) - print(patt.parseString("AAB 123 321").dump()) - - # Use pop() in a parse action to remove named result (note that corresponding value is not - # removed from list form of results) - def remove_LABEL(tokens): - tokens.pop("LABEL") - return tokens - patt.addParseAction(remove_LABEL) - print(patt.parseString("AAB 123 321").dump()) - - prints:: - - ['AAB', '123', '321'] - - LABEL: AAB - - ['AAB', '123', '321'] - """ - if not args: - args = [-1] - for k, v in kwargs.items(): - if k == 'default': - args = (args[0], v) - else: - raise TypeError("pop() got an unexpected keyword argument '%s'" % k) - if (isinstance(args[0], int) - or len(args) == 1 - or args[0] in self): - index = args[0] - ret = self[index] - del self[index] - return ret - else: - defaultvalue = args[1] - return defaultvalue - - def get(self, key, defaultValue=None): - """ - Returns named result matching the given key, or if there is no - such name, then returns the given ``defaultValue`` or ``None`` if no - ``defaultValue`` is specified. - - Similar to ``dict.get()``. - - Example:: - - integer = Word(nums) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - result = date_str.parseString("1999/12/31") - print(result.get("year")) # -> '1999' - print(result.get("hour", "not specified")) # -> 'not specified' - print(result.get("hour")) # -> None - """ - if key in self: - return self[key] - else: - return defaultValue - - def insert(self, index, insStr): - """ - Inserts new element at location index in the list of parsed tokens. - - Similar to ``list.insert()``. - - Example:: - - print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] - - # use a parse action to insert the parse location in the front of the parsed results - def insert_locn(locn, tokens): - tokens.insert(0, locn) - print(OneOrMore(Word(nums)).addParseAction(insert_locn).parseString("0 123 321")) # -> [0, '0', '123', '321'] - """ - self.__toklist.insert(index, insStr) - # fixup indices in token dictionary - for name, occurrences in self.__tokdict.items(): - for k, (value, position) in enumerate(occurrences): - occurrences[k] = _ParseResultsWithOffset(value, position + (position > index)) - - def append(self, item): - """ - Add single element to end of ParseResults list of elements. - - Example:: - - print(OneOrMore(Word(nums)).parseString("0 123 321")) # -> ['0', '123', '321'] - - # use a parse action to compute the sum of the parsed integers, and add it to the end - def append_sum(tokens): - tokens.append(sum(map(int, tokens))) - print(OneOrMore(Word(nums)).addParseAction(append_sum).parseString("0 123 321")) # -> ['0', '123', '321', 444] - """ - self.__toklist.append(item) - - def extend(self, itemseq): - """ - Add sequence of elements to end of ParseResults list of elements. - - Example:: - - patt = OneOrMore(Word(alphas)) - - # use a parse action to append the reverse of the matched strings, to make a palindrome - def make_palindrome(tokens): - tokens.extend(reversed([t[::-1] for t in tokens])) - return ''.join(tokens) - print(patt.addParseAction(make_palindrome).parseString("lskdj sdlkjf lksd")) # -> 'lskdjsdlkjflksddsklfjkldsjdksl' - """ - if isinstance(itemseq, ParseResults): - self.__iadd__(itemseq) - else: - self.__toklist.extend(itemseq) - - def clear(self): - """ - Clear all elements and results names. - """ - del self.__toklist[:] - self.__tokdict.clear() - - def __getattr__(self, name): - try: - return self[name] - except KeyError: - return "" - - def __add__(self, other): - ret = self.copy() - ret += other - return ret - - def __iadd__(self, other): - if other.__tokdict: - offset = len(self.__toklist) - addoffset = lambda a: offset if a < 0 else a + offset - otheritems = other.__tokdict.items() - otherdictitems = [(k, _ParseResultsWithOffset(v[0], addoffset(v[1]))) - for k, vlist in otheritems for v in vlist] - for k, v in otherdictitems: - self[k] = v - if isinstance(v[0], ParseResults): - v[0].__parent = wkref(self) - - self.__toklist += other.__toklist - self.__accumNames.update(other.__accumNames) - return self - - def __radd__(self, other): - if isinstance(other, int) and other == 0: - # useful for merging many ParseResults using sum() builtin - return self.copy() - else: - # this may raise a TypeError - so be it - return other + self - - def __repr__(self): - return "(%s, %s)" % (repr(self.__toklist), repr(self.__tokdict)) - - def __str__(self): - return '[' + ', '.join(_ustr(i) if isinstance(i, ParseResults) else repr(i) for i in self.__toklist) + ']' - - def _asStringList(self, sep=''): - out = [] - for item in self.__toklist: - if out and sep: - out.append(sep) - if isinstance(item, ParseResults): - out += item._asStringList() - else: - out.append(_ustr(item)) - return out - - def asList(self): - """ - Returns the parse results as a nested list of matching tokens, all converted to strings. - - Example:: - - patt = OneOrMore(Word(alphas)) - result = patt.parseString("sldkj lsdkj sldkj") - # even though the result prints in string-like form, it is actually a pyparsing ParseResults - print(type(result), result) # -> ['sldkj', 'lsdkj', 'sldkj'] - - # Use asList() to create an actual list - result_list = result.asList() - print(type(result_list), result_list) # -> ['sldkj', 'lsdkj', 'sldkj'] - """ - return [res.asList() if isinstance(res, ParseResults) else res for res in self.__toklist] - - def asDict(self): - """ - Returns the named parse results as a nested dictionary. - - Example:: - - integer = Word(nums) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - result = date_str.parseString('12/31/1999') - print(type(result), repr(result)) # -> (['12', '/', '31', '/', '1999'], {'day': [('1999', 4)], 'year': [('12', 0)], 'month': [('31', 2)]}) - - result_dict = result.asDict() - print(type(result_dict), repr(result_dict)) # -> {'day': '1999', 'year': '12', 'month': '31'} - - # even though a ParseResults supports dict-like access, sometime you just need to have a dict - import json - print(json.dumps(result)) # -> Exception: TypeError: ... is not JSON serializable - print(json.dumps(result.asDict())) # -> {"month": "31", "day": "1999", "year": "12"} - """ - if PY_3: - item_fn = self.items - else: - item_fn = self.iteritems - - def toItem(obj): - if isinstance(obj, ParseResults): - if obj.haskeys(): - return obj.asDict() - else: - return [toItem(v) for v in obj] - else: - return obj - - return dict((k, toItem(v)) for k, v in item_fn()) - - def copy(self): - """ - Returns a new copy of a :class:`ParseResults` object. - """ - ret = ParseResults(self.__toklist) - ret.__tokdict = dict(self.__tokdict.items()) - ret.__parent = self.__parent - ret.__accumNames.update(self.__accumNames) - ret.__name = self.__name - return ret - - def asXML(self, doctag=None, namedItemsOnly=False, indent="", formatted=True): - """ - (Deprecated) Returns the parse results as XML. Tags are created for tokens and lists that have defined results names. - """ - nl = "\n" - out = [] - namedItems = dict((v[1], k) for (k, vlist) in self.__tokdict.items() - for v in vlist) - nextLevelIndent = indent + " " - - # collapse out indents if formatting is not desired - if not formatted: - indent = "" - nextLevelIndent = "" - nl = "" - - selfTag = None - if doctag is not None: - selfTag = doctag - else: - if self.__name: - selfTag = self.__name - - if not selfTag: - if namedItemsOnly: - return "" - else: - selfTag = "ITEM" - - out += [nl, indent, "<", selfTag, ">"] - - for i, res in enumerate(self.__toklist): - if isinstance(res, ParseResults): - if i in namedItems: - out += [res.asXML(namedItems[i], - namedItemsOnly and doctag is None, - nextLevelIndent, - formatted)] - else: - out += [res.asXML(None, - namedItemsOnly and doctag is None, - nextLevelIndent, - formatted)] - else: - # individual token, see if there is a name for it - resTag = None - if i in namedItems: - resTag = namedItems[i] - if not resTag: - if namedItemsOnly: - continue - else: - resTag = "ITEM" - xmlBodyText = _xml_escape(_ustr(res)) - out += [nl, nextLevelIndent, "<", resTag, ">", - xmlBodyText, - ""] - - out += [nl, indent, ""] - return "".join(out) - - def __lookup(self, sub): - for k, vlist in self.__tokdict.items(): - for v, loc in vlist: - if sub is v: - return k - return None - - def getName(self): - r""" - Returns the results name for this token expression. Useful when several - different expressions might match at a particular location. - - Example:: - - integer = Word(nums) - ssn_expr = Regex(r"\d\d\d-\d\d-\d\d\d\d") - house_number_expr = Suppress('#') + Word(nums, alphanums) - user_data = (Group(house_number_expr)("house_number") - | Group(ssn_expr)("ssn") - | Group(integer)("age")) - user_info = OneOrMore(user_data) - - result = user_info.parseString("22 111-22-3333 #221B") - for item in result: - print(item.getName(), ':', item[0]) - - prints:: - - age : 22 - ssn : 111-22-3333 - house_number : 221B - """ - if self.__name: - return self.__name - elif self.__parent: - par = self.__parent() - if par: - return par.__lookup(self) - else: - return None - elif (len(self) == 1 - and len(self.__tokdict) == 1 - and next(iter(self.__tokdict.values()))[0][1] in (0, -1)): - return next(iter(self.__tokdict.keys())) - else: - return None - - def dump(self, indent='', full=True, include_list=True, _depth=0): - """ - Diagnostic method for listing out the contents of - a :class:`ParseResults`. Accepts an optional ``indent`` argument so - that this string can be embedded in a nested display of other data. - - Example:: - - integer = Word(nums) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - result = date_str.parseString('12/31/1999') - print(result.dump()) - - prints:: - - ['12', '/', '31', '/', '1999'] - - day: 1999 - - month: 31 - - year: 12 - """ - out = [] - NL = '\n' - if include_list: - out.append(indent + _ustr(self.asList())) - else: - out.append('') - - if full: - if self.haskeys(): - items = sorted((str(k), v) for k, v in self.items()) - for k, v in items: - if out: - out.append(NL) - out.append("%s%s- %s: " % (indent, (' ' * _depth), k)) - if isinstance(v, ParseResults): - if v: - out.append(v.dump(indent=indent, full=full, include_list=include_list, _depth=_depth + 1)) - else: - out.append(_ustr(v)) - else: - out.append(repr(v)) - elif any(isinstance(vv, ParseResults) for vv in self): - v = self - for i, vv in enumerate(v): - if isinstance(vv, ParseResults): - out.append("\n%s%s[%d]:\n%s%s%s" % (indent, - (' ' * (_depth)), - i, - indent, - (' ' * (_depth + 1)), - vv.dump(indent=indent, - full=full, - include_list=include_list, - _depth=_depth + 1))) - else: - out.append("\n%s%s[%d]:\n%s%s%s" % (indent, - (' ' * (_depth)), - i, - indent, - (' ' * (_depth + 1)), - _ustr(vv))) - - return "".join(out) - - def pprint(self, *args, **kwargs): - """ - Pretty-printer for parsed results as a list, using the - `pprint `_ module. - Accepts additional positional or keyword args as defined for - `pprint.pprint `_ . - - Example:: - - ident = Word(alphas, alphanums) - num = Word(nums) - func = Forward() - term = ident | num | Group('(' + func + ')') - func <<= ident + Group(Optional(delimitedList(term))) - result = func.parseString("fna a,b,(fnb c,d,200),100") - result.pprint(width=40) - - prints:: - - ['fna', - ['a', - 'b', - ['(', 'fnb', ['c', 'd', '200'], ')'], - '100']] - """ - pprint.pprint(self.asList(), *args, **kwargs) - - # add support for pickle protocol - def __getstate__(self): - return (self.__toklist, - (self.__tokdict.copy(), - self.__parent is not None and self.__parent() or None, - self.__accumNames, - self.__name)) - - def __setstate__(self, state): - self.__toklist = state[0] - self.__tokdict, par, inAccumNames, self.__name = state[1] - self.__accumNames = {} - self.__accumNames.update(inAccumNames) - if par is not None: - self.__parent = wkref(par) - else: - self.__parent = None - - def __getnewargs__(self): - return self.__toklist, self.__name, self.__asList, self.__modal - - def __dir__(self): - return dir(type(self)) + list(self.keys()) - - @classmethod - def from_dict(cls, other, name=None): - """ - Helper classmethod to construct a ParseResults from a dict, preserving the - name-value relations as results names. If an optional 'name' argument is - given, a nested ParseResults will be returned - """ - def is_iterable(obj): - try: - iter(obj) - except Exception: - return False - else: - if PY_3: - return not isinstance(obj, (str, bytes)) - else: - return not isinstance(obj, basestring) - - ret = cls([]) - for k, v in other.items(): - if isinstance(v, Mapping): - ret += cls.from_dict(v, name=k) - else: - ret += cls([v], name=k, asList=is_iterable(v)) - if name is not None: - ret = cls([ret], name=name) - return ret - -MutableMapping.register(ParseResults) - -def col (loc, strg): - """Returns current column within a string, counting newlines as line separators. - The first column is number 1. - - Note: the default parsing behavior is to expand tabs in the input string - before starting the parsing process. See - :class:`ParserElement.parseString` for more - information on parsing strings containing ```` s, and suggested - methods to maintain a consistent view of the parsed string, the parse - location, and line and column positions within the parsed string. - """ - s = strg - return 1 if 0 < loc < len(s) and s[loc-1] == '\n' else loc - s.rfind("\n", 0, loc) - -def lineno(loc, strg): - """Returns current line number within a string, counting newlines as line separators. - The first line is number 1. - - Note - the default parsing behavior is to expand tabs in the input string - before starting the parsing process. See :class:`ParserElement.parseString` - for more information on parsing strings containing ```` s, and - suggested methods to maintain a consistent view of the parsed string, the - parse location, and line and column positions within the parsed string. - """ - return strg.count("\n", 0, loc) + 1 - -def line(loc, strg): - """Returns the line of text containing loc within a string, counting newlines as line separators. - """ - lastCR = strg.rfind("\n", 0, loc) - nextCR = strg.find("\n", loc) - if nextCR >= 0: - return strg[lastCR + 1:nextCR] - else: - return strg[lastCR + 1:] - -def _defaultStartDebugAction(instring, loc, expr): - print(("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % (lineno(loc, instring), col(loc, instring)))) - -def _defaultSuccessDebugAction(instring, startloc, endloc, expr, toks): - print("Matched " + _ustr(expr) + " -> " + str(toks.asList())) - -def _defaultExceptionDebugAction(instring, loc, expr, exc): - print("Exception raised:" + _ustr(exc)) - -def nullDebugAction(*args): - """'Do-nothing' debug action, to suppress debugging output during parsing.""" - pass - -# Only works on Python 3.x - nonlocal is toxic to Python 2 installs -#~ 'decorator to trim function calls to match the arity of the target' -#~ def _trim_arity(func, maxargs=3): - #~ if func in singleArgBuiltins: - #~ return lambda s,l,t: func(t) - #~ limit = 0 - #~ foundArity = False - #~ def wrapper(*args): - #~ nonlocal limit,foundArity - #~ while 1: - #~ try: - #~ ret = func(*args[limit:]) - #~ foundArity = True - #~ return ret - #~ except TypeError: - #~ if limit == maxargs or foundArity: - #~ raise - #~ limit += 1 - #~ continue - #~ return wrapper - -# this version is Python 2.x-3.x cross-compatible -'decorator to trim function calls to match the arity of the target' -def _trim_arity(func, maxargs=2): - if func in singleArgBuiltins: - return lambda s, l, t: func(t) - limit = [0] - foundArity = [False] - - # traceback return data structure changed in Py3.5 - normalize back to plain tuples - if system_version[:2] >= (3, 5): - def extract_stack(limit=0): - # special handling for Python 3.5.0 - extra deep call stack by 1 - offset = -3 if system_version == (3, 5, 0) else -2 - frame_summary = traceback.extract_stack(limit=-offset + limit - 1)[offset] - return [frame_summary[:2]] - def extract_tb(tb, limit=0): - frames = traceback.extract_tb(tb, limit=limit) - frame_summary = frames[-1] - return [frame_summary[:2]] - else: - extract_stack = traceback.extract_stack - extract_tb = traceback.extract_tb - - # synthesize what would be returned by traceback.extract_stack at the call to - # user's parse action 'func', so that we don't incur call penalty at parse time - - LINE_DIFF = 6 - # IF ANY CODE CHANGES, EVEN JUST COMMENTS OR BLANK LINES, BETWEEN THE NEXT LINE AND - # THE CALL TO FUNC INSIDE WRAPPER, LINE_DIFF MUST BE MODIFIED!!!! - this_line = extract_stack(limit=2)[-1] - pa_call_line_synth = (this_line[0], this_line[1] + LINE_DIFF) - - def wrapper(*args): - while 1: - try: - ret = func(*args[limit[0]:]) - foundArity[0] = True - return ret - except TypeError: - # re-raise TypeErrors if they did not come from our arity testing - if foundArity[0]: - raise - else: - try: - tb = sys.exc_info()[-1] - if not extract_tb(tb, limit=2)[-1][:2] == pa_call_line_synth: - raise - finally: - try: - del tb - except NameError: - pass - - if limit[0] <= maxargs: - limit[0] += 1 - continue - raise - - # copy func name to wrapper for sensible debug output - func_name = "" - try: - func_name = getattr(func, '__name__', - getattr(func, '__class__').__name__) - except Exception: - func_name = str(func) - wrapper.__name__ = func_name - - return wrapper - - -class ParserElement(object): - """Abstract base level parser element class.""" - DEFAULT_WHITE_CHARS = " \n\t\r" - verbose_stacktrace = False - - @staticmethod - def setDefaultWhitespaceChars(chars): - r""" - Overrides the default whitespace chars - - Example:: - - # default whitespace chars are space, and newline - OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def', 'ghi', 'jkl'] - - # change to just treat newline as significant - ParserElement.setDefaultWhitespaceChars(" \t") - OneOrMore(Word(alphas)).parseString("abc def\nghi jkl") # -> ['abc', 'def'] - """ - ParserElement.DEFAULT_WHITE_CHARS = chars - - @staticmethod - def inlineLiteralsUsing(cls): - """ - Set class to be used for inclusion of string literals into a parser. - - Example:: - - # default literal class used is Literal - integer = Word(nums) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] - - - # change to Suppress - ParserElement.inlineLiteralsUsing(Suppress) - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - - date_str.parseString("1999/12/31") # -> ['1999', '12', '31'] - """ - ParserElement._literalStringClass = cls - - @classmethod - def _trim_traceback(cls, tb): - while tb.tb_next: - tb = tb.tb_next - return tb - - def __init__(self, savelist=False): - self.parseAction = list() - self.failAction = None - # ~ self.name = "" # don't define self.name, let subclasses try/except upcall - self.strRepr = None - self.resultsName = None - self.saveAsList = savelist - self.skipWhitespace = True - self.whiteChars = set(ParserElement.DEFAULT_WHITE_CHARS) - self.copyDefaultWhiteChars = True - self.mayReturnEmpty = False # used when checking for left-recursion - self.keepTabs = False - self.ignoreExprs = list() - self.debug = False - self.streamlined = False - self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index - self.errmsg = "" - self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) - self.debugActions = (None, None, None) # custom debug actions - self.re = None - self.callPreparse = True # used to avoid redundant calls to preParse - self.callDuringTry = False - - def copy(self): - """ - Make a copy of this :class:`ParserElement`. Useful for defining - different parse actions for the same parsing pattern, using copies of - the original parse element. - - Example:: - - integer = Word(nums).setParseAction(lambda toks: int(toks[0])) - integerK = integer.copy().addParseAction(lambda toks: toks[0] * 1024) + Suppress("K") - integerM = integer.copy().addParseAction(lambda toks: toks[0] * 1024 * 1024) + Suppress("M") - - print(OneOrMore(integerK | integerM | integer).parseString("5K 100 640K 256M")) - - prints:: - - [5120, 100, 655360, 268435456] - - Equivalent form of ``expr.copy()`` is just ``expr()``:: - - integerM = integer().addParseAction(lambda toks: toks[0] * 1024 * 1024) + Suppress("M") - """ - cpy = copy.copy(self) - cpy.parseAction = self.parseAction[:] - cpy.ignoreExprs = self.ignoreExprs[:] - if self.copyDefaultWhiteChars: - cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS - return cpy - - def setName(self, name): - """ - Define name for this expression, makes debugging and exception messages clearer. - - Example:: - - Word(nums).parseString("ABC") # -> Exception: Expected W:(0123...) (at char 0), (line:1, col:1) - Word(nums).setName("integer").parseString("ABC") # -> Exception: Expected integer (at char 0), (line:1, col:1) - """ - self.name = name - self.errmsg = "Expected " + self.name - if __diag__.enable_debug_on_named_expressions: - self.setDebug() - return self - - def setResultsName(self, name, listAllMatches=False): - """ - Define name for referencing matching tokens as a nested attribute - of the returned parse results. - NOTE: this returns a *copy* of the original :class:`ParserElement` object; - this is so that the client can define a basic element, such as an - integer, and reference it in multiple places with different names. - - You can also set results names using the abbreviated syntax, - ``expr("name")`` in place of ``expr.setResultsName("name")`` - - see :class:`__call__`. - - Example:: - - date_str = (integer.setResultsName("year") + '/' - + integer.setResultsName("month") + '/' - + integer.setResultsName("day")) - - # equivalent form: - date_str = integer("year") + '/' + integer("month") + '/' + integer("day") - """ - return self._setResultsName(name, listAllMatches) - - def _setResultsName(self, name, listAllMatches=False): - newself = self.copy() - if name.endswith("*"): - name = name[:-1] - listAllMatches = True - newself.resultsName = name - newself.modalResults = not listAllMatches - return newself - - def setBreak(self, breakFlag=True): - """Method to invoke the Python pdb debugger when this element is - about to be parsed. Set ``breakFlag`` to True to enable, False to - disable. - """ - if breakFlag: - _parseMethod = self._parse - def breaker(instring, loc, doActions=True, callPreParse=True): - import pdb - # this call to pdb.set_trace() is intentional, not a checkin error - pdb.set_trace() - return _parseMethod(instring, loc, doActions, callPreParse) - breaker._originalParseMethod = _parseMethod - self._parse = breaker - else: - if hasattr(self._parse, "_originalParseMethod"): - self._parse = self._parse._originalParseMethod - return self - - def setParseAction(self, *fns, **kwargs): - """ - Define one or more actions to perform when successfully matching parse element definition. - Parse action fn is a callable method with 0-3 arguments, called as ``fn(s, loc, toks)`` , - ``fn(loc, toks)`` , ``fn(toks)`` , or just ``fn()`` , where: - - - s = the original string being parsed (see note below) - - loc = the location of the matching substring - - toks = a list of the matched tokens, packaged as a :class:`ParseResults` object - - If the functions in fns modify the tokens, they can return them as the return - value from fn, and the modified list of tokens will replace the original. - Otherwise, fn does not need to return any value. - - If None is passed as the parse action, all previously added parse actions for this - expression are cleared. - - Optional keyword arguments: - - callDuringTry = (default= ``False``) indicate if parse action should be run during lookaheads and alternate testing - - Note: the default parsing behavior is to expand tabs in the input string - before starting the parsing process. See :class:`parseString for more - information on parsing strings containing ```` s, and suggested - methods to maintain a consistent view of the parsed string, the parse - location, and line and column positions within the parsed string. - - Example:: - - integer = Word(nums) - date_str = integer + '/' + integer + '/' + integer - - date_str.parseString("1999/12/31") # -> ['1999', '/', '12', '/', '31'] - - # use parse action to convert to ints at parse time - integer = Word(nums).setParseAction(lambda toks: int(toks[0])) - date_str = integer + '/' + integer + '/' + integer - - # note that integer fields are now ints, not strings - date_str.parseString("1999/12/31") # -> [1999, '/', 12, '/', 31] - """ - if list(fns) == [None,]: - self.parseAction = [] - else: - if not all(callable(fn) for fn in fns): - raise TypeError("parse actions must be callable") - self.parseAction = list(map(_trim_arity, list(fns))) - self.callDuringTry = kwargs.get("callDuringTry", False) - return self - - def addParseAction(self, *fns, **kwargs): - """ - Add one or more parse actions to expression's list of parse actions. See :class:`setParseAction`. - - See examples in :class:`copy`. - """ - self.parseAction += list(map(_trim_arity, list(fns))) - self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) - return self - - def addCondition(self, *fns, **kwargs): - """Add a boolean predicate function to expression's list of parse actions. See - :class:`setParseAction` for function call signatures. Unlike ``setParseAction``, - functions passed to ``addCondition`` need to return boolean success/fail of the condition. - - Optional keyword arguments: - - message = define a custom message to be used in the raised exception - - fatal = if True, will raise ParseFatalException to stop parsing immediately; otherwise will raise ParseException - - Example:: - - integer = Word(nums).setParseAction(lambda toks: int(toks[0])) - year_int = integer.copy() - year_int.addCondition(lambda toks: toks[0] >= 2000, message="Only support years 2000 and later") - date_str = year_int + '/' + integer + '/' + integer - - result = date_str.parseString("1999/12/31") # -> Exception: Only support years 2000 and later (at char 0), (line:1, col:1) - """ - for fn in fns: - self.parseAction.append(conditionAsParseAction(fn, message=kwargs.get('message'), - fatal=kwargs.get('fatal', False))) - - self.callDuringTry = self.callDuringTry or kwargs.get("callDuringTry", False) - return self - - def setFailAction(self, fn): - """Define action to perform if parsing fails at this expression. - Fail acton fn is a callable function that takes the arguments - ``fn(s, loc, expr, err)`` where: - - s = string being parsed - - loc = location where expression match was attempted and failed - - expr = the parse expression that failed - - err = the exception thrown - The function returns no value. It may throw :class:`ParseFatalException` - if it is desired to stop parsing immediately.""" - self.failAction = fn - return self - - def _skipIgnorables(self, instring, loc): - exprsFound = True - while exprsFound: - exprsFound = False - for e in self.ignoreExprs: - try: - while 1: - loc, dummy = e._parse(instring, loc) - exprsFound = True - except ParseException: - pass - return loc - - def preParse(self, instring, loc): - if self.ignoreExprs: - loc = self._skipIgnorables(instring, loc) - - if self.skipWhitespace: - wt = self.whiteChars - instrlen = len(instring) - while loc < instrlen and instring[loc] in wt: - loc += 1 - - return loc - - def parseImpl(self, instring, loc, doActions=True): - return loc, [] - - def postParse(self, instring, loc, tokenlist): - return tokenlist - - # ~ @profile - def _parseNoCache(self, instring, loc, doActions=True, callPreParse=True): - TRY, MATCH, FAIL = 0, 1, 2 - debugging = (self.debug) # and doActions) - - if debugging or self.failAction: - # ~ print ("Match", self, "at loc", loc, "(%d, %d)" % (lineno(loc, instring), col(loc, instring))) - if self.debugActions[TRY]: - self.debugActions[TRY](instring, loc, self) - try: - if callPreParse and self.callPreparse: - preloc = self.preParse(instring, loc) - else: - preloc = loc - tokensStart = preloc - if self.mayIndexError or preloc >= len(instring): - try: - loc, tokens = self.parseImpl(instring, preloc, doActions) - except IndexError: - raise ParseException(instring, len(instring), self.errmsg, self) - else: - loc, tokens = self.parseImpl(instring, preloc, doActions) - except Exception as err: - # ~ print ("Exception raised:", err) - if self.debugActions[FAIL]: - self.debugActions[FAIL](instring, tokensStart, self, err) - if self.failAction: - self.failAction(instring, tokensStart, self, err) - raise - else: - if callPreParse and self.callPreparse: - preloc = self.preParse(instring, loc) - else: - preloc = loc - tokensStart = preloc - if self.mayIndexError or preloc >= len(instring): - try: - loc, tokens = self.parseImpl(instring, preloc, doActions) - except IndexError: - raise ParseException(instring, len(instring), self.errmsg, self) - else: - loc, tokens = self.parseImpl(instring, preloc, doActions) - - tokens = self.postParse(instring, loc, tokens) - - retTokens = ParseResults(tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults) - if self.parseAction and (doActions or self.callDuringTry): - if debugging: - try: - for fn in self.parseAction: - try: - tokens = fn(instring, tokensStart, retTokens) - except IndexError as parse_action_exc: - exc = ParseException("exception raised in parse action") - exc.__cause__ = parse_action_exc - raise exc - - if tokens is not None and tokens is not retTokens: - retTokens = ParseResults(tokens, - self.resultsName, - asList=self.saveAsList and isinstance(tokens, (ParseResults, list)), - modal=self.modalResults) - except Exception as err: - # ~ print "Exception raised in user parse action:", err - if self.debugActions[FAIL]: - self.debugActions[FAIL](instring, tokensStart, self, err) - raise - else: - for fn in self.parseAction: - try: - tokens = fn(instring, tokensStart, retTokens) - except IndexError as parse_action_exc: - exc = ParseException("exception raised in parse action") - exc.__cause__ = parse_action_exc - raise exc - - if tokens is not None and tokens is not retTokens: - retTokens = ParseResults(tokens, - self.resultsName, - asList=self.saveAsList and isinstance(tokens, (ParseResults, list)), - modal=self.modalResults) - if debugging: - # ~ print ("Matched", self, "->", retTokens.asList()) - if self.debugActions[MATCH]: - self.debugActions[MATCH](instring, tokensStart, loc, self, retTokens) - - return loc, retTokens - - def tryParse(self, instring, loc): - try: - return self._parse(instring, loc, doActions=False)[0] - except ParseFatalException: - raise ParseException(instring, loc, self.errmsg, self) - - def canParseNext(self, instring, loc): - try: - self.tryParse(instring, loc) - except (ParseException, IndexError): - return False - else: - return True - - class _UnboundedCache(object): - def __init__(self): - cache = {} - self.not_in_cache = not_in_cache = object() - - def get(self, key): - return cache.get(key, not_in_cache) - - def set(self, key, value): - cache[key] = value - - def clear(self): - cache.clear() - - def cache_len(self): - return len(cache) - - self.get = types.MethodType(get, self) - self.set = types.MethodType(set, self) - self.clear = types.MethodType(clear, self) - self.__len__ = types.MethodType(cache_len, self) - - if _OrderedDict is not None: - class _FifoCache(object): - def __init__(self, size): - self.not_in_cache = not_in_cache = object() - - cache = _OrderedDict() - - def get(self, key): - return cache.get(key, not_in_cache) - - def set(self, key, value): - cache[key] = value - while len(cache) > size: - try: - cache.popitem(False) - except KeyError: - pass - - def clear(self): - cache.clear() - - def cache_len(self): - return len(cache) - - self.get = types.MethodType(get, self) - self.set = types.MethodType(set, self) - self.clear = types.MethodType(clear, self) - self.__len__ = types.MethodType(cache_len, self) - - else: - class _FifoCache(object): - def __init__(self, size): - self.not_in_cache = not_in_cache = object() - - cache = {} - key_fifo = collections.deque([], size) - - def get(self, key): - return cache.get(key, not_in_cache) - - def set(self, key, value): - cache[key] = value - while len(key_fifo) > size: - cache.pop(key_fifo.popleft(), None) - key_fifo.append(key) - - def clear(self): - cache.clear() - key_fifo.clear() - - def cache_len(self): - return len(cache) - - self.get = types.MethodType(get, self) - self.set = types.MethodType(set, self) - self.clear = types.MethodType(clear, self) - self.__len__ = types.MethodType(cache_len, self) - - # argument cache for optimizing repeated calls when backtracking through recursive expressions - packrat_cache = {} # this is set later by enabledPackrat(); this is here so that resetCache() doesn't fail - packrat_cache_lock = RLock() - packrat_cache_stats = [0, 0] - - # this method gets repeatedly called during backtracking with the same arguments - - # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression - def _parseCache(self, instring, loc, doActions=True, callPreParse=True): - HIT, MISS = 0, 1 - lookup = (self, instring, loc, callPreParse, doActions) - with ParserElement.packrat_cache_lock: - cache = ParserElement.packrat_cache - value = cache.get(lookup) - if value is cache.not_in_cache: - ParserElement.packrat_cache_stats[MISS] += 1 - try: - value = self._parseNoCache(instring, loc, doActions, callPreParse) - except ParseBaseException as pe: - # cache a copy of the exception, without the traceback - cache.set(lookup, pe.__class__(*pe.args)) - raise - else: - cache.set(lookup, (value[0], value[1].copy())) - return value - else: - ParserElement.packrat_cache_stats[HIT] += 1 - if isinstance(value, Exception): - raise value - return value[0], value[1].copy() - - _parse = _parseNoCache - - @staticmethod - def resetCache(): - ParserElement.packrat_cache.clear() - ParserElement.packrat_cache_stats[:] = [0] * len(ParserElement.packrat_cache_stats) - - _packratEnabled = False - @staticmethod - def enablePackrat(cache_size_limit=128): - """Enables "packrat" parsing, which adds memoizing to the parsing logic. - Repeated parse attempts at the same string location (which happens - often in many complex grammars) can immediately return a cached value, - instead of re-executing parsing/validating code. Memoizing is done of - both valid results and parsing exceptions. - - Parameters: - - - cache_size_limit - (default= ``128``) - if an integer value is provided - will limit the size of the packrat cache; if None is passed, then - the cache size will be unbounded; if 0 is passed, the cache will - be effectively disabled. - - This speedup may break existing programs that use parse actions that - have side-effects. For this reason, packrat parsing is disabled when - you first import pyparsing. To activate the packrat feature, your - program must call the class method :class:`ParserElement.enablePackrat`. - For best results, call ``enablePackrat()`` immediately after - importing pyparsing. - - Example:: - - import pyparsing - pyparsing.ParserElement.enablePackrat() - """ - if not ParserElement._packratEnabled: - ParserElement._packratEnabled = True - if cache_size_limit is None: - ParserElement.packrat_cache = ParserElement._UnboundedCache() - else: - ParserElement.packrat_cache = ParserElement._FifoCache(cache_size_limit) - ParserElement._parse = ParserElement._parseCache - - def parseString(self, instring, parseAll=False): - """ - Execute the parse expression with the given string. - This is the main interface to the client code, once the complete - expression has been built. - - Returns the parsed data as a :class:`ParseResults` object, which may be - accessed as a list, or as a dict or object with attributes if the given parser - includes results names. - - If you want the grammar to require that the entire input string be - successfully parsed, then set ``parseAll`` to True (equivalent to ending - the grammar with ``StringEnd()``). - - Note: ``parseString`` implicitly calls ``expandtabs()`` on the input string, - in order to report proper column numbers in parse actions. - If the input string contains tabs and - the grammar uses parse actions that use the ``loc`` argument to index into the - string being parsed, you can ensure you have a consistent view of the input - string by: - - - calling ``parseWithTabs`` on your grammar before calling ``parseString`` - (see :class:`parseWithTabs`) - - define your parse action using the full ``(s, loc, toks)`` signature, and - reference the input string using the parse action's ``s`` argument - - explictly expand the tabs in your input string before calling - ``parseString`` - - Example:: - - Word('a').parseString('aaaaabaaa') # -> ['aaaaa'] - Word('a').parseString('aaaaabaaa', parseAll=True) # -> Exception: Expected end of text - """ - ParserElement.resetCache() - if not self.streamlined: - self.streamline() - # ~ self.saveAsList = True - for e in self.ignoreExprs: - e.streamline() - if not self.keepTabs: - instring = instring.expandtabs() - try: - loc, tokens = self._parse(instring, 0) - if parseAll: - loc = self.preParse(instring, loc) - se = Empty() + StringEnd() - se._parse(instring, loc) - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clearing out pyparsing internal stack trace - if getattr(exc, '__traceback__', None) is not None: - exc.__traceback__ = self._trim_traceback(exc.__traceback__) - raise exc - else: - return tokens - - def scanString(self, instring, maxMatches=_MAX_INT, overlap=False): - """ - Scan the input string for expression matches. Each match will return the - matching tokens, start location, and end location. May be called with optional - ``maxMatches`` argument, to clip scanning after 'n' matches are found. If - ``overlap`` is specified, then overlapping matches will be reported. - - Note that the start and end locations are reported relative to the string - being parsed. See :class:`parseString` for more information on parsing - strings with embedded tabs. - - Example:: - - source = "sldjf123lsdjjkf345sldkjf879lkjsfd987" - print(source) - for tokens, start, end in Word(alphas).scanString(source): - print(' '*start + '^'*(end-start)) - print(' '*start + tokens[0]) - - prints:: - - sldjf123lsdjjkf345sldkjf879lkjsfd987 - ^^^^^ - sldjf - ^^^^^^^ - lsdjjkf - ^^^^^^ - sldkjf - ^^^^^^ - lkjsfd - """ - if not self.streamlined: - self.streamline() - for e in self.ignoreExprs: - e.streamline() - - if not self.keepTabs: - instring = _ustr(instring).expandtabs() - instrlen = len(instring) - loc = 0 - preparseFn = self.preParse - parseFn = self._parse - ParserElement.resetCache() - matches = 0 - try: - while loc <= instrlen and matches < maxMatches: - try: - preloc = preparseFn(instring, loc) - nextLoc, tokens = parseFn(instring, preloc, callPreParse=False) - except ParseException: - loc = preloc + 1 - else: - if nextLoc > loc: - matches += 1 - yield tokens, preloc, nextLoc - if overlap: - nextloc = preparseFn(instring, loc) - if nextloc > loc: - loc = nextLoc - else: - loc += 1 - else: - loc = nextLoc - else: - loc = preloc + 1 - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clearing out pyparsing internal stack trace - if getattr(exc, '__traceback__', None) is not None: - exc.__traceback__ = self._trim_traceback(exc.__traceback__) - raise exc - - def transformString(self, instring): - """ - Extension to :class:`scanString`, to modify matching text with modified tokens that may - be returned from a parse action. To use ``transformString``, define a grammar and - attach a parse action to it that modifies the returned token list. - Invoking ``transformString()`` on a target string will then scan for matches, - and replace the matched text patterns according to the logic in the parse - action. ``transformString()`` returns the resulting transformed string. - - Example:: - - wd = Word(alphas) - wd.setParseAction(lambda toks: toks[0].title()) - - print(wd.transformString("now is the winter of our discontent made glorious summer by this sun of york.")) - - prints:: - - Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York. - """ - out = [] - lastE = 0 - # force preservation of s, to minimize unwanted transformation of string, and to - # keep string locs straight between transformString and scanString - self.keepTabs = True - try: - for t, s, e in self.scanString(instring): - out.append(instring[lastE:s]) - if t: - if isinstance(t, ParseResults): - out += t.asList() - elif isinstance(t, list): - out += t - else: - out.append(t) - lastE = e - out.append(instring[lastE:]) - out = [o for o in out if o] - return "".join(map(_ustr, _flatten(out))) - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clearing out pyparsing internal stack trace - if getattr(exc, '__traceback__', None) is not None: - exc.__traceback__ = self._trim_traceback(exc.__traceback__) - raise exc - - def searchString(self, instring, maxMatches=_MAX_INT): - """ - Another extension to :class:`scanString`, simplifying the access to the tokens found - to match the given parse expression. May be called with optional - ``maxMatches`` argument, to clip searching after 'n' matches are found. - - Example:: - - # a capitalized word starts with an uppercase letter, followed by zero or more lowercase letters - cap_word = Word(alphas.upper(), alphas.lower()) - - print(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity")) - - # the sum() builtin can be used to merge results into a single ParseResults object - print(sum(cap_word.searchString("More than Iron, more than Lead, more than Gold I need Electricity"))) - - prints:: - - [['More'], ['Iron'], ['Lead'], ['Gold'], ['I'], ['Electricity']] - ['More', 'Iron', 'Lead', 'Gold', 'I', 'Electricity'] - """ - try: - return ParseResults([t for t, s, e in self.scanString(instring, maxMatches)]) - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clearing out pyparsing internal stack trace - if getattr(exc, '__traceback__', None) is not None: - exc.__traceback__ = self._trim_traceback(exc.__traceback__) - raise exc - - def split(self, instring, maxsplit=_MAX_INT, includeSeparators=False): - """ - Generator method to split a string using the given expression as a separator. - May be called with optional ``maxsplit`` argument, to limit the number of splits; - and the optional ``includeSeparators`` argument (default= ``False``), if the separating - matching text should be included in the split results. - - Example:: - - punc = oneOf(list(".,;:/-!?")) - print(list(punc.split("This, this?, this sentence, is badly punctuated!"))) - - prints:: - - ['This', ' this', '', ' this sentence', ' is badly punctuated', ''] - """ - splits = 0 - last = 0 - for t, s, e in self.scanString(instring, maxMatches=maxsplit): - yield instring[last:s] - if includeSeparators: - yield t[0] - last = e - yield instring[last:] - - def __add__(self, other): - """ - Implementation of + operator - returns :class:`And`. Adding strings to a ParserElement - converts them to :class:`Literal`s by default. - - Example:: - - greet = Word(alphas) + "," + Word(alphas) + "!" - hello = "Hello, World!" - print (hello, "->", greet.parseString(hello)) - - prints:: - - Hello, World! -> ['Hello', ',', 'World', '!'] - - ``...`` may be used as a parse expression as a short form of :class:`SkipTo`. - - Literal('start') + ... + Literal('end') - - is equivalent to: - - Literal('start') + SkipTo('end')("_skipped*") + Literal('end') - - Note that the skipped text is returned with '_skipped' as a results name, - and to support having multiple skips in the same parser, the value returned is - a list of all skipped text. - """ - if other is Ellipsis: - return _PendingSkip(self) - - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return And([self, other]) - - def __radd__(self, other): - """ - Implementation of + operator when left operand is not a :class:`ParserElement` - """ - if other is Ellipsis: - return SkipTo(self)("_skipped*") + self - - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other + self - - def __sub__(self, other): - """ - Implementation of - operator, returns :class:`And` with error stop - """ - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return self + And._ErrorStop() + other - - def __rsub__(self, other): - """ - Implementation of - operator when left operand is not a :class:`ParserElement` - """ - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other - self - - def __mul__(self, other): - """ - Implementation of * operator, allows use of ``expr * 3`` in place of - ``expr + expr + expr``. Expressions may also me multiplied by a 2-integer - tuple, similar to ``{min, max}`` multipliers in regular expressions. Tuples - may also include ``None`` as in: - - ``expr*(n, None)`` or ``expr*(n, )`` is equivalent - to ``expr*n + ZeroOrMore(expr)`` - (read as "at least n instances of ``expr``") - - ``expr*(None, n)`` is equivalent to ``expr*(0, n)`` - (read as "0 to n instances of ``expr``") - - ``expr*(None, None)`` is equivalent to ``ZeroOrMore(expr)`` - - ``expr*(1, None)`` is equivalent to ``OneOrMore(expr)`` - - Note that ``expr*(None, n)`` does not raise an exception if - more than n exprs exist in the input stream; that is, - ``expr*(None, n)`` does not enforce a maximum number of expr - occurrences. If this behavior is desired, then write - ``expr*(None, n) + ~expr`` - """ - if other is Ellipsis: - other = (0, None) - elif isinstance(other, tuple) and other[:1] == (Ellipsis,): - other = ((0, ) + other[1:] + (None,))[:2] - - if isinstance(other, int): - minElements, optElements = other, 0 - elif isinstance(other, tuple): - other = tuple(o if o is not Ellipsis else None for o in other) - other = (other + (None, None))[:2] - if other[0] is None: - other = (0, other[1]) - if isinstance(other[0], int) and other[1] is None: - if other[0] == 0: - return ZeroOrMore(self) - if other[0] == 1: - return OneOrMore(self) - else: - return self * other[0] + ZeroOrMore(self) - elif isinstance(other[0], int) and isinstance(other[1], int): - minElements, optElements = other - optElements -= minElements - else: - raise TypeError("cannot multiply 'ParserElement' and ('%s', '%s') objects", type(other[0]), type(other[1])) - else: - raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) - - if minElements < 0: - raise ValueError("cannot multiply ParserElement by negative value") - if optElements < 0: - raise ValueError("second tuple value must be greater or equal to first tuple value") - if minElements == optElements == 0: - raise ValueError("cannot multiply ParserElement by 0 or (0, 0)") - - if optElements: - def makeOptionalList(n): - if n > 1: - return Optional(self + makeOptionalList(n - 1)) - else: - return Optional(self) - if minElements: - if minElements == 1: - ret = self + makeOptionalList(optElements) - else: - ret = And([self] * minElements) + makeOptionalList(optElements) - else: - ret = makeOptionalList(optElements) - else: - if minElements == 1: - ret = self - else: - ret = And([self] * minElements) - return ret - - def __rmul__(self, other): - return self.__mul__(other) - - def __or__(self, other): - """ - Implementation of | operator - returns :class:`MatchFirst` - """ - if other is Ellipsis: - return _PendingSkip(self, must_skip=True) - - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return MatchFirst([self, other]) - - def __ror__(self, other): - """ - Implementation of | operator when left operand is not a :class:`ParserElement` - """ - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other | self - - def __xor__(self, other): - """ - Implementation of ^ operator - returns :class:`Or` - """ - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return Or([self, other]) - - def __rxor__(self, other): - """ - Implementation of ^ operator when left operand is not a :class:`ParserElement` - """ - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other ^ self - - def __and__(self, other): - """ - Implementation of & operator - returns :class:`Each` - """ - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return Each([self, other]) - - def __rand__(self, other): - """ - Implementation of & operator when left operand is not a :class:`ParserElement` - """ - if isinstance(other, basestring): - other = self._literalStringClass(other) - if not isinstance(other, ParserElement): - warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), - SyntaxWarning, stacklevel=2) - return None - return other & self - - def __invert__(self): - """ - Implementation of ~ operator - returns :class:`NotAny` - """ - return NotAny(self) - - def __iter__(self): - # must implement __iter__ to override legacy use of sequential access to __getitem__ to - # iterate over a sequence - raise TypeError('%r object is not iterable' % self.__class__.__name__) - - def __getitem__(self, key): - """ - use ``[]`` indexing notation as a short form for expression repetition: - - ``expr[n]`` is equivalent to ``expr*n`` - - ``expr[m, n]`` is equivalent to ``expr*(m, n)`` - - ``expr[n, ...]`` or ``expr[n,]`` is equivalent - to ``expr*n + ZeroOrMore(expr)`` - (read as "at least n instances of ``expr``") - - ``expr[..., n]`` is equivalent to ``expr*(0, n)`` - (read as "0 to n instances of ``expr``") - - ``expr[...]`` and ``expr[0, ...]`` are equivalent to ``ZeroOrMore(expr)`` - - ``expr[1, ...]`` is equivalent to ``OneOrMore(expr)`` - ``None`` may be used in place of ``...``. - - Note that ``expr[..., n]`` and ``expr[m, n]``do not raise an exception - if more than ``n`` ``expr``s exist in the input stream. If this behavior is - desired, then write ``expr[..., n] + ~expr``. - """ - - # convert single arg keys to tuples - try: - if isinstance(key, str): - key = (key,) - iter(key) - except TypeError: - key = (key, key) - - if len(key) > 2: - warnings.warn("only 1 or 2 index arguments supported ({0}{1})".format(key[:5], - '... [{0}]'.format(len(key)) - if len(key) > 5 else '')) - - # clip to 2 elements - ret = self * tuple(key[:2]) - return ret - - def __call__(self, name=None): - """ - Shortcut for :class:`setResultsName`, with ``listAllMatches=False``. - - If ``name`` is given with a trailing ``'*'`` character, then ``listAllMatches`` will be - passed as ``True``. - - If ``name` is omitted, same as calling :class:`copy`. - - Example:: - - # these are equivalent - userdata = Word(alphas).setResultsName("name") + Word(nums + "-").setResultsName("socsecno") - userdata = Word(alphas)("name") + Word(nums + "-")("socsecno") - """ - if name is not None: - return self._setResultsName(name) - else: - return self.copy() - - def suppress(self): - """ - Suppresses the output of this :class:`ParserElement`; useful to keep punctuation from - cluttering up returned output. - """ - return Suppress(self) - - def leaveWhitespace(self): - """ - Disables the skipping of whitespace before matching the characters in the - :class:`ParserElement`'s defined pattern. This is normally only used internally by - the pyparsing module, but may be needed in some whitespace-sensitive grammars. - """ - self.skipWhitespace = False - return self - - def setWhitespaceChars(self, chars): - """ - Overrides the default whitespace chars - """ - self.skipWhitespace = True - self.whiteChars = chars - self.copyDefaultWhiteChars = False - return self - - def parseWithTabs(self): - """ - Overrides default behavior to expand ````s to spaces before parsing the input string. - Must be called before ``parseString`` when the input grammar contains elements that - match ```` characters. - """ - self.keepTabs = True - return self - - def ignore(self, other): - """ - Define expression to be ignored (e.g., comments) while doing pattern - matching; may be called repeatedly, to define multiple comment or other - ignorable patterns. - - Example:: - - patt = OneOrMore(Word(alphas)) - patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj'] - - patt.ignore(cStyleComment) - patt.parseString('ablaj /* comment */ lskjd') # -> ['ablaj', 'lskjd'] - """ - if isinstance(other, basestring): - other = Suppress(other) - - if isinstance(other, Suppress): - if other not in self.ignoreExprs: - self.ignoreExprs.append(other) - else: - self.ignoreExprs.append(Suppress(other.copy())) - return self - - def setDebugActions(self, startAction, successAction, exceptionAction): - """ - Enable display of debugging messages while doing pattern matching. - """ - self.debugActions = (startAction or _defaultStartDebugAction, - successAction or _defaultSuccessDebugAction, - exceptionAction or _defaultExceptionDebugAction) - self.debug = True - return self - - def setDebug(self, flag=True): - """ - Enable display of debugging messages while doing pattern matching. - Set ``flag`` to True to enable, False to disable. - - Example:: - - wd = Word(alphas).setName("alphaword") - integer = Word(nums).setName("numword") - term = wd | integer - - # turn on debugging for wd - wd.setDebug() - - OneOrMore(term).parseString("abc 123 xyz 890") - - prints:: - - Match alphaword at loc 0(1,1) - Matched alphaword -> ['abc'] - Match alphaword at loc 3(1,4) - Exception raised:Expected alphaword (at char 4), (line:1, col:5) - Match alphaword at loc 7(1,8) - Matched alphaword -> ['xyz'] - Match alphaword at loc 11(1,12) - Exception raised:Expected alphaword (at char 12), (line:1, col:13) - Match alphaword at loc 15(1,16) - Exception raised:Expected alphaword (at char 15), (line:1, col:16) - - The output shown is that produced by the default debug actions - custom debug actions can be - specified using :class:`setDebugActions`. Prior to attempting - to match the ``wd`` expression, the debugging message ``"Match at loc (,)"`` - is shown. Then if the parse succeeds, a ``"Matched"`` message is shown, or an ``"Exception raised"`` - message is shown. Also note the use of :class:`setName` to assign a human-readable name to the expression, - which makes debugging and exception messages easier to understand - for instance, the default - name created for the :class:`Word` expression without calling ``setName`` is ``"W:(ABCD...)"``. - """ - if flag: - self.setDebugActions(_defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction) - else: - self.debug = False - return self - - def __str__(self): - return self.name - - def __repr__(self): - return _ustr(self) - - def streamline(self): - self.streamlined = True - self.strRepr = None - return self - - def checkRecursion(self, parseElementList): - pass - - def validate(self, validateTrace=None): - """ - Check defined expressions for valid structure, check for infinite recursive definitions. - """ - self.checkRecursion([]) - - def parseFile(self, file_or_filename, parseAll=False): - """ - Execute the parse expression on the given file or filename. - If a filename is specified (instead of a file object), - the entire file is opened, read, and closed before parsing. - """ - try: - file_contents = file_or_filename.read() - except AttributeError: - with open(file_or_filename, "r") as f: - file_contents = f.read() - try: - return self.parseString(file_contents, parseAll) - except ParseBaseException as exc: - if ParserElement.verbose_stacktrace: - raise - else: - # catch and re-raise exception from here, clearing out pyparsing internal stack trace - if getattr(exc, '__traceback__', None) is not None: - exc.__traceback__ = self._trim_traceback(exc.__traceback__) - raise exc - - def __eq__(self, other): - if self is other: - return True - elif isinstance(other, basestring): - return self.matches(other) - elif isinstance(other, ParserElement): - return vars(self) == vars(other) - return False - - def __ne__(self, other): - return not (self == other) - - def __hash__(self): - return id(self) - - def __req__(self, other): - return self == other - - def __rne__(self, other): - return not (self == other) - - def matches(self, testString, parseAll=True): - """ - Method for quick testing of a parser against a test string. Good for simple - inline microtests of sub expressions while building up larger parser. - - Parameters: - - testString - to test against this expression for a match - - parseAll - (default= ``True``) - flag to pass to :class:`parseString` when running tests - - Example:: - - expr = Word(nums) - assert expr.matches("100") - """ - try: - self.parseString(_ustr(testString), parseAll=parseAll) - return True - except ParseBaseException: - return False - - def runTests(self, tests, parseAll=True, comment='#', - fullDump=True, printResults=True, failureTests=False, postParse=None, - file=None): - """ - Execute the parse expression on a series of test strings, showing each - test, the parsed results or where the parse failed. Quick and easy way to - run a parse expression against a list of sample strings. - - Parameters: - - tests - a list of separate test strings, or a multiline string of test strings - - parseAll - (default= ``True``) - flag to pass to :class:`parseString` when running tests - - comment - (default= ``'#'``) - expression for indicating embedded comments in the test - string; pass None to disable comment filtering - - fullDump - (default= ``True``) - dump results as list followed by results names in nested outline; - if False, only dump nested list - - printResults - (default= ``True``) prints test output to stdout - - failureTests - (default= ``False``) indicates if these tests are expected to fail parsing - - postParse - (default= ``None``) optional callback for successful parse results; called as - `fn(test_string, parse_results)` and returns a string to be added to the test output - - file - (default=``None``) optional file-like object to which test output will be written; - if None, will default to ``sys.stdout`` - - Returns: a (success, results) tuple, where success indicates that all tests succeeded - (or failed if ``failureTests`` is True), and the results contain a list of lines of each - test's output - - Example:: - - number_expr = pyparsing_common.number.copy() - - result = number_expr.runTests(''' - # unsigned integer - 100 - # negative integer - -100 - # float with scientific notation - 6.02e23 - # integer with scientific notation - 1e-12 - ''') - print("Success" if result[0] else "Failed!") - - result = number_expr.runTests(''' - # stray character - 100Z - # missing leading digit before '.' - -.100 - # too many '.' - 3.14.159 - ''', failureTests=True) - print("Success" if result[0] else "Failed!") - - prints:: - - # unsigned integer - 100 - [100] - - # negative integer - -100 - [-100] - - # float with scientific notation - 6.02e23 - [6.02e+23] - - # integer with scientific notation - 1e-12 - [1e-12] - - Success - - # stray character - 100Z - ^ - FAIL: Expected end of text (at char 3), (line:1, col:4) - - # missing leading digit before '.' - -.100 - ^ - FAIL: Expected {real number with scientific notation | real number | signed integer} (at char 0), (line:1, col:1) - - # too many '.' - 3.14.159 - ^ - FAIL: Expected end of text (at char 4), (line:1, col:5) - - Success - - Each test string must be on a single line. If you want to test a string that spans multiple - lines, create a test like this:: - - expr.runTest(r"this is a test\\n of strings that spans \\n 3 lines") - - (Note that this is a raw string literal, you must include the leading 'r'.) - """ - if isinstance(tests, basestring): - tests = list(map(str.strip, tests.rstrip().splitlines())) - if isinstance(comment, basestring): - comment = Literal(comment) - if file is None: - file = sys.stdout - print_ = file.write - - allResults = [] - comments = [] - success = True - NL = Literal(r'\n').addParseAction(replaceWith('\n')).ignore(quotedString) - BOM = u'\ufeff' - for t in tests: - if comment is not None and comment.matches(t, False) or comments and not t: - comments.append(t) - continue - if not t: - continue - out = ['\n' + '\n'.join(comments) if comments else '', t] - comments = [] - try: - # convert newline marks to actual newlines, and strip leading BOM if present - t = NL.transformString(t.lstrip(BOM)) - result = self.parseString(t, parseAll=parseAll) - except ParseBaseException as pe: - fatal = "(FATAL)" if isinstance(pe, ParseFatalException) else "" - if '\n' in t: - out.append(line(pe.loc, t)) - out.append(' ' * (col(pe.loc, t) - 1) + '^' + fatal) - else: - out.append(' ' * pe.loc + '^' + fatal) - out.append("FAIL: " + str(pe)) - success = success and failureTests - result = pe - except Exception as exc: - out.append("FAIL-EXCEPTION: " + str(exc)) - success = success and failureTests - result = exc - else: - success = success and not failureTests - if postParse is not None: - try: - pp_value = postParse(t, result) - if pp_value is not None: - if isinstance(pp_value, ParseResults): - out.append(pp_value.dump()) - else: - out.append(str(pp_value)) - else: - out.append(result.dump()) - except Exception as e: - out.append(result.dump(full=fullDump)) - out.append("{0} failed: {1}: {2}".format(postParse.__name__, type(e).__name__, e)) - else: - out.append(result.dump(full=fullDump)) - - if printResults: - if fullDump: - out.append('') - print_('\n'.join(out)) - - allResults.append((t, result)) - - return success, allResults - - -class _PendingSkip(ParserElement): - # internal placeholder class to hold a place were '...' is added to a parser element, - # once another ParserElement is added, this placeholder will be replaced with a SkipTo - def __init__(self, expr, must_skip=False): - super(_PendingSkip, self).__init__() - self.strRepr = str(expr + Empty()).replace('Empty', '...') - self.name = self.strRepr - self.anchor = expr - self.must_skip = must_skip - - def __add__(self, other): - skipper = SkipTo(other).setName("...")("_skipped*") - if self.must_skip: - def must_skip(t): - if not t._skipped or t._skipped.asList() == ['']: - del t[0] - t.pop("_skipped", None) - def show_skip(t): - if t._skipped.asList()[-1:] == ['']: - skipped = t.pop('_skipped') - t['_skipped'] = 'missing <' + repr(self.anchor) + '>' - return (self.anchor + skipper().addParseAction(must_skip) - | skipper().addParseAction(show_skip)) + other - - return self.anchor + skipper + other - - def __repr__(self): - return self.strRepr - - def parseImpl(self, *args): - raise Exception("use of `...` expression without following SkipTo target expression") - - -class Token(ParserElement): - """Abstract :class:`ParserElement` subclass, for defining atomic - matching patterns. - """ - def __init__(self): - super(Token, self).__init__(savelist=False) - - -class Empty(Token): - """An empty token, will always match. - """ - def __init__(self): - super(Empty, self).__init__() - self.name = "Empty" - self.mayReturnEmpty = True - self.mayIndexError = False - - -class NoMatch(Token): - """A token that will never match. - """ - def __init__(self): - super(NoMatch, self).__init__() - self.name = "NoMatch" - self.mayReturnEmpty = True - self.mayIndexError = False - self.errmsg = "Unmatchable token" - - def parseImpl(self, instring, loc, doActions=True): - raise ParseException(instring, loc, self.errmsg, self) - - -class Literal(Token): - """Token to exactly match a specified string. - - Example:: - - Literal('blah').parseString('blah') # -> ['blah'] - Literal('blah').parseString('blahfooblah') # -> ['blah'] - Literal('blah').parseString('bla') # -> Exception: Expected "blah" - - For case-insensitive matching, use :class:`CaselessLiteral`. - - For keyword matching (force word break before and after the matched string), - use :class:`Keyword` or :class:`CaselessKeyword`. - """ - def __init__(self, matchString): - super(Literal, self).__init__() - self.match = matchString - self.matchLen = len(matchString) - try: - self.firstMatchChar = matchString[0] - except IndexError: - warnings.warn("null string passed to Literal; use Empty() instead", - SyntaxWarning, stacklevel=2) - self.__class__ = Empty - self.name = '"%s"' % _ustr(self.match) - self.errmsg = "Expected " + self.name - self.mayReturnEmpty = False - self.mayIndexError = False - - # Performance tuning: modify __class__ to select - # a parseImpl optimized for single-character check - if self.matchLen == 1 and type(self) is Literal: - self.__class__ = _SingleCharLiteral - - def parseImpl(self, instring, loc, doActions=True): - if instring[loc] == self.firstMatchChar and instring.startswith(self.match, loc): - return loc + self.matchLen, self.match - raise ParseException(instring, loc, self.errmsg, self) - -class _SingleCharLiteral(Literal): - def parseImpl(self, instring, loc, doActions=True): - if instring[loc] == self.firstMatchChar: - return loc + 1, self.match - raise ParseException(instring, loc, self.errmsg, self) - -_L = Literal -ParserElement._literalStringClass = Literal - -class Keyword(Token): - """Token to exactly match a specified string as a keyword, that is, - it must be immediately followed by a non-keyword character. Compare - with :class:`Literal`: - - - ``Literal("if")`` will match the leading ``'if'`` in - ``'ifAndOnlyIf'``. - - ``Keyword("if")`` will not; it will only match the leading - ``'if'`` in ``'if x=1'``, or ``'if(y==2)'`` - - Accepts two optional constructor arguments in addition to the - keyword string: - - - ``identChars`` is a string of characters that would be valid - identifier characters, defaulting to all alphanumerics + "_" and - "$" - - ``caseless`` allows case-insensitive matching, default is ``False``. - - Example:: - - Keyword("start").parseString("start") # -> ['start'] - Keyword("start").parseString("starting") # -> Exception - - For case-insensitive matching, use :class:`CaselessKeyword`. - """ - DEFAULT_KEYWORD_CHARS = alphanums + "_$" - - def __init__(self, matchString, identChars=None, caseless=False): - super(Keyword, self).__init__() - if identChars is None: - identChars = Keyword.DEFAULT_KEYWORD_CHARS - self.match = matchString - self.matchLen = len(matchString) - try: - self.firstMatchChar = matchString[0] - except IndexError: - warnings.warn("null string passed to Keyword; use Empty() instead", - SyntaxWarning, stacklevel=2) - self.name = '"%s"' % self.match - self.errmsg = "Expected " + self.name - self.mayReturnEmpty = False - self.mayIndexError = False - self.caseless = caseless - if caseless: - self.caselessmatch = matchString.upper() - identChars = identChars.upper() - self.identChars = set(identChars) - - def parseImpl(self, instring, loc, doActions=True): - if self.caseless: - if ((instring[loc:loc + self.matchLen].upper() == self.caselessmatch) - and (loc >= len(instring) - self.matchLen - or instring[loc + self.matchLen].upper() not in self.identChars) - and (loc == 0 - or instring[loc - 1].upper() not in self.identChars)): - return loc + self.matchLen, self.match - - else: - if instring[loc] == self.firstMatchChar: - if ((self.matchLen == 1 or instring.startswith(self.match, loc)) - and (loc >= len(instring) - self.matchLen - or instring[loc + self.matchLen] not in self.identChars) - and (loc == 0 or instring[loc - 1] not in self.identChars)): - return loc + self.matchLen, self.match - - raise ParseException(instring, loc, self.errmsg, self) - - def copy(self): - c = super(Keyword, self).copy() - c.identChars = Keyword.DEFAULT_KEYWORD_CHARS - return c - - @staticmethod - def setDefaultKeywordChars(chars): - """Overrides the default Keyword chars - """ - Keyword.DEFAULT_KEYWORD_CHARS = chars - -class CaselessLiteral(Literal): - """Token to match a specified string, ignoring case of letters. - Note: the matched results will always be in the case of the given - match string, NOT the case of the input text. - - Example:: - - OneOrMore(CaselessLiteral("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD', 'CMD'] - - (Contrast with example for :class:`CaselessKeyword`.) - """ - def __init__(self, matchString): - super(CaselessLiteral, self).__init__(matchString.upper()) - # Preserve the defining literal. - self.returnString = matchString - self.name = "'%s'" % self.returnString - self.errmsg = "Expected " + self.name - - def parseImpl(self, instring, loc, doActions=True): - if instring[loc:loc + self.matchLen].upper() == self.match: - return loc + self.matchLen, self.returnString - raise ParseException(instring, loc, self.errmsg, self) - -class CaselessKeyword(Keyword): - """ - Caseless version of :class:`Keyword`. - - Example:: - - OneOrMore(CaselessKeyword("CMD")).parseString("cmd CMD Cmd10") # -> ['CMD', 'CMD'] - - (Contrast with example for :class:`CaselessLiteral`.) - """ - def __init__(self, matchString, identChars=None): - super(CaselessKeyword, self).__init__(matchString, identChars, caseless=True) - -class CloseMatch(Token): - """A variation on :class:`Literal` which matches "close" matches, - that is, strings with at most 'n' mismatching characters. - :class:`CloseMatch` takes parameters: - - - ``match_string`` - string to be matched - - ``maxMismatches`` - (``default=1``) maximum number of - mismatches allowed to count as a match - - The results from a successful parse will contain the matched text - from the input string and the following named results: - - - ``mismatches`` - a list of the positions within the - match_string where mismatches were found - - ``original`` - the original match_string used to compare - against the input string - - If ``mismatches`` is an empty list, then the match was an exact - match. - - Example:: - - patt = CloseMatch("ATCATCGAATGGA") - patt.parseString("ATCATCGAAXGGA") # -> (['ATCATCGAAXGGA'], {'mismatches': [[9]], 'original': ['ATCATCGAATGGA']}) - patt.parseString("ATCAXCGAAXGGA") # -> Exception: Expected 'ATCATCGAATGGA' (with up to 1 mismatches) (at char 0), (line:1, col:1) - - # exact match - patt.parseString("ATCATCGAATGGA") # -> (['ATCATCGAATGGA'], {'mismatches': [[]], 'original': ['ATCATCGAATGGA']}) - - # close match allowing up to 2 mismatches - patt = CloseMatch("ATCATCGAATGGA", maxMismatches=2) - patt.parseString("ATCAXCGAAXGGA") # -> (['ATCAXCGAAXGGA'], {'mismatches': [[4, 9]], 'original': ['ATCATCGAATGGA']}) - """ - def __init__(self, match_string, maxMismatches=1): - super(CloseMatch, self).__init__() - self.name = match_string - self.match_string = match_string - self.maxMismatches = maxMismatches - self.errmsg = "Expected %r (with up to %d mismatches)" % (self.match_string, self.maxMismatches) - self.mayIndexError = False - self.mayReturnEmpty = False - - def parseImpl(self, instring, loc, doActions=True): - start = loc - instrlen = len(instring) - maxloc = start + len(self.match_string) - - if maxloc <= instrlen: - match_string = self.match_string - match_stringloc = 0 - mismatches = [] - maxMismatches = self.maxMismatches - - for match_stringloc, s_m in enumerate(zip(instring[loc:maxloc], match_string)): - src, mat = s_m - if src != mat: - mismatches.append(match_stringloc) - if len(mismatches) > maxMismatches: - break - else: - loc = match_stringloc + 1 - results = ParseResults([instring[start:loc]]) - results['original'] = match_string - results['mismatches'] = mismatches - return loc, results - - raise ParseException(instring, loc, self.errmsg, self) - - -class Word(Token): - """Token for matching words composed of allowed character sets. - Defined with string containing all allowed initial characters, an - optional string containing allowed body characters (if omitted, - defaults to the initial character set), and an optional minimum, - maximum, and/or exact length. The default value for ``min`` is - 1 (a minimum value < 1 is not valid); the default values for - ``max`` and ``exact`` are 0, meaning no maximum or exact - length restriction. An optional ``excludeChars`` parameter can - list characters that might be found in the input ``bodyChars`` - string; useful to define a word of all printables except for one or - two characters, for instance. - - :class:`srange` is useful for defining custom character set strings - for defining ``Word`` expressions, using range notation from - regular expression character sets. - - A common mistake is to use :class:`Word` to match a specific literal - string, as in ``Word("Address")``. Remember that :class:`Word` - uses the string argument to define *sets* of matchable characters. - This expression would match "Add", "AAA", "dAred", or any other word - made up of the characters 'A', 'd', 'r', 'e', and 's'. To match an - exact literal string, use :class:`Literal` or :class:`Keyword`. - - pyparsing includes helper strings for building Words: - - - :class:`alphas` - - :class:`nums` - - :class:`alphanums` - - :class:`hexnums` - - :class:`alphas8bit` (alphabetic characters in ASCII range 128-255 - - accented, tilded, umlauted, etc.) - - :class:`punc8bit` (non-alphabetic characters in ASCII range - 128-255 - currency, symbols, superscripts, diacriticals, etc.) - - :class:`printables` (any non-whitespace character) - - Example:: - - # a word composed of digits - integer = Word(nums) # equivalent to Word("0123456789") or Word(srange("0-9")) - - # a word with a leading capital, and zero or more lowercase - capital_word = Word(alphas.upper(), alphas.lower()) - - # hostnames are alphanumeric, with leading alpha, and '-' - hostname = Word(alphas, alphanums + '-') - - # roman numeral (not a strict parser, accepts invalid mix of characters) - roman = Word("IVXLCDM") - - # any string of non-whitespace characters, except for ',' - csv_value = Word(printables, excludeChars=",") - """ - def __init__(self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False, excludeChars=None): - super(Word, self).__init__() - if excludeChars: - excludeChars = set(excludeChars) - initChars = ''.join(c for c in initChars if c not in excludeChars) - if bodyChars: - bodyChars = ''.join(c for c in bodyChars if c not in excludeChars) - self.initCharsOrig = initChars - self.initChars = set(initChars) - if bodyChars: - self.bodyCharsOrig = bodyChars - self.bodyChars = set(bodyChars) - else: - self.bodyCharsOrig = initChars - self.bodyChars = set(initChars) - - self.maxSpecified = max > 0 - - if min < 1: - raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") - - self.minLen = min - - if max > 0: - self.maxLen = max - else: - self.maxLen = _MAX_INT - - if exact > 0: - self.maxLen = exact - self.minLen = exact - - self.name = _ustr(self) - self.errmsg = "Expected " + self.name - self.mayIndexError = False - self.asKeyword = asKeyword - - if ' ' not in self.initCharsOrig + self.bodyCharsOrig and (min == 1 and max == 0 and exact == 0): - if self.bodyCharsOrig == self.initCharsOrig: - self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) - elif len(self.initCharsOrig) == 1: - self.reString = "%s[%s]*" % (re.escape(self.initCharsOrig), - _escapeRegexRangeChars(self.bodyCharsOrig),) - else: - self.reString = "[%s][%s]*" % (_escapeRegexRangeChars(self.initCharsOrig), - _escapeRegexRangeChars(self.bodyCharsOrig),) - if self.asKeyword: - self.reString = r"\b" + self.reString + r"\b" - - try: - self.re = re.compile(self.reString) - except Exception: - self.re = None - else: - self.re_match = self.re.match - self.__class__ = _WordRegex - - def parseImpl(self, instring, loc, doActions=True): - if instring[loc] not in self.initChars: - raise ParseException(instring, loc, self.errmsg, self) - - start = loc - loc += 1 - instrlen = len(instring) - bodychars = self.bodyChars - maxloc = start + self.maxLen - maxloc = min(maxloc, instrlen) - while loc < maxloc and instring[loc] in bodychars: - loc += 1 - - throwException = False - if loc - start < self.minLen: - throwException = True - elif self.maxSpecified and loc < instrlen and instring[loc] in bodychars: - throwException = True - elif self.asKeyword: - if (start > 0 and instring[start - 1] in bodychars - or loc < instrlen and instring[loc] in bodychars): - throwException = True - - if throwException: - raise ParseException(instring, loc, self.errmsg, self) - - return loc, instring[start:loc] - - def __str__(self): - try: - return super(Word, self).__str__() - except Exception: - pass - - if self.strRepr is None: - - def charsAsStr(s): - if len(s) > 4: - return s[:4] + "..." - else: - return s - - if self.initCharsOrig != self.bodyCharsOrig: - self.strRepr = "W:(%s, %s)" % (charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig)) - else: - self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) - - return self.strRepr - -class _WordRegex(Word): - def parseImpl(self, instring, loc, doActions=True): - result = self.re_match(instring, loc) - if not result: - raise ParseException(instring, loc, self.errmsg, self) - - loc = result.end() - return loc, result.group() - - -class Char(_WordRegex): - """A short-cut class for defining ``Word(characters, exact=1)``, - when defining a match of any single character in a string of - characters. - """ - def __init__(self, charset, asKeyword=False, excludeChars=None): - super(Char, self).__init__(charset, exact=1, asKeyword=asKeyword, excludeChars=excludeChars) - self.reString = "[%s]" % _escapeRegexRangeChars(''.join(self.initChars)) - if asKeyword: - self.reString = r"\b%s\b" % self.reString - self.re = re.compile(self.reString) - self.re_match = self.re.match - - -class Regex(Token): - r"""Token for matching strings that match a given regular - expression. Defined with string specifying the regular expression in - a form recognized by the stdlib Python `re module `_. - If the given regex contains named groups (defined using ``(?P...)``), - these will be preserved as named parse results. - - If instead of the Python stdlib re module you wish to use a different RE module - (such as the `regex` module), you can replace it by either building your - Regex object with a compiled RE that was compiled using regex: - - Example:: - - realnum = Regex(r"[+-]?\d+\.\d*") - date = Regex(r'(?P\d{4})-(?P\d\d?)-(?P\d\d?)') - # ref: https://stackoverflow.com/questions/267399/how-do-you-match-only-valid-roman-numerals-with-a-regular-expression - roman = Regex(r"M{0,4}(CM|CD|D?{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})") - - # use regex module instead of stdlib re module to construct a Regex using - # a compiled regular expression - import regex - parser = pp.Regex(regex.compile(r'[0-9]')) - - """ - def __init__(self, pattern, flags=0, asGroupList=False, asMatch=False): - """The parameters ``pattern`` and ``flags`` are passed - to the ``re.compile()`` function as-is. See the Python - `re module `_ module for an - explanation of the acceptable patterns and flags. - """ - super(Regex, self).__init__() - - if isinstance(pattern, basestring): - if not pattern: - warnings.warn("null string passed to Regex; use Empty() instead", - SyntaxWarning, stacklevel=2) - - self.pattern = pattern - self.flags = flags - - try: - self.re = re.compile(self.pattern, self.flags) - self.reString = self.pattern - except re.error: - warnings.warn("invalid pattern (%s) passed to Regex" % pattern, - SyntaxWarning, stacklevel=2) - raise - - elif hasattr(pattern, 'pattern') and hasattr(pattern, 'match'): - self.re = pattern - self.pattern = self.reString = pattern.pattern - self.flags = flags - - else: - raise TypeError("Regex may only be constructed with a string or a compiled RE object") - - self.re_match = self.re.match - - self.name = _ustr(self) - self.errmsg = "Expected " + self.name - self.mayIndexError = False - self.mayReturnEmpty = self.re_match("") is not None - self.asGroupList = asGroupList - self.asMatch = asMatch - if self.asGroupList: - self.parseImpl = self.parseImplAsGroupList - if self.asMatch: - self.parseImpl = self.parseImplAsMatch - - def parseImpl(self, instring, loc, doActions=True): - result = self.re_match(instring, loc) - if not result: - raise ParseException(instring, loc, self.errmsg, self) - - loc = result.end() - ret = ParseResults(result.group()) - d = result.groupdict() - if d: - for k, v in d.items(): - ret[k] = v - return loc, ret - - def parseImplAsGroupList(self, instring, loc, doActions=True): - result = self.re_match(instring, loc) - if not result: - raise ParseException(instring, loc, self.errmsg, self) - - loc = result.end() - ret = result.groups() - return loc, ret - - def parseImplAsMatch(self, instring, loc, doActions=True): - result = self.re_match(instring, loc) - if not result: - raise ParseException(instring, loc, self.errmsg, self) - - loc = result.end() - ret = result - return loc, ret - - def __str__(self): - try: - return super(Regex, self).__str__() - except Exception: - pass - - if self.strRepr is None: - self.strRepr = "Re:(%s)" % repr(self.pattern) - - return self.strRepr - - def sub(self, repl): - r""" - Return Regex with an attached parse action to transform the parsed - result as if called using `re.sub(expr, repl, string) `_. - - Example:: - - make_html = Regex(r"(\w+):(.*?):").sub(r"<\1>\2") - print(make_html.transformString("h1:main title:")) - # prints "

main title

" - """ - if self.asGroupList: - warnings.warn("cannot use sub() with Regex(asGroupList=True)", - SyntaxWarning, stacklevel=2) - raise SyntaxError() - - if self.asMatch and callable(repl): - warnings.warn("cannot use sub() with a callable with Regex(asMatch=True)", - SyntaxWarning, stacklevel=2) - raise SyntaxError() - - if self.asMatch: - def pa(tokens): - return tokens[0].expand(repl) - else: - def pa(tokens): - return self.re.sub(repl, tokens[0]) - return self.addParseAction(pa) - -class QuotedString(Token): - r""" - Token for matching strings that are delimited by quoting characters. - - Defined with the following parameters: - - - quoteChar - string of one or more characters defining the - quote delimiting string - - escChar - character to escape quotes, typically backslash - (default= ``None``) - - escQuote - special quote sequence to escape an embedded quote - string (such as SQL's ``""`` to escape an embedded ``"``) - (default= ``None``) - - multiline - boolean indicating whether quotes can span - multiple lines (default= ``False``) - - unquoteResults - boolean indicating whether the matched text - should be unquoted (default= ``True``) - - endQuoteChar - string of one or more characters defining the - end of the quote delimited string (default= ``None`` => same as - quoteChar) - - convertWhitespaceEscapes - convert escaped whitespace - (``'\t'``, ``'\n'``, etc.) to actual whitespace - (default= ``True``) - - Example:: - - qs = QuotedString('"') - print(qs.searchString('lsjdf "This is the quote" sldjf')) - complex_qs = QuotedString('{{', endQuoteChar='}}') - print(complex_qs.searchString('lsjdf {{This is the "quote"}} sldjf')) - sql_qs = QuotedString('"', escQuote='""') - print(sql_qs.searchString('lsjdf "This is the quote with ""embedded"" quotes" sldjf')) - - prints:: - - [['This is the quote']] - [['This is the "quote"']] - [['This is the quote with "embedded" quotes']] - """ - def __init__(self, quoteChar, escChar=None, escQuote=None, multiline=False, - unquoteResults=True, endQuoteChar=None, convertWhitespaceEscapes=True): - super(QuotedString, self).__init__() - - # remove white space from quote chars - wont work anyway - quoteChar = quoteChar.strip() - if not quoteChar: - warnings.warn("quoteChar cannot be the empty string", SyntaxWarning, stacklevel=2) - raise SyntaxError() - - if endQuoteChar is None: - endQuoteChar = quoteChar - else: - endQuoteChar = endQuoteChar.strip() - if not endQuoteChar: - warnings.warn("endQuoteChar cannot be the empty string", SyntaxWarning, stacklevel=2) - raise SyntaxError() - - self.quoteChar = quoteChar - self.quoteCharLen = len(quoteChar) - self.firstQuoteChar = quoteChar[0] - self.endQuoteChar = endQuoteChar - self.endQuoteCharLen = len(endQuoteChar) - self.escChar = escChar - self.escQuote = escQuote - self.unquoteResults = unquoteResults - self.convertWhitespaceEscapes = convertWhitespaceEscapes - - if multiline: - self.flags = re.MULTILINE | re.DOTALL - self.pattern = r'%s(?:[^%s%s]' % (re.escape(self.quoteChar), - _escapeRegexRangeChars(self.endQuoteChar[0]), - (escChar is not None and _escapeRegexRangeChars(escChar) or '')) - else: - self.flags = 0 - self.pattern = r'%s(?:[^%s\n\r%s]' % (re.escape(self.quoteChar), - _escapeRegexRangeChars(self.endQuoteChar[0]), - (escChar is not None and _escapeRegexRangeChars(escChar) or '')) - if len(self.endQuoteChar) > 1: - self.pattern += ( - '|(?:' + ')|(?:'.join("%s[^%s]" % (re.escape(self.endQuoteChar[:i]), - _escapeRegexRangeChars(self.endQuoteChar[i])) - for i in range(len(self.endQuoteChar) - 1, 0, -1)) + ')') - - if escQuote: - self.pattern += (r'|(?:%s)' % re.escape(escQuote)) - if escChar: - self.pattern += (r'|(?:%s.)' % re.escape(escChar)) - self.escCharReplacePattern = re.escape(self.escChar) + "(.)" - self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) - - try: - self.re = re.compile(self.pattern, self.flags) - self.reString = self.pattern - self.re_match = self.re.match - except re.error: - warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, - SyntaxWarning, stacklevel=2) - raise - - self.name = _ustr(self) - self.errmsg = "Expected " + self.name - self.mayIndexError = False - self.mayReturnEmpty = True - - def parseImpl(self, instring, loc, doActions=True): - result = instring[loc] == self.firstQuoteChar and self.re_match(instring, loc) or None - if not result: - raise ParseException(instring, loc, self.errmsg, self) - - loc = result.end() - ret = result.group() - - if self.unquoteResults: - - # strip off quotes - ret = ret[self.quoteCharLen: -self.endQuoteCharLen] - - if isinstance(ret, basestring): - # replace escaped whitespace - if '\\' in ret and self.convertWhitespaceEscapes: - ws_map = { - r'\t': '\t', - r'\n': '\n', - r'\f': '\f', - r'\r': '\r', - } - for wslit, wschar in ws_map.items(): - ret = ret.replace(wslit, wschar) - - # replace escaped characters - if self.escChar: - ret = re.sub(self.escCharReplacePattern, r"\g<1>", ret) - - # replace escaped quotes - if self.escQuote: - ret = ret.replace(self.escQuote, self.endQuoteChar) - - return loc, ret - - def __str__(self): - try: - return super(QuotedString, self).__str__() - except Exception: - pass - - if self.strRepr is None: - self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) - - return self.strRepr - - -class CharsNotIn(Token): - """Token for matching words composed of characters *not* in a given - set (will include whitespace in matched characters if not listed in - the provided exclusion set - see example). Defined with string - containing all disallowed characters, and an optional minimum, - maximum, and/or exact length. The default value for ``min`` is - 1 (a minimum value < 1 is not valid); the default values for - ``max`` and ``exact`` are 0, meaning no maximum or exact - length restriction. - - Example:: - - # define a comma-separated-value as anything that is not a ',' - csv_value = CharsNotIn(',') - print(delimitedList(csv_value).parseString("dkls,lsdkjf,s12 34,@!#,213")) - - prints:: - - ['dkls', 'lsdkjf', 's12 34', '@!#', '213'] - """ - def __init__(self, notChars, min=1, max=0, exact=0): - super(CharsNotIn, self).__init__() - self.skipWhitespace = False - self.notChars = notChars - - if min < 1: - raise ValueError("cannot specify a minimum length < 1; use " - "Optional(CharsNotIn()) if zero-length char group is permitted") - - self.minLen = min - - if max > 0: - self.maxLen = max - else: - self.maxLen = _MAX_INT - - if exact > 0: - self.maxLen = exact - self.minLen = exact - - self.name = _ustr(self) - self.errmsg = "Expected " + self.name - self.mayReturnEmpty = (self.minLen == 0) - self.mayIndexError = False - - def parseImpl(self, instring, loc, doActions=True): - if instring[loc] in self.notChars: - raise ParseException(instring, loc, self.errmsg, self) - - start = loc - loc += 1 - notchars = self.notChars - maxlen = min(start + self.maxLen, len(instring)) - while loc < maxlen and instring[loc] not in notchars: - loc += 1 - - if loc - start < self.minLen: - raise ParseException(instring, loc, self.errmsg, self) - - return loc, instring[start:loc] - - def __str__(self): - try: - return super(CharsNotIn, self).__str__() - except Exception: - pass - - if self.strRepr is None: - if len(self.notChars) > 4: - self.strRepr = "!W:(%s...)" % self.notChars[:4] - else: - self.strRepr = "!W:(%s)" % self.notChars - - return self.strRepr - -class White(Token): - """Special matching class for matching whitespace. Normally, - whitespace is ignored by pyparsing grammars. This class is included - when some whitespace structures are significant. Define with - a string containing the whitespace characters to be matched; default - is ``" \\t\\r\\n"``. Also takes optional ``min``, - ``max``, and ``exact`` arguments, as defined for the - :class:`Word` class. - """ - whiteStrs = { - ' ' : '', - '\t': '', - '\n': '', - '\r': '', - '\f': '', - u'\u00A0': '', - u'\u1680': '', - u'\u180E': '', - u'\u2000': '', - u'\u2001': '', - u'\u2002': '', - u'\u2003': '', - u'\u2004': '', - u'\u2005': '', - u'\u2006': '', - u'\u2007': '', - u'\u2008': '', - u'\u2009': '', - u'\u200A': '', - u'\u200B': '', - u'\u202F': '', - u'\u205F': '', - u'\u3000': '', - } - def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): - super(White, self).__init__() - self.matchWhite = ws - self.setWhitespaceChars("".join(c for c in self.whiteChars if c not in self.matchWhite)) - # ~ self.leaveWhitespace() - self.name = ("".join(White.whiteStrs[c] for c in self.matchWhite)) - self.mayReturnEmpty = True - self.errmsg = "Expected " + self.name - - self.minLen = min - - if max > 0: - self.maxLen = max - else: - self.maxLen = _MAX_INT - - if exact > 0: - self.maxLen = exact - self.minLen = exact - - def parseImpl(self, instring, loc, doActions=True): - if instring[loc] not in self.matchWhite: - raise ParseException(instring, loc, self.errmsg, self) - start = loc - loc += 1 - maxloc = start + self.maxLen - maxloc = min(maxloc, len(instring)) - while loc < maxloc and instring[loc] in self.matchWhite: - loc += 1 - - if loc - start < self.minLen: - raise ParseException(instring, loc, self.errmsg, self) - - return loc, instring[start:loc] - - -class _PositionToken(Token): - def __init__(self): - super(_PositionToken, self).__init__() - self.name = self.__class__.__name__ - self.mayReturnEmpty = True - self.mayIndexError = False - -class GoToColumn(_PositionToken): - """Token to advance to a specific column of input text; useful for - tabular report scraping. - """ - def __init__(self, colno): - super(GoToColumn, self).__init__() - self.col = colno - - def preParse(self, instring, loc): - if col(loc, instring) != self.col: - instrlen = len(instring) - if self.ignoreExprs: - loc = self._skipIgnorables(instring, loc) - while loc < instrlen and instring[loc].isspace() and col(loc, instring) != self.col: - loc += 1 - return loc - - def parseImpl(self, instring, loc, doActions=True): - thiscol = col(loc, instring) - if thiscol > self.col: - raise ParseException(instring, loc, "Text not in expected column", self) - newloc = loc + self.col - thiscol - ret = instring[loc: newloc] - return newloc, ret - - -class LineStart(_PositionToken): - r"""Matches if current position is at the beginning of a line within - the parse string - - Example:: - - test = '''\ - AAA this line - AAA and this line - AAA but not this one - B AAA and definitely not this one - ''' - - for t in (LineStart() + 'AAA' + restOfLine).searchString(test): - print(t) - - prints:: - - ['AAA', ' this line'] - ['AAA', ' and this line'] - - """ - def __init__(self): - super(LineStart, self).__init__() - self.errmsg = "Expected start of line" - - def parseImpl(self, instring, loc, doActions=True): - if col(loc, instring) == 1: - return loc, [] - raise ParseException(instring, loc, self.errmsg, self) - -class LineEnd(_PositionToken): - """Matches if current position is at the end of a line within the - parse string - """ - def __init__(self): - super(LineEnd, self).__init__() - self.setWhitespaceChars(ParserElement.DEFAULT_WHITE_CHARS.replace("\n", "")) - self.errmsg = "Expected end of line" - - def parseImpl(self, instring, loc, doActions=True): - if loc < len(instring): - if instring[loc] == "\n": - return loc + 1, "\n" - else: - raise ParseException(instring, loc, self.errmsg, self) - elif loc == len(instring): - return loc + 1, [] - else: - raise ParseException(instring, loc, self.errmsg, self) - -class StringStart(_PositionToken): - """Matches if current position is at the beginning of the parse - string - """ - def __init__(self): - super(StringStart, self).__init__() - self.errmsg = "Expected start of text" - - def parseImpl(self, instring, loc, doActions=True): - if loc != 0: - # see if entire string up to here is just whitespace and ignoreables - if loc != self.preParse(instring, 0): - raise ParseException(instring, loc, self.errmsg, self) - return loc, [] - -class StringEnd(_PositionToken): - """Matches if current position is at the end of the parse string - """ - def __init__(self): - super(StringEnd, self).__init__() - self.errmsg = "Expected end of text" - - def parseImpl(self, instring, loc, doActions=True): - if loc < len(instring): - raise ParseException(instring, loc, self.errmsg, self) - elif loc == len(instring): - return loc + 1, [] - elif loc > len(instring): - return loc, [] - else: - raise ParseException(instring, loc, self.errmsg, self) - -class WordStart(_PositionToken): - """Matches if the current position is at the beginning of a Word, - and is not preceded by any character in a given set of - ``wordChars`` (default= ``printables``). To emulate the - ``\b`` behavior of regular expressions, use - ``WordStart(alphanums)``. ``WordStart`` will also match at - the beginning of the string being parsed, or at the beginning of - a line. - """ - def __init__(self, wordChars=printables): - super(WordStart, self).__init__() - self.wordChars = set(wordChars) - self.errmsg = "Not at the start of a word" - - def parseImpl(self, instring, loc, doActions=True): - if loc != 0: - if (instring[loc - 1] in self.wordChars - or instring[loc] not in self.wordChars): - raise ParseException(instring, loc, self.errmsg, self) - return loc, [] - -class WordEnd(_PositionToken): - """Matches if the current position is at the end of a Word, and is - not followed by any character in a given set of ``wordChars`` - (default= ``printables``). To emulate the ``\b`` behavior of - regular expressions, use ``WordEnd(alphanums)``. ``WordEnd`` - will also match at the end of the string being parsed, or at the end - of a line. - """ - def __init__(self, wordChars=printables): - super(WordEnd, self).__init__() - self.wordChars = set(wordChars) - self.skipWhitespace = False - self.errmsg = "Not at the end of a word" - - def parseImpl(self, instring, loc, doActions=True): - instrlen = len(instring) - if instrlen > 0 and loc < instrlen: - if (instring[loc] in self.wordChars or - instring[loc - 1] not in self.wordChars): - raise ParseException(instring, loc, self.errmsg, self) - return loc, [] - - -class ParseExpression(ParserElement): - """Abstract subclass of ParserElement, for combining and - post-processing parsed tokens. - """ - def __init__(self, exprs, savelist=False): - super(ParseExpression, self).__init__(savelist) - if isinstance(exprs, _generatorType): - exprs = list(exprs) - - if isinstance(exprs, basestring): - self.exprs = [self._literalStringClass(exprs)] - elif isinstance(exprs, ParserElement): - self.exprs = [exprs] - elif isinstance(exprs, Iterable): - exprs = list(exprs) - # if sequence of strings provided, wrap with Literal - if any(isinstance(expr, basestring) for expr in exprs): - exprs = (self._literalStringClass(e) if isinstance(e, basestring) else e for e in exprs) - self.exprs = list(exprs) - else: - try: - self.exprs = list(exprs) - except TypeError: - self.exprs = [exprs] - self.callPreparse = False - - def append(self, other): - self.exprs.append(other) - self.strRepr = None - return self - - def leaveWhitespace(self): - """Extends ``leaveWhitespace`` defined in base class, and also invokes ``leaveWhitespace`` on - all contained expressions.""" - self.skipWhitespace = False - self.exprs = [e.copy() for e in self.exprs] - for e in self.exprs: - e.leaveWhitespace() - return self - - def ignore(self, other): - if isinstance(other, Suppress): - if other not in self.ignoreExprs: - super(ParseExpression, self).ignore(other) - for e in self.exprs: - e.ignore(self.ignoreExprs[-1]) - else: - super(ParseExpression, self).ignore(other) - for e in self.exprs: - e.ignore(self.ignoreExprs[-1]) - return self - - def __str__(self): - try: - return super(ParseExpression, self).__str__() - except Exception: - pass - - if self.strRepr is None: - self.strRepr = "%s:(%s)" % (self.__class__.__name__, _ustr(self.exprs)) - return self.strRepr - - def streamline(self): - super(ParseExpression, self).streamline() - - for e in self.exprs: - e.streamline() - - # collapse nested And's of the form And(And(And(a, b), c), d) to And(a, b, c, d) - # but only if there are no parse actions or resultsNames on the nested And's - # (likewise for Or's and MatchFirst's) - if len(self.exprs) == 2: - other = self.exprs[0] - if (isinstance(other, self.__class__) - and not other.parseAction - and other.resultsName is None - and not other.debug): - self.exprs = other.exprs[:] + [self.exprs[1]] - self.strRepr = None - self.mayReturnEmpty |= other.mayReturnEmpty - self.mayIndexError |= other.mayIndexError - - other = self.exprs[-1] - if (isinstance(other, self.__class__) - and not other.parseAction - and other.resultsName is None - and not other.debug): - self.exprs = self.exprs[:-1] + other.exprs[:] - self.strRepr = None - self.mayReturnEmpty |= other.mayReturnEmpty - self.mayIndexError |= other.mayIndexError - - self.errmsg = "Expected " + _ustr(self) - - return self - - def validate(self, validateTrace=None): - tmp = (validateTrace if validateTrace is not None else [])[:] + [self] - for e in self.exprs: - e.validate(tmp) - self.checkRecursion([]) - - def copy(self): - ret = super(ParseExpression, self).copy() - ret.exprs = [e.copy() for e in self.exprs] - return ret - - def _setResultsName(self, name, listAllMatches=False): - if __diag__.warn_ungrouped_named_tokens_in_collection: - for e in self.exprs: - if isinstance(e, ParserElement) and e.resultsName: - warnings.warn("{0}: setting results name {1!r} on {2} expression " - "collides with {3!r} on contained expression".format("warn_ungrouped_named_tokens_in_collection", - name, - type(self).__name__, - e.resultsName), - stacklevel=3) - - return super(ParseExpression, self)._setResultsName(name, listAllMatches) - - -class And(ParseExpression): - """ - Requires all given :class:`ParseExpression` s to be found in the given order. - Expressions may be separated by whitespace. - May be constructed using the ``'+'`` operator. - May also be constructed using the ``'-'`` operator, which will - suppress backtracking. - - Example:: - - integer = Word(nums) - name_expr = OneOrMore(Word(alphas)) - - expr = And([integer("id"), name_expr("name"), integer("age")]) - # more easily written as: - expr = integer("id") + name_expr("name") + integer("age") - """ - - class _ErrorStop(Empty): - def __init__(self, *args, **kwargs): - super(And._ErrorStop, self).__init__(*args, **kwargs) - self.name = '-' - self.leaveWhitespace() - - def __init__(self, exprs, savelist=True): - exprs = list(exprs) - if exprs and Ellipsis in exprs: - tmp = [] - for i, expr in enumerate(exprs): - if expr is Ellipsis: - if i < len(exprs) - 1: - skipto_arg = (Empty() + exprs[i + 1]).exprs[-1] - tmp.append(SkipTo(skipto_arg)("_skipped*")) - else: - raise Exception("cannot construct And with sequence ending in ...") - else: - tmp.append(expr) - exprs[:] = tmp - super(And, self).__init__(exprs, savelist) - self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) - self.setWhitespaceChars(self.exprs[0].whiteChars) - self.skipWhitespace = self.exprs[0].skipWhitespace - self.callPreparse = True - - def streamline(self): - # collapse any _PendingSkip's - if self.exprs: - if any(isinstance(e, ParseExpression) and e.exprs and isinstance(e.exprs[-1], _PendingSkip) - for e in self.exprs[:-1]): - for i, e in enumerate(self.exprs[:-1]): - if e is None: - continue - if (isinstance(e, ParseExpression) - and e.exprs and isinstance(e.exprs[-1], _PendingSkip)): - e.exprs[-1] = e.exprs[-1] + self.exprs[i + 1] - self.exprs[i + 1] = None - self.exprs = [e for e in self.exprs if e is not None] - - super(And, self).streamline() - self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) - return self - - def parseImpl(self, instring, loc, doActions=True): - # pass False as last arg to _parse for first element, since we already - # pre-parsed the string as part of our And pre-parsing - loc, resultlist = self.exprs[0]._parse(instring, loc, doActions, callPreParse=False) - errorStop = False - for e in self.exprs[1:]: - if isinstance(e, And._ErrorStop): - errorStop = True - continue - if errorStop: - try: - loc, exprtokens = e._parse(instring, loc, doActions) - except ParseSyntaxException: - raise - except ParseBaseException as pe: - pe.__traceback__ = None - raise ParseSyntaxException._from_exception(pe) - except IndexError: - raise ParseSyntaxException(instring, len(instring), self.errmsg, self) - else: - loc, exprtokens = e._parse(instring, loc, doActions) - if exprtokens or exprtokens.haskeys(): - resultlist += exprtokens - return loc, resultlist - - def __iadd__(self, other): - if isinstance(other, basestring): - other = self._literalStringClass(other) - return self.append(other) # And([self, other]) - - def checkRecursion(self, parseElementList): - subRecCheckList = parseElementList[:] + [self] - for e in self.exprs: - e.checkRecursion(subRecCheckList) - if not e.mayReturnEmpty: - break - - def __str__(self): - if hasattr(self, "name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + " ".join(_ustr(e) for e in self.exprs) + "}" - - return self.strRepr - - -class Or(ParseExpression): - """Requires that at least one :class:`ParseExpression` is found. If - two expressions match, the expression that matches the longest - string will be used. May be constructed using the ``'^'`` - operator. - - Example:: - - # construct Or using '^' operator - - number = Word(nums) ^ Combine(Word(nums) + '.' + Word(nums)) - print(number.searchString("123 3.1416 789")) - - prints:: - - [['123'], ['3.1416'], ['789']] - """ - def __init__(self, exprs, savelist=False): - super(Or, self).__init__(exprs, savelist) - if self.exprs: - self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) - else: - self.mayReturnEmpty = True - - def streamline(self): - super(Or, self).streamline() - if __compat__.collect_all_And_tokens: - self.saveAsList = any(e.saveAsList for e in self.exprs) - return self - - def parseImpl(self, instring, loc, doActions=True): - maxExcLoc = -1 - maxException = None - matches = [] - for e in self.exprs: - try: - loc2 = e.tryParse(instring, loc) - except ParseException as err: - err.__traceback__ = None - if err.loc > maxExcLoc: - maxException = err - maxExcLoc = err.loc - except IndexError: - if len(instring) > maxExcLoc: - maxException = ParseException(instring, len(instring), e.errmsg, self) - maxExcLoc = len(instring) - else: - # save match among all matches, to retry longest to shortest - matches.append((loc2, e)) - - if matches: - # re-evaluate all matches in descending order of length of match, in case attached actions - # might change whether or how much they match of the input. - matches.sort(key=itemgetter(0), reverse=True) - - if not doActions: - # no further conditions or parse actions to change the selection of - # alternative, so the first match will be the best match - best_expr = matches[0][1] - return best_expr._parse(instring, loc, doActions) - - longest = -1, None - for loc1, expr1 in matches: - if loc1 <= longest[0]: - # already have a longer match than this one will deliver, we are done - return longest - - try: - loc2, toks = expr1._parse(instring, loc, doActions) - except ParseException as err: - err.__traceback__ = None - if err.loc > maxExcLoc: - maxException = err - maxExcLoc = err.loc - else: - if loc2 >= loc1: - return loc2, toks - # didn't match as much as before - elif loc2 > longest[0]: - longest = loc2, toks - - if longest != (-1, None): - return longest - - if maxException is not None: - maxException.msg = self.errmsg - raise maxException - else: - raise ParseException(instring, loc, "no defined alternatives to match", self) - - - def __ixor__(self, other): - if isinstance(other, basestring): - other = self._literalStringClass(other) - return self.append(other) # Or([self, other]) - - def __str__(self): - if hasattr(self, "name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + " ^ ".join(_ustr(e) for e in self.exprs) + "}" - - return self.strRepr - - def checkRecursion(self, parseElementList): - subRecCheckList = parseElementList[:] + [self] - for e in self.exprs: - e.checkRecursion(subRecCheckList) - - def _setResultsName(self, name, listAllMatches=False): - if (not __compat__.collect_all_And_tokens - and __diag__.warn_multiple_tokens_in_named_alternation): - if any(isinstance(e, And) for e in self.exprs): - warnings.warn("{0}: setting results name {1!r} on {2} expression " - "may only return a single token for an And alternative, " - "in future will return the full list of tokens".format( - "warn_multiple_tokens_in_named_alternation", name, type(self).__name__), - stacklevel=3) - - return super(Or, self)._setResultsName(name, listAllMatches) - - -class MatchFirst(ParseExpression): - """Requires that at least one :class:`ParseExpression` is found. If - two expressions match, the first one listed is the one that will - match. May be constructed using the ``'|'`` operator. - - Example:: - - # construct MatchFirst using '|' operator - - # watch the order of expressions to match - number = Word(nums) | Combine(Word(nums) + '.' + Word(nums)) - print(number.searchString("123 3.1416 789")) # Fail! -> [['123'], ['3'], ['1416'], ['789']] - - # put more selective expression first - number = Combine(Word(nums) + '.' + Word(nums)) | Word(nums) - print(number.searchString("123 3.1416 789")) # Better -> [['123'], ['3.1416'], ['789']] - """ - def __init__(self, exprs, savelist=False): - super(MatchFirst, self).__init__(exprs, savelist) - if self.exprs: - self.mayReturnEmpty = any(e.mayReturnEmpty for e in self.exprs) - else: - self.mayReturnEmpty = True - - def streamline(self): - super(MatchFirst, self).streamline() - if __compat__.collect_all_And_tokens: - self.saveAsList = any(e.saveAsList for e in self.exprs) - return self - - def parseImpl(self, instring, loc, doActions=True): - maxExcLoc = -1 - maxException = None - for e in self.exprs: - try: - ret = e._parse(instring, loc, doActions) - return ret - except ParseException as err: - if err.loc > maxExcLoc: - maxException = err - maxExcLoc = err.loc - except IndexError: - if len(instring) > maxExcLoc: - maxException = ParseException(instring, len(instring), e.errmsg, self) - maxExcLoc = len(instring) - - # only got here if no expression matched, raise exception for match that made it the furthest - else: - if maxException is not None: - maxException.msg = self.errmsg - raise maxException - else: - raise ParseException(instring, loc, "no defined alternatives to match", self) - - def __ior__(self, other): - if isinstance(other, basestring): - other = self._literalStringClass(other) - return self.append(other) # MatchFirst([self, other]) - - def __str__(self): - if hasattr(self, "name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + " | ".join(_ustr(e) for e in self.exprs) + "}" - - return self.strRepr - - def checkRecursion(self, parseElementList): - subRecCheckList = parseElementList[:] + [self] - for e in self.exprs: - e.checkRecursion(subRecCheckList) - - def _setResultsName(self, name, listAllMatches=False): - if (not __compat__.collect_all_And_tokens - and __diag__.warn_multiple_tokens_in_named_alternation): - if any(isinstance(e, And) for e in self.exprs): - warnings.warn("{0}: setting results name {1!r} on {2} expression " - "may only return a single token for an And alternative, " - "in future will return the full list of tokens".format( - "warn_multiple_tokens_in_named_alternation", name, type(self).__name__), - stacklevel=3) - - return super(MatchFirst, self)._setResultsName(name, listAllMatches) - - -class Each(ParseExpression): - """Requires all given :class:`ParseExpression` s to be found, but in - any order. Expressions may be separated by whitespace. - - May be constructed using the ``'&'`` operator. - - Example:: - - color = oneOf("RED ORANGE YELLOW GREEN BLUE PURPLE BLACK WHITE BROWN") - shape_type = oneOf("SQUARE CIRCLE TRIANGLE STAR HEXAGON OCTAGON") - integer = Word(nums) - shape_attr = "shape:" + shape_type("shape") - posn_attr = "posn:" + Group(integer("x") + ',' + integer("y"))("posn") - color_attr = "color:" + color("color") - size_attr = "size:" + integer("size") - - # use Each (using operator '&') to accept attributes in any order - # (shape and posn are required, color and size are optional) - shape_spec = shape_attr & posn_attr & Optional(color_attr) & Optional(size_attr) - - shape_spec.runTests(''' - shape: SQUARE color: BLACK posn: 100, 120 - shape: CIRCLE size: 50 color: BLUE posn: 50,80 - color:GREEN size:20 shape:TRIANGLE posn:20,40 - ''' - ) - - prints:: - - shape: SQUARE color: BLACK posn: 100, 120 - ['shape:', 'SQUARE', 'color:', 'BLACK', 'posn:', ['100', ',', '120']] - - color: BLACK - - posn: ['100', ',', '120'] - - x: 100 - - y: 120 - - shape: SQUARE - - - shape: CIRCLE size: 50 color: BLUE posn: 50,80 - ['shape:', 'CIRCLE', 'size:', '50', 'color:', 'BLUE', 'posn:', ['50', ',', '80']] - - color: BLUE - - posn: ['50', ',', '80'] - - x: 50 - - y: 80 - - shape: CIRCLE - - size: 50 - - - color: GREEN size: 20 shape: TRIANGLE posn: 20,40 - ['color:', 'GREEN', 'size:', '20', 'shape:', 'TRIANGLE', 'posn:', ['20', ',', '40']] - - color: GREEN - - posn: ['20', ',', '40'] - - x: 20 - - y: 40 - - shape: TRIANGLE - - size: 20 - """ - def __init__(self, exprs, savelist=True): - super(Each, self).__init__(exprs, savelist) - self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) - self.skipWhitespace = True - self.initExprGroups = True - self.saveAsList = True - - def streamline(self): - super(Each, self).streamline() - self.mayReturnEmpty = all(e.mayReturnEmpty for e in self.exprs) - return self - - def parseImpl(self, instring, loc, doActions=True): - if self.initExprGroups: - self.opt1map = dict((id(e.expr), e) for e in self.exprs if isinstance(e, Optional)) - opt1 = [e.expr for e in self.exprs if isinstance(e, Optional)] - opt2 = [e for e in self.exprs if e.mayReturnEmpty and not isinstance(e, (Optional, Regex))] - self.optionals = opt1 + opt2 - self.multioptionals = [e.expr for e in self.exprs if isinstance(e, ZeroOrMore)] - self.multirequired = [e.expr for e in self.exprs if isinstance(e, OneOrMore)] - self.required = [e for e in self.exprs if not isinstance(e, (Optional, ZeroOrMore, OneOrMore))] - self.required += self.multirequired - self.initExprGroups = False - tmpLoc = loc - tmpReqd = self.required[:] - tmpOpt = self.optionals[:] - matchOrder = [] - - keepMatching = True - while keepMatching: - tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired - failed = [] - for e in tmpExprs: - try: - tmpLoc = e.tryParse(instring, tmpLoc) - except ParseException: - failed.append(e) - else: - matchOrder.append(self.opt1map.get(id(e), e)) - if e in tmpReqd: - tmpReqd.remove(e) - elif e in tmpOpt: - tmpOpt.remove(e) - if len(failed) == len(tmpExprs): - keepMatching = False - - if tmpReqd: - missing = ", ".join(_ustr(e) for e in tmpReqd) - raise ParseException(instring, loc, "Missing one or more required elements (%s)" % missing) - - # add any unmatched Optionals, in case they have default values defined - matchOrder += [e for e in self.exprs if isinstance(e, Optional) and e.expr in tmpOpt] - - resultlist = [] - for e in matchOrder: - loc, results = e._parse(instring, loc, doActions) - resultlist.append(results) - - finalResults = sum(resultlist, ParseResults([])) - return loc, finalResults - - def __str__(self): - if hasattr(self, "name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + " & ".join(_ustr(e) for e in self.exprs) + "}" - - return self.strRepr - - def checkRecursion(self, parseElementList): - subRecCheckList = parseElementList[:] + [self] - for e in self.exprs: - e.checkRecursion(subRecCheckList) - - -class ParseElementEnhance(ParserElement): - """Abstract subclass of :class:`ParserElement`, for combining and - post-processing parsed tokens. - """ - def __init__(self, expr, savelist=False): - super(ParseElementEnhance, self).__init__(savelist) - if isinstance(expr, basestring): - if issubclass(self._literalStringClass, Token): - expr = self._literalStringClass(expr) - else: - expr = self._literalStringClass(Literal(expr)) - self.expr = expr - self.strRepr = None - if expr is not None: - self.mayIndexError = expr.mayIndexError - self.mayReturnEmpty = expr.mayReturnEmpty - self.setWhitespaceChars(expr.whiteChars) - self.skipWhitespace = expr.skipWhitespace - self.saveAsList = expr.saveAsList - self.callPreparse = expr.callPreparse - self.ignoreExprs.extend(expr.ignoreExprs) - - def parseImpl(self, instring, loc, doActions=True): - if self.expr is not None: - return self.expr._parse(instring, loc, doActions, callPreParse=False) - else: - raise ParseException("", loc, self.errmsg, self) - - def leaveWhitespace(self): - self.skipWhitespace = False - self.expr = self.expr.copy() - if self.expr is not None: - self.expr.leaveWhitespace() - return self - - def ignore(self, other): - if isinstance(other, Suppress): - if other not in self.ignoreExprs: - super(ParseElementEnhance, self).ignore(other) - if self.expr is not None: - self.expr.ignore(self.ignoreExprs[-1]) - else: - super(ParseElementEnhance, self).ignore(other) - if self.expr is not None: - self.expr.ignore(self.ignoreExprs[-1]) - return self - - def streamline(self): - super(ParseElementEnhance, self).streamline() - if self.expr is not None: - self.expr.streamline() - return self - - def checkRecursion(self, parseElementList): - if self in parseElementList: - raise RecursiveGrammarException(parseElementList + [self]) - subRecCheckList = parseElementList[:] + [self] - if self.expr is not None: - self.expr.checkRecursion(subRecCheckList) - - def validate(self, validateTrace=None): - if validateTrace is None: - validateTrace = [] - tmp = validateTrace[:] + [self] - if self.expr is not None: - self.expr.validate(tmp) - self.checkRecursion([]) - - def __str__(self): - try: - return super(ParseElementEnhance, self).__str__() - except Exception: - pass - - if self.strRepr is None and self.expr is not None: - self.strRepr = "%s:(%s)" % (self.__class__.__name__, _ustr(self.expr)) - return self.strRepr - - -class FollowedBy(ParseElementEnhance): - """Lookahead matching of the given parse expression. - ``FollowedBy`` does *not* advance the parsing position within - the input string, it only verifies that the specified parse - expression matches at the current position. ``FollowedBy`` - always returns a null token list. If any results names are defined - in the lookahead expression, those *will* be returned for access by - name. - - Example:: - - # use FollowedBy to match a label only if it is followed by a ':' - data_word = Word(alphas) - label = data_word + FollowedBy(':') - attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) - - OneOrMore(attr_expr).parseString("shape: SQUARE color: BLACK posn: upper left").pprint() - - prints:: - - [['shape', 'SQUARE'], ['color', 'BLACK'], ['posn', 'upper left']] - """ - def __init__(self, expr): - super(FollowedBy, self).__init__(expr) - self.mayReturnEmpty = True - - def parseImpl(self, instring, loc, doActions=True): - # by using self._expr.parse and deleting the contents of the returned ParseResults list - # we keep any named results that were defined in the FollowedBy expression - _, ret = self.expr._parse(instring, loc, doActions=doActions) - del ret[:] - - return loc, ret - - -class PrecededBy(ParseElementEnhance): - """Lookbehind matching of the given parse expression. - ``PrecededBy`` does not advance the parsing position within the - input string, it only verifies that the specified parse expression - matches prior to the current position. ``PrecededBy`` always - returns a null token list, but if a results name is defined on the - given expression, it is returned. - - Parameters: - - - expr - expression that must match prior to the current parse - location - - retreat - (default= ``None``) - (int) maximum number of characters - to lookbehind prior to the current parse location - - If the lookbehind expression is a string, Literal, Keyword, or - a Word or CharsNotIn with a specified exact or maximum length, then - the retreat parameter is not required. Otherwise, retreat must be - specified to give a maximum number of characters to look back from - the current parse position for a lookbehind match. - - Example:: - - # VB-style variable names with type prefixes - int_var = PrecededBy("#") + pyparsing_common.identifier - str_var = PrecededBy("$") + pyparsing_common.identifier - - """ - def __init__(self, expr, retreat=None): - super(PrecededBy, self).__init__(expr) - self.expr = self.expr().leaveWhitespace() - self.mayReturnEmpty = True - self.mayIndexError = False - self.exact = False - if isinstance(expr, str): - retreat = len(expr) - self.exact = True - elif isinstance(expr, (Literal, Keyword)): - retreat = expr.matchLen - self.exact = True - elif isinstance(expr, (Word, CharsNotIn)) and expr.maxLen != _MAX_INT: - retreat = expr.maxLen - self.exact = True - elif isinstance(expr, _PositionToken): - retreat = 0 - self.exact = True - self.retreat = retreat - self.errmsg = "not preceded by " + str(expr) - self.skipWhitespace = False - self.parseAction.append(lambda s, l, t: t.__delitem__(slice(None, None))) - - def parseImpl(self, instring, loc=0, doActions=True): - if self.exact: - if loc < self.retreat: - raise ParseException(instring, loc, self.errmsg) - start = loc - self.retreat - _, ret = self.expr._parse(instring, start) - else: - # retreat specified a maximum lookbehind window, iterate - test_expr = self.expr + StringEnd() - instring_slice = instring[max(0, loc - self.retreat):loc] - last_expr = ParseException(instring, loc, self.errmsg) - for offset in range(1, min(loc, self.retreat + 1)+1): - try: - # print('trying', offset, instring_slice, repr(instring_slice[loc - offset:])) - _, ret = test_expr._parse(instring_slice, len(instring_slice) - offset) - except ParseBaseException as pbe: - last_expr = pbe - else: - break - else: - raise last_expr - return loc, ret - - -class NotAny(ParseElementEnhance): - """Lookahead to disallow matching with the given parse expression. - ``NotAny`` does *not* advance the parsing position within the - input string, it only verifies that the specified parse expression - does *not* match at the current position. Also, ``NotAny`` does - *not* skip over leading whitespace. ``NotAny`` always returns - a null token list. May be constructed using the '~' operator. - - Example:: - - AND, OR, NOT = map(CaselessKeyword, "AND OR NOT".split()) - - # take care not to mistake keywords for identifiers - ident = ~(AND | OR | NOT) + Word(alphas) - boolean_term = Optional(NOT) + ident - - # very crude boolean expression - to support parenthesis groups and - # operation hierarchy, use infixNotation - boolean_expr = boolean_term + ZeroOrMore((AND | OR) + boolean_term) - - # integers that are followed by "." are actually floats - integer = Word(nums) + ~Char(".") - """ - def __init__(self, expr): - super(NotAny, self).__init__(expr) - # ~ self.leaveWhitespace() - self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs - self.mayReturnEmpty = True - self.errmsg = "Found unwanted token, " + _ustr(self.expr) - - def parseImpl(self, instring, loc, doActions=True): - if self.expr.canParseNext(instring, loc): - raise ParseException(instring, loc, self.errmsg, self) - return loc, [] - - def __str__(self): - if hasattr(self, "name"): - return self.name - - if self.strRepr is None: - self.strRepr = "~{" + _ustr(self.expr) + "}" - - return self.strRepr - -class _MultipleMatch(ParseElementEnhance): - def __init__(self, expr, stopOn=None): - super(_MultipleMatch, self).__init__(expr) - self.saveAsList = True - ender = stopOn - if isinstance(ender, basestring): - ender = self._literalStringClass(ender) - self.stopOn(ender) - - def stopOn(self, ender): - if isinstance(ender, basestring): - ender = self._literalStringClass(ender) - self.not_ender = ~ender if ender is not None else None - return self - - def parseImpl(self, instring, loc, doActions=True): - self_expr_parse = self.expr._parse - self_skip_ignorables = self._skipIgnorables - check_ender = self.not_ender is not None - if check_ender: - try_not_ender = self.not_ender.tryParse - - # must be at least one (but first see if we are the stopOn sentinel; - # if so, fail) - if check_ender: - try_not_ender(instring, loc) - loc, tokens = self_expr_parse(instring, loc, doActions, callPreParse=False) - try: - hasIgnoreExprs = (not not self.ignoreExprs) - while 1: - if check_ender: - try_not_ender(instring, loc) - if hasIgnoreExprs: - preloc = self_skip_ignorables(instring, loc) - else: - preloc = loc - loc, tmptokens = self_expr_parse(instring, preloc, doActions) - if tmptokens or tmptokens.haskeys(): - tokens += tmptokens - except (ParseException, IndexError): - pass - - return loc, tokens - - def _setResultsName(self, name, listAllMatches=False): - if __diag__.warn_ungrouped_named_tokens_in_collection: - for e in [self.expr] + getattr(self.expr, 'exprs', []): - if isinstance(e, ParserElement) and e.resultsName: - warnings.warn("{0}: setting results name {1!r} on {2} expression " - "collides with {3!r} on contained expression".format("warn_ungrouped_named_tokens_in_collection", - name, - type(self).__name__, - e.resultsName), - stacklevel=3) - - return super(_MultipleMatch, self)._setResultsName(name, listAllMatches) - - -class OneOrMore(_MultipleMatch): - """Repetition of one or more of the given expression. - - Parameters: - - expr - expression that must match one or more times - - stopOn - (default= ``None``) - expression for a terminating sentinel - (only required if the sentinel would ordinarily match the repetition - expression) - - Example:: - - data_word = Word(alphas) - label = data_word + FollowedBy(':') - attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) - - text = "shape: SQUARE posn: upper left color: BLACK" - OneOrMore(attr_expr).parseString(text).pprint() # Fail! read 'color' as data instead of next label -> [['shape', 'SQUARE color']] - - # use stopOn attribute for OneOrMore to avoid reading label string as part of the data - attr_expr = Group(label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) - OneOrMore(attr_expr).parseString(text).pprint() # Better -> [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'BLACK']] - - # could also be written as - (attr_expr * (1,)).parseString(text).pprint() - """ - - def __str__(self): - if hasattr(self, "name"): - return self.name - - if self.strRepr is None: - self.strRepr = "{" + _ustr(self.expr) + "}..." - - return self.strRepr - -class ZeroOrMore(_MultipleMatch): - """Optional repetition of zero or more of the given expression. - - Parameters: - - expr - expression that must match zero or more times - - stopOn - (default= ``None``) - expression for a terminating sentinel - (only required if the sentinel would ordinarily match the repetition - expression) - - Example: similar to :class:`OneOrMore` - """ - def __init__(self, expr, stopOn=None): - super(ZeroOrMore, self).__init__(expr, stopOn=stopOn) - self.mayReturnEmpty = True - - def parseImpl(self, instring, loc, doActions=True): - try: - return super(ZeroOrMore, self).parseImpl(instring, loc, doActions) - except (ParseException, IndexError): - return loc, [] - - def __str__(self): - if hasattr(self, "name"): - return self.name - - if self.strRepr is None: - self.strRepr = "[" + _ustr(self.expr) + "]..." - - return self.strRepr - - -class _NullToken(object): - def __bool__(self): - return False - __nonzero__ = __bool__ - def __str__(self): - return "" - -class Optional(ParseElementEnhance): - """Optional matching of the given expression. - - Parameters: - - expr - expression that must match zero or more times - - default (optional) - value to be returned if the optional expression is not found. - - Example:: - - # US postal code can be a 5-digit zip, plus optional 4-digit qualifier - zip = Combine(Word(nums, exact=5) + Optional('-' + Word(nums, exact=4))) - zip.runTests(''' - # traditional ZIP code - 12345 - - # ZIP+4 form - 12101-0001 - - # invalid ZIP - 98765- - ''') - - prints:: - - # traditional ZIP code - 12345 - ['12345'] - - # ZIP+4 form - 12101-0001 - ['12101-0001'] - - # invalid ZIP - 98765- - ^ - FAIL: Expected end of text (at char 5), (line:1, col:6) - """ - __optionalNotMatched = _NullToken() - - def __init__(self, expr, default=__optionalNotMatched): - super(Optional, self).__init__(expr, savelist=False) - self.saveAsList = self.expr.saveAsList - self.defaultValue = default - self.mayReturnEmpty = True - - def parseImpl(self, instring, loc, doActions=True): - try: - loc, tokens = self.expr._parse(instring, loc, doActions, callPreParse=False) - except (ParseException, IndexError): - if self.defaultValue is not self.__optionalNotMatched: - if self.expr.resultsName: - tokens = ParseResults([self.defaultValue]) - tokens[self.expr.resultsName] = self.defaultValue - else: - tokens = [self.defaultValue] - else: - tokens = [] - return loc, tokens - - def __str__(self): - if hasattr(self, "name"): - return self.name - - if self.strRepr is None: - self.strRepr = "[" + _ustr(self.expr) + "]" - - return self.strRepr - -class SkipTo(ParseElementEnhance): - """Token for skipping over all undefined text until the matched - expression is found. - - Parameters: - - expr - target expression marking the end of the data to be skipped - - include - (default= ``False``) if True, the target expression is also parsed - (the skipped text and target expression are returned as a 2-element list). - - ignore - (default= ``None``) used to define grammars (typically quoted strings and - comments) that might contain false matches to the target expression - - failOn - (default= ``None``) define expressions that are not allowed to be - included in the skipped test; if found before the target expression is found, - the SkipTo is not a match - - Example:: - - report = ''' - Outstanding Issues Report - 1 Jan 2000 - - # | Severity | Description | Days Open - -----+----------+-------------------------------------------+----------- - 101 | Critical | Intermittent system crash | 6 - 94 | Cosmetic | Spelling error on Login ('log|n') | 14 - 79 | Minor | System slow when running too many reports | 47 - ''' - integer = Word(nums) - SEP = Suppress('|') - # use SkipTo to simply match everything up until the next SEP - # - ignore quoted strings, so that a '|' character inside a quoted string does not match - # - parse action will call token.strip() for each matched token, i.e., the description body - string_data = SkipTo(SEP, ignore=quotedString) - string_data.setParseAction(tokenMap(str.strip)) - ticket_expr = (integer("issue_num") + SEP - + string_data("sev") + SEP - + string_data("desc") + SEP - + integer("days_open")) - - for tkt in ticket_expr.searchString(report): - print tkt.dump() - - prints:: - - ['101', 'Critical', 'Intermittent system crash', '6'] - - days_open: 6 - - desc: Intermittent system crash - - issue_num: 101 - - sev: Critical - ['94', 'Cosmetic', "Spelling error on Login ('log|n')", '14'] - - days_open: 14 - - desc: Spelling error on Login ('log|n') - - issue_num: 94 - - sev: Cosmetic - ['79', 'Minor', 'System slow when running too many reports', '47'] - - days_open: 47 - - desc: System slow when running too many reports - - issue_num: 79 - - sev: Minor - """ - def __init__(self, other, include=False, ignore=None, failOn=None): - super(SkipTo, self).__init__(other) - self.ignoreExpr = ignore - self.mayReturnEmpty = True - self.mayIndexError = False - self.includeMatch = include - self.saveAsList = False - if isinstance(failOn, basestring): - self.failOn = self._literalStringClass(failOn) - else: - self.failOn = failOn - self.errmsg = "No match found for " + _ustr(self.expr) - - def parseImpl(self, instring, loc, doActions=True): - startloc = loc - instrlen = len(instring) - expr = self.expr - expr_parse = self.expr._parse - self_failOn_canParseNext = self.failOn.canParseNext if self.failOn is not None else None - self_ignoreExpr_tryParse = self.ignoreExpr.tryParse if self.ignoreExpr is not None else None - - tmploc = loc - while tmploc <= instrlen: - if self_failOn_canParseNext is not None: - # break if failOn expression matches - if self_failOn_canParseNext(instring, tmploc): - break - - if self_ignoreExpr_tryParse is not None: - # advance past ignore expressions - while 1: - try: - tmploc = self_ignoreExpr_tryParse(instring, tmploc) - except ParseBaseException: - break - - try: - expr_parse(instring, tmploc, doActions=False, callPreParse=False) - except (ParseException, IndexError): - # no match, advance loc in string - tmploc += 1 - else: - # matched skipto expr, done - break - - else: - # ran off the end of the input string without matching skipto expr, fail - raise ParseException(instring, loc, self.errmsg, self) - - # build up return values - loc = tmploc - skiptext = instring[startloc:loc] - skipresult = ParseResults(skiptext) - - if self.includeMatch: - loc, mat = expr_parse(instring, loc, doActions, callPreParse=False) - skipresult += mat - - return loc, skipresult - -class Forward(ParseElementEnhance): - """Forward declaration of an expression to be defined later - - used for recursive grammars, such as algebraic infix notation. - When the expression is known, it is assigned to the ``Forward`` - variable using the '<<' operator. - - Note: take care when assigning to ``Forward`` not to overlook - precedence of operators. - - Specifically, '|' has a lower precedence than '<<', so that:: - - fwdExpr << a | b | c - - will actually be evaluated as:: - - (fwdExpr << a) | b | c - - thereby leaving b and c out as parseable alternatives. It is recommended that you - explicitly group the values inserted into the ``Forward``:: - - fwdExpr << (a | b | c) - - Converting to use the '<<=' operator instead will avoid this problem. - - See :class:`ParseResults.pprint` for an example of a recursive - parser created using ``Forward``. - """ - def __init__(self, other=None): - super(Forward, self).__init__(other, savelist=False) - - def __lshift__(self, other): - if isinstance(other, basestring): - other = self._literalStringClass(other) - self.expr = other - self.strRepr = None - self.mayIndexError = self.expr.mayIndexError - self.mayReturnEmpty = self.expr.mayReturnEmpty - self.setWhitespaceChars(self.expr.whiteChars) - self.skipWhitespace = self.expr.skipWhitespace - self.saveAsList = self.expr.saveAsList - self.ignoreExprs.extend(self.expr.ignoreExprs) - return self - - def __ilshift__(self, other): - return self << other - - def leaveWhitespace(self): - self.skipWhitespace = False - return self - - def streamline(self): - if not self.streamlined: - self.streamlined = True - if self.expr is not None: - self.expr.streamline() - return self - - def validate(self, validateTrace=None): - if validateTrace is None: - validateTrace = [] - - if self not in validateTrace: - tmp = validateTrace[:] + [self] - if self.expr is not None: - self.expr.validate(tmp) - self.checkRecursion([]) - - def __str__(self): - if hasattr(self, "name"): - return self.name - if self.strRepr is not None: - return self.strRepr - - # Avoid infinite recursion by setting a temporary strRepr - self.strRepr = ": ..." - - # Use the string representation of main expression. - retString = '...' - try: - if self.expr is not None: - retString = _ustr(self.expr)[:1000] - else: - retString = "None" - finally: - self.strRepr = self.__class__.__name__ + ": " + retString - return self.strRepr - - def copy(self): - if self.expr is not None: - return super(Forward, self).copy() - else: - ret = Forward() - ret <<= self - return ret - - def _setResultsName(self, name, listAllMatches=False): - if __diag__.warn_name_set_on_empty_Forward: - if self.expr is None: - warnings.warn("{0}: setting results name {0!r} on {1} expression " - "that has no contained expression".format("warn_name_set_on_empty_Forward", - name, - type(self).__name__), - stacklevel=3) - - return super(Forward, self)._setResultsName(name, listAllMatches) - -class TokenConverter(ParseElementEnhance): - """ - Abstract subclass of :class:`ParseExpression`, for converting parsed results. - """ - def __init__(self, expr, savelist=False): - super(TokenConverter, self).__init__(expr) # , savelist) - self.saveAsList = False - -class Combine(TokenConverter): - """Converter to concatenate all matching tokens to a single string. - By default, the matching patterns must also be contiguous in the - input string; this can be disabled by specifying - ``'adjacent=False'`` in the constructor. - - Example:: - - real = Word(nums) + '.' + Word(nums) - print(real.parseString('3.1416')) # -> ['3', '.', '1416'] - # will also erroneously match the following - print(real.parseString('3. 1416')) # -> ['3', '.', '1416'] - - real = Combine(Word(nums) + '.' + Word(nums)) - print(real.parseString('3.1416')) # -> ['3.1416'] - # no match when there are internal spaces - print(real.parseString('3. 1416')) # -> Exception: Expected W:(0123...) - """ - def __init__(self, expr, joinString="", adjacent=True): - super(Combine, self).__init__(expr) - # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself - if adjacent: - self.leaveWhitespace() - self.adjacent = adjacent - self.skipWhitespace = True - self.joinString = joinString - self.callPreparse = True - - def ignore(self, other): - if self.adjacent: - ParserElement.ignore(self, other) - else: - super(Combine, self).ignore(other) - return self - - def postParse(self, instring, loc, tokenlist): - retToks = tokenlist.copy() - del retToks[:] - retToks += ParseResults(["".join(tokenlist._asStringList(self.joinString))], modal=self.modalResults) - - if self.resultsName and retToks.haskeys(): - return [retToks] - else: - return retToks - -class Group(TokenConverter): - """Converter to return the matched tokens as a list - useful for - returning tokens of :class:`ZeroOrMore` and :class:`OneOrMore` expressions. - - Example:: - - ident = Word(alphas) - num = Word(nums) - term = ident | num - func = ident + Optional(delimitedList(term)) - print(func.parseString("fn a, b, 100")) # -> ['fn', 'a', 'b', '100'] - - func = ident + Group(Optional(delimitedList(term))) - print(func.parseString("fn a, b, 100")) # -> ['fn', ['a', 'b', '100']] - """ - def __init__(self, expr): - super(Group, self).__init__(expr) - self.saveAsList = True - - def postParse(self, instring, loc, tokenlist): - return [tokenlist] - -class Dict(TokenConverter): - """Converter to return a repetitive expression as a list, but also - as a dictionary. Each element can also be referenced using the first - token in the expression as its key. Useful for tabular report - scraping when the first column can be used as a item key. - - Example:: - - data_word = Word(alphas) - label = data_word + FollowedBy(':') - attr_expr = Group(label + Suppress(':') + OneOrMore(data_word).setParseAction(' '.join)) - - text = "shape: SQUARE posn: upper left color: light blue texture: burlap" - attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) - - # print attributes as plain groups - print(OneOrMore(attr_expr).parseString(text).dump()) - - # instead of OneOrMore(expr), parse using Dict(OneOrMore(Group(expr))) - Dict will auto-assign names - result = Dict(OneOrMore(Group(attr_expr))).parseString(text) - print(result.dump()) - - # access named fields as dict entries, or output as dict - print(result['shape']) - print(result.asDict()) - - prints:: - - ['shape', 'SQUARE', 'posn', 'upper left', 'color', 'light blue', 'texture', 'burlap'] - [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] - - color: light blue - - posn: upper left - - shape: SQUARE - - texture: burlap - SQUARE - {'color': 'light blue', 'posn': 'upper left', 'texture': 'burlap', 'shape': 'SQUARE'} - - See more examples at :class:`ParseResults` of accessing fields by results name. - """ - def __init__(self, expr): - super(Dict, self).__init__(expr) - self.saveAsList = True - - def postParse(self, instring, loc, tokenlist): - for i, tok in enumerate(tokenlist): - if len(tok) == 0: - continue - ikey = tok[0] - if isinstance(ikey, int): - ikey = _ustr(tok[0]).strip() - if len(tok) == 1: - tokenlist[ikey] = _ParseResultsWithOffset("", i) - elif len(tok) == 2 and not isinstance(tok[1], ParseResults): - tokenlist[ikey] = _ParseResultsWithOffset(tok[1], i) - else: - dictvalue = tok.copy() # ParseResults(i) - del dictvalue[0] - if len(dictvalue) != 1 or (isinstance(dictvalue, ParseResults) and dictvalue.haskeys()): - tokenlist[ikey] = _ParseResultsWithOffset(dictvalue, i) - else: - tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0], i) - - if self.resultsName: - return [tokenlist] - else: - return tokenlist - - -class Suppress(TokenConverter): - """Converter for ignoring the results of a parsed expression. - - Example:: - - source = "a, b, c,d" - wd = Word(alphas) - wd_list1 = wd + ZeroOrMore(',' + wd) - print(wd_list1.parseString(source)) - - # often, delimiters that are useful during parsing are just in the - # way afterward - use Suppress to keep them out of the parsed output - wd_list2 = wd + ZeroOrMore(Suppress(',') + wd) - print(wd_list2.parseString(source)) - - prints:: - - ['a', ',', 'b', ',', 'c', ',', 'd'] - ['a', 'b', 'c', 'd'] - - (See also :class:`delimitedList`.) - """ - def postParse(self, instring, loc, tokenlist): - return [] - - def suppress(self): - return self - - -class OnlyOnce(object): - """Wrapper for parse actions, to ensure they are only called once. - """ - def __init__(self, methodCall): - self.callable = _trim_arity(methodCall) - self.called = False - def __call__(self, s, l, t): - if not self.called: - results = self.callable(s, l, t) - self.called = True - return results - raise ParseException(s, l, "") - def reset(self): - self.called = False - -def traceParseAction(f): - """Decorator for debugging parse actions. - - When the parse action is called, this decorator will print - ``">> entering method-name(line:, , )"``. - When the parse action completes, the decorator will print - ``"<<"`` followed by the returned value, or any exception that the parse action raised. - - Example:: - - wd = Word(alphas) - - @traceParseAction - def remove_duplicate_chars(tokens): - return ''.join(sorted(set(''.join(tokens)))) - - wds = OneOrMore(wd).setParseAction(remove_duplicate_chars) - print(wds.parseString("slkdjs sld sldd sdlf sdljf")) - - prints:: - - >>entering remove_duplicate_chars(line: 'slkdjs sld sldd sdlf sdljf', 0, (['slkdjs', 'sld', 'sldd', 'sdlf', 'sdljf'], {})) - < 3: - thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc - sys.stderr.write(">>entering %s(line: '%s', %d, %r)\n" % (thisFunc, line(l, s), l, t)) - try: - ret = f(*paArgs) - except Exception as exc: - sys.stderr.write("< ['aa', 'bb', 'cc'] - delimitedList(Word(hexnums), delim=':', combine=True).parseString("AA:BB:CC:DD:EE") # -> ['AA:BB:CC:DD:EE'] - """ - dlName = _ustr(expr) + " [" + _ustr(delim) + " " + _ustr(expr) + "]..." - if combine: - return Combine(expr + ZeroOrMore(delim + expr)).setName(dlName) - else: - return (expr + ZeroOrMore(Suppress(delim) + expr)).setName(dlName) - -def countedArray(expr, intExpr=None): - """Helper to define a counted list of expressions. - - This helper defines a pattern of the form:: - - integer expr expr expr... - - where the leading integer tells how many expr expressions follow. - The matched tokens returns the array of expr tokens as a list - the - leading count token is suppressed. - - If ``intExpr`` is specified, it should be a pyparsing expression - that produces an integer value. - - Example:: - - countedArray(Word(alphas)).parseString('2 ab cd ef') # -> ['ab', 'cd'] - - # in this parser, the leading integer value is given in binary, - # '10' indicating that 2 values are in the array - binaryConstant = Word('01').setParseAction(lambda t: int(t[0], 2)) - countedArray(Word(alphas), intExpr=binaryConstant).parseString('10 ab cd ef') # -> ['ab', 'cd'] - """ - arrayExpr = Forward() - def countFieldParseAction(s, l, t): - n = t[0] - arrayExpr << (n and Group(And([expr] * n)) or Group(empty)) - return [] - if intExpr is None: - intExpr = Word(nums).setParseAction(lambda t: int(t[0])) - else: - intExpr = intExpr.copy() - intExpr.setName("arrayLen") - intExpr.addParseAction(countFieldParseAction, callDuringTry=True) - return (intExpr + arrayExpr).setName('(len) ' + _ustr(expr) + '...') - -def _flatten(L): - ret = [] - for i in L: - if isinstance(i, list): - ret.extend(_flatten(i)) - else: - ret.append(i) - return ret - -def matchPreviousLiteral(expr): - """Helper to define an expression that is indirectly defined from - the tokens matched in a previous expression, that is, it looks for - a 'repeat' of a previous expression. For example:: - - first = Word(nums) - second = matchPreviousLiteral(first) - matchExpr = first + ":" + second - - will match ``"1:1"``, but not ``"1:2"``. Because this - matches a previous literal, will also match the leading - ``"1:1"`` in ``"1:10"``. If this is not desired, use - :class:`matchPreviousExpr`. Do *not* use with packrat parsing - enabled. - """ - rep = Forward() - def copyTokenToRepeater(s, l, t): - if t: - if len(t) == 1: - rep << t[0] - else: - # flatten t tokens - tflat = _flatten(t.asList()) - rep << And(Literal(tt) for tt in tflat) - else: - rep << Empty() - expr.addParseAction(copyTokenToRepeater, callDuringTry=True) - rep.setName('(prev) ' + _ustr(expr)) - return rep - -def matchPreviousExpr(expr): - """Helper to define an expression that is indirectly defined from - the tokens matched in a previous expression, that is, it looks for - a 'repeat' of a previous expression. For example:: - - first = Word(nums) - second = matchPreviousExpr(first) - matchExpr = first + ":" + second - - will match ``"1:1"``, but not ``"1:2"``. Because this - matches by expressions, will *not* match the leading ``"1:1"`` - in ``"1:10"``; the expressions are evaluated first, and then - compared, so ``"1"`` is compared with ``"10"``. Do *not* use - with packrat parsing enabled. - """ - rep = Forward() - e2 = expr.copy() - rep <<= e2 - def copyTokenToRepeater(s, l, t): - matchTokens = _flatten(t.asList()) - def mustMatchTheseTokens(s, l, t): - theseTokens = _flatten(t.asList()) - if theseTokens != matchTokens: - raise ParseException('', 0, '') - rep.setParseAction(mustMatchTheseTokens, callDuringTry=True) - expr.addParseAction(copyTokenToRepeater, callDuringTry=True) - rep.setName('(prev) ' + _ustr(expr)) - return rep - -def _escapeRegexRangeChars(s): - # ~ escape these chars: ^-[] - for c in r"\^-[]": - s = s.replace(c, _bslash + c) - s = s.replace("\n", r"\n") - s = s.replace("\t", r"\t") - return _ustr(s) - -def oneOf(strs, caseless=False, useRegex=True, asKeyword=False): - """Helper to quickly define a set of alternative Literals, and makes - sure to do longest-first testing when there is a conflict, - regardless of the input order, but returns - a :class:`MatchFirst` for best performance. - - Parameters: - - - strs - a string of space-delimited literals, or a collection of - string literals - - caseless - (default= ``False``) - treat all literals as - caseless - - useRegex - (default= ``True``) - as an optimization, will - generate a Regex object; otherwise, will generate - a :class:`MatchFirst` object (if ``caseless=True`` or ``asKeyword=True``, or if - creating a :class:`Regex` raises an exception) - - asKeyword - (default=``False``) - enforce Keyword-style matching on the - generated expressions - - Example:: - - comp_oper = oneOf("< = > <= >= !=") - var = Word(alphas) - number = Word(nums) - term = var | number - comparison_expr = term + comp_oper + term - print(comparison_expr.searchString("B = 12 AA=23 B<=AA AA>12")) - - prints:: - - [['B', '=', '12'], ['AA', '=', '23'], ['B', '<=', 'AA'], ['AA', '>', '12']] - """ - if isinstance(caseless, basestring): - warnings.warn("More than one string argument passed to oneOf, pass " - "choices as a list or space-delimited string", stacklevel=2) - - if caseless: - isequal = (lambda a, b: a.upper() == b.upper()) - masks = (lambda a, b: b.upper().startswith(a.upper())) - parseElementClass = CaselessKeyword if asKeyword else CaselessLiteral - else: - isequal = (lambda a, b: a == b) - masks = (lambda a, b: b.startswith(a)) - parseElementClass = Keyword if asKeyword else Literal - - symbols = [] - if isinstance(strs, basestring): - symbols = strs.split() - elif isinstance(strs, Iterable): - symbols = list(strs) - else: - warnings.warn("Invalid argument to oneOf, expected string or iterable", - SyntaxWarning, stacklevel=2) - if not symbols: - return NoMatch() - - if not asKeyword: - # if not producing keywords, need to reorder to take care to avoid masking - # longer choices with shorter ones - i = 0 - while i < len(symbols) - 1: - cur = symbols[i] - for j, other in enumerate(symbols[i + 1:]): - if isequal(other, cur): - del symbols[i + j + 1] - break - elif masks(cur, other): - del symbols[i + j + 1] - symbols.insert(i, other) - break - else: - i += 1 - - if not (caseless or asKeyword) and useRegex: - # ~ print (strs, "->", "|".join([_escapeRegexChars(sym) for sym in symbols])) - try: - if len(symbols) == len("".join(symbols)): - return Regex("[%s]" % "".join(_escapeRegexRangeChars(sym) for sym in symbols)).setName(' | '.join(symbols)) - else: - return Regex("|".join(re.escape(sym) for sym in symbols)).setName(' | '.join(symbols)) - except Exception: - warnings.warn("Exception creating Regex for oneOf, building MatchFirst", - SyntaxWarning, stacklevel=2) - - # last resort, just use MatchFirst - return MatchFirst(parseElementClass(sym) for sym in symbols).setName(' | '.join(symbols)) - -def dictOf(key, value): - """Helper to easily and clearly define a dictionary by specifying - the respective patterns for the key and value. Takes care of - defining the :class:`Dict`, :class:`ZeroOrMore`, and - :class:`Group` tokens in the proper order. The key pattern - can include delimiting markers or punctuation, as long as they are - suppressed, thereby leaving the significant key text. The value - pattern can include named results, so that the :class:`Dict` results - can include named token fields. - - Example:: - - text = "shape: SQUARE posn: upper left color: light blue texture: burlap" - attr_expr = (label + Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join)) - print(OneOrMore(attr_expr).parseString(text).dump()) - - attr_label = label - attr_value = Suppress(':') + OneOrMore(data_word, stopOn=label).setParseAction(' '.join) - - # similar to Dict, but simpler call format - result = dictOf(attr_label, attr_value).parseString(text) - print(result.dump()) - print(result['shape']) - print(result.shape) # object attribute access works too - print(result.asDict()) - - prints:: - - [['shape', 'SQUARE'], ['posn', 'upper left'], ['color', 'light blue'], ['texture', 'burlap']] - - color: light blue - - posn: upper left - - shape: SQUARE - - texture: burlap - SQUARE - SQUARE - {'color': 'light blue', 'shape': 'SQUARE', 'posn': 'upper left', 'texture': 'burlap'} - """ - return Dict(OneOrMore(Group(key + value))) - -def originalTextFor(expr, asString=True): - """Helper to return the original, untokenized text for a given - expression. Useful to restore the parsed fields of an HTML start - tag into the raw tag text itself, or to revert separate tokens with - intervening whitespace back to the original matching input text. By - default, returns astring containing the original parsed text. - - If the optional ``asString`` argument is passed as - ``False``, then the return value is - a :class:`ParseResults` containing any results names that - were originally matched, and a single token containing the original - matched text from the input string. So if the expression passed to - :class:`originalTextFor` contains expressions with defined - results names, you must set ``asString`` to ``False`` if you - want to preserve those results name values. - - Example:: - - src = "this is test bold text normal text " - for tag in ("b", "i"): - opener, closer = makeHTMLTags(tag) - patt = originalTextFor(opener + SkipTo(closer) + closer) - print(patt.searchString(src)[0]) - - prints:: - - [' bold text '] - ['text'] - """ - locMarker = Empty().setParseAction(lambda s, loc, t: loc) - endlocMarker = locMarker.copy() - endlocMarker.callPreparse = False - matchExpr = locMarker("_original_start") + expr + endlocMarker("_original_end") - if asString: - extractText = lambda s, l, t: s[t._original_start: t._original_end] - else: - def extractText(s, l, t): - t[:] = [s[t.pop('_original_start'):t.pop('_original_end')]] - matchExpr.setParseAction(extractText) - matchExpr.ignoreExprs = expr.ignoreExprs - return matchExpr - -def ungroup(expr): - """Helper to undo pyparsing's default grouping of And expressions, - even if all but one are non-empty. - """ - return TokenConverter(expr).addParseAction(lambda t: t[0]) - -def locatedExpr(expr): - """Helper to decorate a returned token with its starting and ending - locations in the input string. - - This helper adds the following results names: - - - locn_start = location where matched expression begins - - locn_end = location where matched expression ends - - value = the actual parsed results - - Be careful if the input text contains ```` characters, you - may want to call :class:`ParserElement.parseWithTabs` - - Example:: - - wd = Word(alphas) - for match in locatedExpr(wd).searchString("ljsdf123lksdjjf123lkkjj1222"): - print(match) - - prints:: - - [[0, 'ljsdf', 5]] - [[8, 'lksdjjf', 15]] - [[18, 'lkkjj', 23]] - """ - locator = Empty().setParseAction(lambda s, l, t: l) - return Group(locator("locn_start") + expr("value") + locator.copy().leaveWhitespace()("locn_end")) - - -# convenience constants for positional expressions -empty = Empty().setName("empty") -lineStart = LineStart().setName("lineStart") -lineEnd = LineEnd().setName("lineEnd") -stringStart = StringStart().setName("stringStart") -stringEnd = StringEnd().setName("stringEnd") - -_escapedPunc = Word(_bslash, r"\[]-*.$+^?()~ ", exact=2).setParseAction(lambda s, l, t: t[0][1]) -_escapedHexChar = Regex(r"\\0?[xX][0-9a-fA-F]+").setParseAction(lambda s, l, t: unichr(int(t[0].lstrip(r'\0x'), 16))) -_escapedOctChar = Regex(r"\\0[0-7]+").setParseAction(lambda s, l, t: unichr(int(t[0][1:], 8))) -_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | CharsNotIn(r'\]', exact=1) -_charRange = Group(_singleChar + Suppress("-") + _singleChar) -_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group(OneOrMore(_charRange | _singleChar)).setResultsName("body") + "]" - -def srange(s): - r"""Helper to easily define string ranges for use in Word - construction. Borrows syntax from regexp '[]' string range - definitions:: - - srange("[0-9]") -> "0123456789" - srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" - srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" - - The input string must be enclosed in []'s, and the returned string - is the expanded character set joined into a single string. The - values enclosed in the []'s may be: - - - a single character - - an escaped character with a leading backslash (such as ``\-`` - or ``\]``) - - an escaped hex character with a leading ``'\x'`` - (``\x21``, which is a ``'!'`` character) (``\0x##`` - is also supported for backwards compatibility) - - an escaped octal character with a leading ``'\0'`` - (``\041``, which is a ``'!'`` character) - - a range of any of the above, separated by a dash (``'a-z'``, - etc.) - - any combination of the above (``'aeiouy'``, - ``'a-zA-Z0-9_$'``, etc.) - """ - _expanded = lambda p: p if not isinstance(p, ParseResults) else ''.join(unichr(c) for c in range(ord(p[0]), ord(p[1]) + 1)) - try: - return "".join(_expanded(part) for part in _reBracketExpr.parseString(s).body) - except Exception: - return "" - -def matchOnlyAtCol(n): - """Helper method for defining parse actions that require matching at - a specific column in the input text. - """ - def verifyCol(strg, locn, toks): - if col(locn, strg) != n: - raise ParseException(strg, locn, "matched token not at column %d" % n) - return verifyCol - -def replaceWith(replStr): - """Helper method for common parse actions that simply return - a literal value. Especially useful when used with - :class:`transformString` (). - - Example:: - - num = Word(nums).setParseAction(lambda toks: int(toks[0])) - na = oneOf("N/A NA").setParseAction(replaceWith(math.nan)) - term = na | num - - OneOrMore(term).parseString("324 234 N/A 234") # -> [324, 234, nan, 234] - """ - return lambda s, l, t: [replStr] - -def removeQuotes(s, l, t): - """Helper parse action for removing quotation marks from parsed - quoted strings. - - Example:: - - # by default, quotation marks are included in parsed results - quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["'Now is the Winter of our Discontent'"] - - # use removeQuotes to strip quotation marks from parsed results - quotedString.setParseAction(removeQuotes) - quotedString.parseString("'Now is the Winter of our Discontent'") # -> ["Now is the Winter of our Discontent"] - """ - return t[0][1:-1] - -def tokenMap(func, *args): - """Helper to define a parse action by mapping a function to all - elements of a ParseResults list. If any additional args are passed, - they are forwarded to the given function as additional arguments - after the token, as in - ``hex_integer = Word(hexnums).setParseAction(tokenMap(int, 16))``, - which will convert the parsed data to an integer using base 16. - - Example (compare the last to example in :class:`ParserElement.transformString`:: - - hex_ints = OneOrMore(Word(hexnums)).setParseAction(tokenMap(int, 16)) - hex_ints.runTests(''' - 00 11 22 aa FF 0a 0d 1a - ''') - - upperword = Word(alphas).setParseAction(tokenMap(str.upper)) - OneOrMore(upperword).runTests(''' - my kingdom for a horse - ''') - - wd = Word(alphas).setParseAction(tokenMap(str.title)) - OneOrMore(wd).setParseAction(' '.join).runTests(''' - now is the winter of our discontent made glorious summer by this sun of york - ''') - - prints:: - - 00 11 22 aa FF 0a 0d 1a - [0, 17, 34, 170, 255, 10, 13, 26] - - my kingdom for a horse - ['MY', 'KINGDOM', 'FOR', 'A', 'HORSE'] - - now is the winter of our discontent made glorious summer by this sun of york - ['Now Is The Winter Of Our Discontent Made Glorious Summer By This Sun Of York'] - """ - def pa(s, l, t): - return [func(tokn, *args) for tokn in t] - - try: - func_name = getattr(func, '__name__', - getattr(func, '__class__').__name__) - except Exception: - func_name = str(func) - pa.__name__ = func_name - - return pa - -upcaseTokens = tokenMap(lambda t: _ustr(t).upper()) -"""(Deprecated) Helper parse action to convert tokens to upper case. -Deprecated in favor of :class:`pyparsing_common.upcaseTokens`""" - -downcaseTokens = tokenMap(lambda t: _ustr(t).lower()) -"""(Deprecated) Helper parse action to convert tokens to lower case. -Deprecated in favor of :class:`pyparsing_common.downcaseTokens`""" - -def _makeTags(tagStr, xml, - suppress_LT=Suppress("<"), - suppress_GT=Suppress(">")): - """Internal helper to construct opening and closing tag expressions, given a tag name""" - if isinstance(tagStr, basestring): - resname = tagStr - tagStr = Keyword(tagStr, caseless=not xml) - else: - resname = tagStr.name - - tagAttrName = Word(alphas, alphanums + "_-:") - if xml: - tagAttrValue = dblQuotedString.copy().setParseAction(removeQuotes) - openTag = (suppress_LT - + tagStr("tag") - + Dict(ZeroOrMore(Group(tagAttrName + Suppress("=") + tagAttrValue))) - + Optional("/", default=[False])("empty").setParseAction(lambda s, l, t: t[0] == '/') - + suppress_GT) - else: - tagAttrValue = quotedString.copy().setParseAction(removeQuotes) | Word(printables, excludeChars=">") - openTag = (suppress_LT - + tagStr("tag") - + Dict(ZeroOrMore(Group(tagAttrName.setParseAction(downcaseTokens) - + Optional(Suppress("=") + tagAttrValue)))) - + Optional("/", default=[False])("empty").setParseAction(lambda s, l, t: t[0] == '/') - + suppress_GT) - closeTag = Combine(_L("", adjacent=False) - - openTag.setName("<%s>" % resname) - # add start results name in parse action now that ungrouped names are not reported at two levels - openTag.addParseAction(lambda t: t.__setitem__("start" + "".join(resname.replace(":", " ").title().split()), t.copy())) - closeTag = closeTag("end" + "".join(resname.replace(":", " ").title().split())).setName("" % resname) - openTag.tag = resname - closeTag.tag = resname - openTag.tag_body = SkipTo(closeTag()) - return openTag, closeTag - -def makeHTMLTags(tagStr): - """Helper to construct opening and closing tag expressions for HTML, - given a tag name. Matches tags in either upper or lower case, - attributes with namespaces and with quoted or unquoted values. - - Example:: - - text = 'More info at the pyparsing wiki page' - # makeHTMLTags returns pyparsing expressions for the opening and - # closing tags as a 2-tuple - a, a_end = makeHTMLTags("A") - link_expr = a + SkipTo(a_end)("link_text") + a_end - - for link in link_expr.searchString(text): - # attributes in the tag (like "href" shown here) are - # also accessible as named results - print(link.link_text, '->', link.href) - - prints:: - - pyparsing -> https://github.com/pyparsing/pyparsing/wiki - """ - return _makeTags(tagStr, False) - -def makeXMLTags(tagStr): - """Helper to construct opening and closing tag expressions for XML, - given a tag name. Matches tags only in the given upper/lower case. - - Example: similar to :class:`makeHTMLTags` - """ - return _makeTags(tagStr, True) - -def withAttribute(*args, **attrDict): - """Helper to create a validating parse action to be used with start - tags created with :class:`makeXMLTags` or - :class:`makeHTMLTags`. Use ``withAttribute`` to qualify - a starting tag with a required attribute value, to avoid false - matches on common tags such as ```` or ``
``. - - Call ``withAttribute`` with a series of attribute names and - values. Specify the list of filter attributes names and values as: - - - keyword arguments, as in ``(align="right")``, or - - as an explicit dict with ``**`` operator, when an attribute - name is also a Python reserved word, as in ``**{"class":"Customer", "align":"right"}`` - - a list of name-value tuples, as in ``(("ns1:class", "Customer"), ("ns2:align", "right"))`` - - For attribute names with a namespace prefix, you must use the second - form. Attribute names are matched insensitive to upper/lower case. - - If just testing for ``class`` (with or without a namespace), use - :class:`withClass`. - - To verify that the attribute exists, but without specifying a value, - pass ``withAttribute.ANY_VALUE`` as the value. - - Example:: - - html = ''' -
- Some text -
1 4 0 1 0
-
1,3 2,3 1,1
-
this has no type
-
- - ''' - div,div_end = makeHTMLTags("div") - - # only match div tag having a type attribute with value "grid" - div_grid = div().setParseAction(withAttribute(type="grid")) - grid_expr = div_grid + SkipTo(div | div_end)("body") - for grid_header in grid_expr.searchString(html): - print(grid_header.body) - - # construct a match with any div tag having a type attribute, regardless of the value - div_any_type = div().setParseAction(withAttribute(type=withAttribute.ANY_VALUE)) - div_expr = div_any_type + SkipTo(div | div_end)("body") - for div_header in div_expr.searchString(html): - print(div_header.body) - - prints:: - - 1 4 0 1 0 - - 1 4 0 1 0 - 1,3 2,3 1,1 - """ - if args: - attrs = args[:] - else: - attrs = attrDict.items() - attrs = [(k, v) for k, v in attrs] - def pa(s, l, tokens): - for attrName, attrValue in attrs: - if attrName not in tokens: - raise ParseException(s, l, "no matching attribute " + attrName) - if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: - raise ParseException(s, l, "attribute '%s' has value '%s', must be '%s'" % - (attrName, tokens[attrName], attrValue)) - return pa -withAttribute.ANY_VALUE = object() - -def withClass(classname, namespace=''): - """Simplified version of :class:`withAttribute` when - matching on a div class - made difficult because ``class`` is - a reserved word in Python. - - Example:: - - html = ''' -
- Some text -
1 4 0 1 0
-
1,3 2,3 1,1
-
this <div> has no class
-
- - ''' - div,div_end = makeHTMLTags("div") - div_grid = div().setParseAction(withClass("grid")) - - grid_expr = div_grid + SkipTo(div | div_end)("body") - for grid_header in grid_expr.searchString(html): - print(grid_header.body) - - div_any_type = div().setParseAction(withClass(withAttribute.ANY_VALUE)) - div_expr = div_any_type + SkipTo(div | div_end)("body") - for div_header in div_expr.searchString(html): - print(div_header.body) - - prints:: - - 1 4 0 1 0 - - 1 4 0 1 0 - 1,3 2,3 1,1 - """ - classattr = "%s:class" % namespace if namespace else "class" - return withAttribute(**{classattr: classname}) - -opAssoc = SimpleNamespace() -opAssoc.LEFT = object() -opAssoc.RIGHT = object() - -def infixNotation(baseExpr, opList, lpar=Suppress('('), rpar=Suppress(')')): - """Helper method for constructing grammars of expressions made up of - operators working in a precedence hierarchy. Operators may be unary - or binary, left- or right-associative. Parse actions can also be - attached to operator expressions. The generated parser will also - recognize the use of parentheses to override operator precedences - (see example below). - - Note: if you define a deep operator list, you may see performance - issues when using infixNotation. See - :class:`ParserElement.enablePackrat` for a mechanism to potentially - improve your parser performance. - - Parameters: - - baseExpr - expression representing the most basic element for the - nested - - opList - list of tuples, one for each operator precedence level - in the expression grammar; each tuple is of the form ``(opExpr, - numTerms, rightLeftAssoc, parseAction)``, where: - - - opExpr is the pyparsing expression for the operator; may also - be a string, which will be converted to a Literal; if numTerms - is 3, opExpr is a tuple of two expressions, for the two - operators separating the 3 terms - - numTerms is the number of terms for this operator (must be 1, - 2, or 3) - - rightLeftAssoc is the indicator whether the operator is right - or left associative, using the pyparsing-defined constants - ``opAssoc.RIGHT`` and ``opAssoc.LEFT``. - - parseAction is the parse action to be associated with - expressions matching this operator expression (the parse action - tuple member may be omitted); if the parse action is passed - a tuple or list of functions, this is equivalent to calling - ``setParseAction(*fn)`` - (:class:`ParserElement.setParseAction`) - - lpar - expression for matching left-parentheses - (default= ``Suppress('(')``) - - rpar - expression for matching right-parentheses - (default= ``Suppress(')')``) - - Example:: - - # simple example of four-function arithmetic with ints and - # variable names - integer = pyparsing_common.signed_integer - varname = pyparsing_common.identifier - - arith_expr = infixNotation(integer | varname, - [ - ('-', 1, opAssoc.RIGHT), - (oneOf('* /'), 2, opAssoc.LEFT), - (oneOf('+ -'), 2, opAssoc.LEFT), - ]) - - arith_expr.runTests(''' - 5+3*6 - (5+3)*6 - -2--11 - ''', fullDump=False) - - prints:: - - 5+3*6 - [[5, '+', [3, '*', 6]]] - - (5+3)*6 - [[[5, '+', 3], '*', 6]] - - -2--11 - [[['-', 2], '-', ['-', 11]]] - """ - # captive version of FollowedBy that does not do parse actions or capture results names - class _FB(FollowedBy): - def parseImpl(self, instring, loc, doActions=True): - self.expr.tryParse(instring, loc) - return loc, [] - - ret = Forward() - lastExpr = baseExpr | (lpar + ret + rpar) - for i, operDef in enumerate(opList): - opExpr, arity, rightLeftAssoc, pa = (operDef + (None, ))[:4] - termName = "%s term" % opExpr if arity < 3 else "%s%s term" % opExpr - if arity == 3: - if opExpr is None or len(opExpr) != 2: - raise ValueError( - "if numterms=3, opExpr must be a tuple or list of two expressions") - opExpr1, opExpr2 = opExpr - thisExpr = Forward().setName(termName) - if rightLeftAssoc == opAssoc.LEFT: - if arity == 1: - matchExpr = _FB(lastExpr + opExpr) + Group(lastExpr + OneOrMore(opExpr)) - elif arity == 2: - if opExpr is not None: - matchExpr = _FB(lastExpr + opExpr + lastExpr) + Group(lastExpr + OneOrMore(opExpr + lastExpr)) - else: - matchExpr = _FB(lastExpr + lastExpr) + Group(lastExpr + OneOrMore(lastExpr)) - elif arity == 3: - matchExpr = (_FB(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) - + Group(lastExpr + OneOrMore(opExpr1 + lastExpr + opExpr2 + lastExpr))) - else: - raise ValueError("operator must be unary (1), binary (2), or ternary (3)") - elif rightLeftAssoc == opAssoc.RIGHT: - if arity == 1: - # try to avoid LR with this extra test - if not isinstance(opExpr, Optional): - opExpr = Optional(opExpr) - matchExpr = _FB(opExpr.expr + thisExpr) + Group(opExpr + thisExpr) - elif arity == 2: - if opExpr is not None: - matchExpr = _FB(lastExpr + opExpr + thisExpr) + Group(lastExpr + OneOrMore(opExpr + thisExpr)) - else: - matchExpr = _FB(lastExpr + thisExpr) + Group(lastExpr + OneOrMore(thisExpr)) - elif arity == 3: - matchExpr = (_FB(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) - + Group(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr)) - else: - raise ValueError("operator must be unary (1), binary (2), or ternary (3)") - else: - raise ValueError("operator must indicate right or left associativity") - if pa: - if isinstance(pa, (tuple, list)): - matchExpr.setParseAction(*pa) - else: - matchExpr.setParseAction(pa) - thisExpr <<= (matchExpr.setName(termName) | lastExpr) - lastExpr = thisExpr - ret <<= lastExpr - return ret - -operatorPrecedence = infixNotation -"""(Deprecated) Former name of :class:`infixNotation`, will be -dropped in a future release.""" - -dblQuotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*') + '"').setName("string enclosed in double quotes") -sglQuotedString = Combine(Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*") + "'").setName("string enclosed in single quotes") -quotedString = Combine(Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*') + '"' - | Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\(?:[^x]|x[0-9a-fA-F]+)))*") + "'").setName("quotedString using single or double quotes") -unicodeString = Combine(_L('u') + quotedString.copy()).setName("unicode string literal") - -def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString.copy()): - """Helper method for defining nested lists enclosed in opening and - closing delimiters ("(" and ")" are the default). - - Parameters: - - opener - opening character for a nested list - (default= ``"("``); can also be a pyparsing expression - - closer - closing character for a nested list - (default= ``")"``); can also be a pyparsing expression - - content - expression for items within the nested lists - (default= ``None``) - - ignoreExpr - expression for ignoring opening and closing - delimiters (default= :class:`quotedString`) - - If an expression is not provided for the content argument, the - nested expression will capture all whitespace-delimited content - between delimiters as a list of separate values. - - Use the ``ignoreExpr`` argument to define expressions that may - contain opening or closing characters that should not be treated as - opening or closing characters for nesting, such as quotedString or - a comment expression. Specify multiple expressions using an - :class:`Or` or :class:`MatchFirst`. The default is - :class:`quotedString`, but if no expressions are to be ignored, then - pass ``None`` for this argument. - - Example:: - - data_type = oneOf("void int short long char float double") - decl_data_type = Combine(data_type + Optional(Word('*'))) - ident = Word(alphas+'_', alphanums+'_') - number = pyparsing_common.number - arg = Group(decl_data_type + ident) - LPAR, RPAR = map(Suppress, "()") - - code_body = nestedExpr('{', '}', ignoreExpr=(quotedString | cStyleComment)) - - c_function = (decl_data_type("type") - + ident("name") - + LPAR + Optional(delimitedList(arg), [])("args") + RPAR - + code_body("body")) - c_function.ignore(cStyleComment) - - source_code = ''' - int is_odd(int x) { - return (x%2); - } - - int dec_to_hex(char hchar) { - if (hchar >= '0' && hchar <= '9') { - return (ord(hchar)-ord('0')); - } else { - return (10+ord(hchar)-ord('A')); - } - } - ''' - for func in c_function.searchString(source_code): - print("%(name)s (%(type)s) args: %(args)s" % func) - - - prints:: - - is_odd (int) args: [['int', 'x']] - dec_to_hex (int) args: [['char', 'hchar']] - """ - if opener == closer: - raise ValueError("opening and closing strings cannot be the same") - if content is None: - if isinstance(opener, basestring) and isinstance(closer, basestring): - if len(opener) == 1 and len(closer) == 1: - if ignoreExpr is not None: - content = (Combine(OneOrMore(~ignoreExpr - + CharsNotIn(opener - + closer - + ParserElement.DEFAULT_WHITE_CHARS, exact=1) - ) - ).setParseAction(lambda t: t[0].strip())) - else: - content = (empty.copy() + CharsNotIn(opener - + closer - + ParserElement.DEFAULT_WHITE_CHARS - ).setParseAction(lambda t: t[0].strip())) - else: - if ignoreExpr is not None: - content = (Combine(OneOrMore(~ignoreExpr - + ~Literal(opener) - + ~Literal(closer) - + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS, exact=1)) - ).setParseAction(lambda t: t[0].strip())) - else: - content = (Combine(OneOrMore(~Literal(opener) - + ~Literal(closer) - + CharsNotIn(ParserElement.DEFAULT_WHITE_CHARS, exact=1)) - ).setParseAction(lambda t: t[0].strip())) - else: - raise ValueError("opening and closing arguments must be strings if no content expression is given") - ret = Forward() - if ignoreExpr is not None: - ret <<= Group(Suppress(opener) + ZeroOrMore(ignoreExpr | ret | content) + Suppress(closer)) - else: - ret <<= Group(Suppress(opener) + ZeroOrMore(ret | content) + Suppress(closer)) - ret.setName('nested %s%s expression' % (opener, closer)) - return ret - -def indentedBlock(blockStatementExpr, indentStack, indent=True): - """Helper method for defining space-delimited indentation blocks, - such as those used to define block statements in Python source code. - - Parameters: - - - blockStatementExpr - expression defining syntax of statement that - is repeated within the indented block - - indentStack - list created by caller to manage indentation stack - (multiple statementWithIndentedBlock expressions within a single - grammar should share a common indentStack) - - indent - boolean indicating whether block must be indented beyond - the current level; set to False for block of left-most - statements (default= ``True``) - - A valid block must contain at least one ``blockStatement``. - - Example:: - - data = ''' - def A(z): - A1 - B = 100 - G = A2 - A2 - A3 - B - def BB(a,b,c): - BB1 - def BBA(): - bba1 - bba2 - bba3 - C - D - def spam(x,y): - def eggs(z): - pass - ''' - - - indentStack = [1] - stmt = Forward() - - identifier = Word(alphas, alphanums) - funcDecl = ("def" + identifier + Group("(" + Optional(delimitedList(identifier)) + ")") + ":") - func_body = indentedBlock(stmt, indentStack) - funcDef = Group(funcDecl + func_body) - - rvalue = Forward() - funcCall = Group(identifier + "(" + Optional(delimitedList(rvalue)) + ")") - rvalue << (funcCall | identifier | Word(nums)) - assignment = Group(identifier + "=" + rvalue) - stmt << (funcDef | assignment | identifier) - - module_body = OneOrMore(stmt) - - parseTree = module_body.parseString(data) - parseTree.pprint() - - prints:: - - [['def', - 'A', - ['(', 'z', ')'], - ':', - [['A1'], [['B', '=', '100']], [['G', '=', 'A2']], ['A2'], ['A3']]], - 'B', - ['def', - 'BB', - ['(', 'a', 'b', 'c', ')'], - ':', - [['BB1'], [['def', 'BBA', ['(', ')'], ':', [['bba1'], ['bba2'], ['bba3']]]]]], - 'C', - 'D', - ['def', - 'spam', - ['(', 'x', 'y', ')'], - ':', - [[['def', 'eggs', ['(', 'z', ')'], ':', [['pass']]]]]]] - """ - backup_stack = indentStack[:] - - def reset_stack(): - indentStack[:] = backup_stack - - def checkPeerIndent(s, l, t): - if l >= len(s): return - curCol = col(l, s) - if curCol != indentStack[-1]: - if curCol > indentStack[-1]: - raise ParseException(s, l, "illegal nesting") - raise ParseException(s, l, "not a peer entry") - - def checkSubIndent(s, l, t): - curCol = col(l, s) - if curCol > indentStack[-1]: - indentStack.append(curCol) - else: - raise ParseException(s, l, "not a subentry") - - def checkUnindent(s, l, t): - if l >= len(s): return - curCol = col(l, s) - if not(indentStack and curCol in indentStack): - raise ParseException(s, l, "not an unindent") - if curCol < indentStack[-1]: - indentStack.pop() - - NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress(), stopOn=StringEnd()) - INDENT = (Empty() + Empty().setParseAction(checkSubIndent)).setName('INDENT') - PEER = Empty().setParseAction(checkPeerIndent).setName('') - UNDENT = Empty().setParseAction(checkUnindent).setName('UNINDENT') - if indent: - smExpr = Group(Optional(NL) - + INDENT - + OneOrMore(PEER + Group(blockStatementExpr) + Optional(NL), stopOn=StringEnd()) - + UNDENT) - else: - smExpr = Group(Optional(NL) - + OneOrMore(PEER + Group(blockStatementExpr) + Optional(NL), stopOn=StringEnd()) - + UNDENT) - smExpr.setFailAction(lambda a, b, c, d: reset_stack()) - blockStatementExpr.ignore(_bslash + LineEnd()) - return smExpr.setName('indented block') - -alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") -punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") - -anyOpenTag, anyCloseTag = makeHTMLTags(Word(alphas, alphanums + "_:").setName('any tag')) -_htmlEntityMap = dict(zip("gt lt amp nbsp quot apos".split(), '><& "\'')) -commonHTMLEntity = Regex('&(?P' + '|'.join(_htmlEntityMap.keys()) +");").setName("common HTML entity") -def replaceHTMLEntity(t): - """Helper parser action to replace common HTML entities with their special characters""" - return _htmlEntityMap.get(t.entity) - -# it's easy to get these comment structures wrong - they're very common, so may as well make them available -cStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/').setName("C style comment") -"Comment of the form ``/* ... */``" - -htmlComment = Regex(r"").setName("HTML comment") -"Comment of the form ````" - -restOfLine = Regex(r".*").leaveWhitespace().setName("rest of line") -dblSlashComment = Regex(r"//(?:\\\n|[^\n])*").setName("// comment") -"Comment of the form ``// ... (to end of line)``" - -cppStyleComment = Combine(Regex(r"/\*(?:[^*]|\*(?!/))*") + '*/' | dblSlashComment).setName("C++ style comment") -"Comment of either form :class:`cStyleComment` or :class:`dblSlashComment`" - -javaStyleComment = cppStyleComment -"Same as :class:`cppStyleComment`" - -pythonStyleComment = Regex(r"#.*").setName("Python style comment") -"Comment of the form ``# ... (to end of line)``" - -_commasepitem = Combine(OneOrMore(Word(printables, excludeChars=',') - + Optional(Word(" \t") - + ~Literal(",") + ~LineEnd()))).streamline().setName("commaItem") -commaSeparatedList = delimitedList(Optional(quotedString.copy() | _commasepitem, default="")).setName("commaSeparatedList") -"""(Deprecated) Predefined expression of 1 or more printable words or -quoted strings, separated by commas. - -This expression is deprecated in favor of :class:`pyparsing_common.comma_separated_list`. -""" - -# some other useful expressions - using lower-case class name since we are really using this as a namespace -class pyparsing_common: - """Here are some common low-level expressions that may be useful in - jump-starting parser development: - - - numeric forms (:class:`integers`, :class:`reals`, - :class:`scientific notation`) - - common :class:`programming identifiers` - - network addresses (:class:`MAC`, - :class:`IPv4`, :class:`IPv6`) - - ISO8601 :class:`dates` and - :class:`datetime` - - :class:`UUID` - - :class:`comma-separated list` - - Parse actions: - - - :class:`convertToInteger` - - :class:`convertToFloat` - - :class:`convertToDate` - - :class:`convertToDatetime` - - :class:`stripHTMLTags` - - :class:`upcaseTokens` - - :class:`downcaseTokens` - - Example:: - - pyparsing_common.number.runTests(''' - # any int or real number, returned as the appropriate type - 100 - -100 - +100 - 3.14159 - 6.02e23 - 1e-12 - ''') - - pyparsing_common.fnumber.runTests(''' - # any int or real number, returned as float - 100 - -100 - +100 - 3.14159 - 6.02e23 - 1e-12 - ''') - - pyparsing_common.hex_integer.runTests(''' - # hex numbers - 100 - FF - ''') - - pyparsing_common.fraction.runTests(''' - # fractions - 1/2 - -3/4 - ''') - - pyparsing_common.mixed_integer.runTests(''' - # mixed fractions - 1 - 1/2 - -3/4 - 1-3/4 - ''') - - import uuid - pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) - pyparsing_common.uuid.runTests(''' - # uuid - 12345678-1234-5678-1234-567812345678 - ''') - - prints:: - - # any int or real number, returned as the appropriate type - 100 - [100] - - -100 - [-100] - - +100 - [100] - - 3.14159 - [3.14159] - - 6.02e23 - [6.02e+23] - - 1e-12 - [1e-12] - - # any int or real number, returned as float - 100 - [100.0] - - -100 - [-100.0] - - +100 - [100.0] - - 3.14159 - [3.14159] - - 6.02e23 - [6.02e+23] - - 1e-12 - [1e-12] - - # hex numbers - 100 - [256] - - FF - [255] - - # fractions - 1/2 - [0.5] - - -3/4 - [-0.75] - - # mixed fractions - 1 - [1] - - 1/2 - [0.5] - - -3/4 - [-0.75] - - 1-3/4 - [1.75] - - # uuid - 12345678-1234-5678-1234-567812345678 - [UUID('12345678-1234-5678-1234-567812345678')] - """ - - convertToInteger = tokenMap(int) - """ - Parse action for converting parsed integers to Python int - """ - - convertToFloat = tokenMap(float) - """ - Parse action for converting parsed numbers to Python float - """ - - integer = Word(nums).setName("integer").setParseAction(convertToInteger) - """expression that parses an unsigned integer, returns an int""" - - hex_integer = Word(hexnums).setName("hex integer").setParseAction(tokenMap(int, 16)) - """expression that parses a hexadecimal integer, returns an int""" - - signed_integer = Regex(r'[+-]?\d+').setName("signed integer").setParseAction(convertToInteger) - """expression that parses an integer with optional leading sign, returns an int""" - - fraction = (signed_integer().setParseAction(convertToFloat) + '/' + signed_integer().setParseAction(convertToFloat)).setName("fraction") - """fractional expression of an integer divided by an integer, returns a float""" - fraction.addParseAction(lambda t: t[0]/t[-1]) - - mixed_integer = (fraction | signed_integer + Optional(Optional('-').suppress() + fraction)).setName("fraction or mixed integer-fraction") - """mixed integer of the form 'integer - fraction', with optional leading integer, returns float""" - mixed_integer.addParseAction(sum) - - real = Regex(r'[+-]?(?:\d+\.\d*|\.\d+)').setName("real number").setParseAction(convertToFloat) - """expression that parses a floating point number and returns a float""" - - sci_real = Regex(r'[+-]?(?:\d+(?:[eE][+-]?\d+)|(?:\d+\.\d*|\.\d+)(?:[eE][+-]?\d+)?)').setName("real number with scientific notation").setParseAction(convertToFloat) - """expression that parses a floating point number with optional - scientific notation and returns a float""" - - # streamlining this expression makes the docs nicer-looking - number = (sci_real | real | signed_integer).streamline() - """any numeric expression, returns the corresponding Python type""" - - fnumber = Regex(r'[+-]?\d+\.?\d*([eE][+-]?\d+)?').setName("fnumber").setParseAction(convertToFloat) - """any int or real number, returned as float""" - - identifier = Word(alphas + '_', alphanums + '_').setName("identifier") - """typical code identifier (leading alpha or '_', followed by 0 or more alphas, nums, or '_')""" - - ipv4_address = Regex(r'(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})(\.(25[0-5]|2[0-4][0-9]|1?[0-9]{1,2})){3}').setName("IPv4 address") - "IPv4 address (``0.0.0.0 - 255.255.255.255``)" - - _ipv6_part = Regex(r'[0-9a-fA-F]{1,4}').setName("hex_integer") - _full_ipv6_address = (_ipv6_part + (':' + _ipv6_part) * 7).setName("full IPv6 address") - _short_ipv6_address = (Optional(_ipv6_part + (':' + _ipv6_part) * (0, 6)) - + "::" - + Optional(_ipv6_part + (':' + _ipv6_part) * (0, 6)) - ).setName("short IPv6 address") - _short_ipv6_address.addCondition(lambda t: sum(1 for tt in t if pyparsing_common._ipv6_part.matches(tt)) < 8) - _mixed_ipv6_address = ("::ffff:" + ipv4_address).setName("mixed IPv6 address") - ipv6_address = Combine((_full_ipv6_address | _mixed_ipv6_address | _short_ipv6_address).setName("IPv6 address")).setName("IPv6 address") - "IPv6 address (long, short, or mixed form)" - - mac_address = Regex(r'[0-9a-fA-F]{2}([:.-])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}').setName("MAC address") - "MAC address xx:xx:xx:xx:xx (may also have '-' or '.' delimiters)" - - @staticmethod - def convertToDate(fmt="%Y-%m-%d"): - """ - Helper to create a parse action for converting parsed date string to Python datetime.date - - Params - - - fmt - format to be passed to datetime.strptime (default= ``"%Y-%m-%d"``) - - Example:: - - date_expr = pyparsing_common.iso8601_date.copy() - date_expr.setParseAction(pyparsing_common.convertToDate()) - print(date_expr.parseString("1999-12-31")) - - prints:: - - [datetime.date(1999, 12, 31)] - """ - def cvt_fn(s, l, t): - try: - return datetime.strptime(t[0], fmt).date() - except ValueError as ve: - raise ParseException(s, l, str(ve)) - return cvt_fn - - @staticmethod - def convertToDatetime(fmt="%Y-%m-%dT%H:%M:%S.%f"): - """Helper to create a parse action for converting parsed - datetime string to Python datetime.datetime - - Params - - - fmt - format to be passed to datetime.strptime (default= ``"%Y-%m-%dT%H:%M:%S.%f"``) - - Example:: - - dt_expr = pyparsing_common.iso8601_datetime.copy() - dt_expr.setParseAction(pyparsing_common.convertToDatetime()) - print(dt_expr.parseString("1999-12-31T23:59:59.999")) - - prints:: - - [datetime.datetime(1999, 12, 31, 23, 59, 59, 999000)] - """ - def cvt_fn(s, l, t): - try: - return datetime.strptime(t[0], fmt) - except ValueError as ve: - raise ParseException(s, l, str(ve)) - return cvt_fn - - iso8601_date = Regex(r'(?P\d{4})(?:-(?P\d\d)(?:-(?P\d\d))?)?').setName("ISO8601 date") - "ISO8601 date (``yyyy-mm-dd``)" - - iso8601_datetime = Regex(r'(?P\d{4})-(?P\d\d)-(?P\d\d)[T ](?P\d\d):(?P\d\d)(:(?P\d\d(\.\d*)?)?)?(?PZ|[+-]\d\d:?\d\d)?').setName("ISO8601 datetime") - "ISO8601 datetime (``yyyy-mm-ddThh:mm:ss.s(Z|+-00:00)``) - trailing seconds, milliseconds, and timezone optional; accepts separating ``'T'`` or ``' '``" - - uuid = Regex(r'[0-9a-fA-F]{8}(-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}').setName("UUID") - "UUID (``xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx``)" - - _html_stripper = anyOpenTag.suppress() | anyCloseTag.suppress() - @staticmethod - def stripHTMLTags(s, l, tokens): - """Parse action to remove HTML tags from web page HTML source - - Example:: - - # strip HTML links from normal text - text = 'More info at the
pyparsing wiki page' - td, td_end = makeHTMLTags("TD") - table_text = td + SkipTo(td_end).setParseAction(pyparsing_common.stripHTMLTags)("body") + td_end - print(table_text.parseString(text).body) - - Prints:: - - More info at the pyparsing wiki page - """ - return pyparsing_common._html_stripper.transformString(tokens[0]) - - _commasepitem = Combine(OneOrMore(~Literal(",") - + ~LineEnd() - + Word(printables, excludeChars=',') - + Optional(White(" \t")))).streamline().setName("commaItem") - comma_separated_list = delimitedList(Optional(quotedString.copy() - | _commasepitem, default='') - ).setName("comma separated list") - """Predefined expression of 1 or more printable words or quoted strings, separated by commas.""" - - upcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).upper())) - """Parse action to convert tokens to upper case.""" - - downcaseTokens = staticmethod(tokenMap(lambda t: _ustr(t).lower())) - """Parse action to convert tokens to lower case.""" - - -class _lazyclassproperty(object): - def __init__(self, fn): - self.fn = fn - self.__doc__ = fn.__doc__ - self.__name__ = fn.__name__ - - def __get__(self, obj, cls): - if cls is None: - cls = type(obj) - if not hasattr(cls, '_intern') or any(cls._intern is getattr(superclass, '_intern', []) - for superclass in cls.__mro__[1:]): - cls._intern = {} - attrname = self.fn.__name__ - if attrname not in cls._intern: - cls._intern[attrname] = self.fn(cls) - return cls._intern[attrname] - - -class unicode_set(object): - """ - A set of Unicode characters, for language-specific strings for - ``alphas``, ``nums``, ``alphanums``, and ``printables``. - A unicode_set is defined by a list of ranges in the Unicode character - set, in a class attribute ``_ranges``, such as:: - - _ranges = [(0x0020, 0x007e), (0x00a0, 0x00ff),] - - A unicode set can also be defined using multiple inheritance of other unicode sets:: - - class CJK(Chinese, Japanese, Korean): - pass - """ - _ranges = [] - - @classmethod - def _get_chars_for_ranges(cls): - ret = [] - for cc in cls.__mro__: - if cc is unicode_set: - break - for rr in cc._ranges: - ret.extend(range(rr[0], rr[-1] + 1)) - return [unichr(c) for c in sorted(set(ret))] - - @_lazyclassproperty - def printables(cls): - "all non-whitespace characters in this range" - return u''.join(filterfalse(unicode.isspace, cls._get_chars_for_ranges())) - - @_lazyclassproperty - def alphas(cls): - "all alphabetic characters in this range" - return u''.join(filter(unicode.isalpha, cls._get_chars_for_ranges())) - - @_lazyclassproperty - def nums(cls): - "all numeric digit characters in this range" - return u''.join(filter(unicode.isdigit, cls._get_chars_for_ranges())) - - @_lazyclassproperty - def alphanums(cls): - "all alphanumeric characters in this range" - return cls.alphas + cls.nums - - -class pyparsing_unicode(unicode_set): - """ - A namespace class for defining common language unicode_sets. - """ - _ranges = [(32, sys.maxunicode)] - - class Latin1(unicode_set): - "Unicode set for Latin-1 Unicode Character Range" - _ranges = [(0x0020, 0x007e), (0x00a0, 0x00ff),] - - class LatinA(unicode_set): - "Unicode set for Latin-A Unicode Character Range" - _ranges = [(0x0100, 0x017f),] - - class LatinB(unicode_set): - "Unicode set for Latin-B Unicode Character Range" - _ranges = [(0x0180, 0x024f),] - - class Greek(unicode_set): - "Unicode set for Greek Unicode Character Ranges" - _ranges = [ - (0x0370, 0x03ff), (0x1f00, 0x1f15), (0x1f18, 0x1f1d), (0x1f20, 0x1f45), (0x1f48, 0x1f4d), - (0x1f50, 0x1f57), (0x1f59,), (0x1f5b,), (0x1f5d,), (0x1f5f, 0x1f7d), (0x1f80, 0x1fb4), (0x1fb6, 0x1fc4), - (0x1fc6, 0x1fd3), (0x1fd6, 0x1fdb), (0x1fdd, 0x1fef), (0x1ff2, 0x1ff4), (0x1ff6, 0x1ffe), - ] - - class Cyrillic(unicode_set): - "Unicode set for Cyrillic Unicode Character Range" - _ranges = [(0x0400, 0x04ff)] - - class Chinese(unicode_set): - "Unicode set for Chinese Unicode Character Range" - _ranges = [(0x4e00, 0x9fff), (0x3000, 0x303f),] - - class Japanese(unicode_set): - "Unicode set for Japanese Unicode Character Range, combining Kanji, Hiragana, and Katakana ranges" - _ranges = [] - - class Kanji(unicode_set): - "Unicode set for Kanji Unicode Character Range" - _ranges = [(0x4E00, 0x9Fbf), (0x3000, 0x303f),] - - class Hiragana(unicode_set): - "Unicode set for Hiragana Unicode Character Range" - _ranges = [(0x3040, 0x309f),] - - class Katakana(unicode_set): - "Unicode set for Katakana Unicode Character Range" - _ranges = [(0x30a0, 0x30ff),] - - class Korean(unicode_set): - "Unicode set for Korean Unicode Character Range" - _ranges = [(0xac00, 0xd7af), (0x1100, 0x11ff), (0x3130, 0x318f), (0xa960, 0xa97f), (0xd7b0, 0xd7ff), (0x3000, 0x303f),] - - class CJK(Chinese, Japanese, Korean): - "Unicode set for combined Chinese, Japanese, and Korean (CJK) Unicode Character Range" - pass - - class Thai(unicode_set): - "Unicode set for Thai Unicode Character Range" - _ranges = [(0x0e01, 0x0e3a), (0x0e3f, 0x0e5b),] - - class Arabic(unicode_set): - "Unicode set for Arabic Unicode Character Range" - _ranges = [(0x0600, 0x061b), (0x061e, 0x06ff), (0x0700, 0x077f),] - - class Hebrew(unicode_set): - "Unicode set for Hebrew Unicode Character Range" - _ranges = [(0x0590, 0x05ff),] - - class Devanagari(unicode_set): - "Unicode set for Devanagari Unicode Character Range" - _ranges = [(0x0900, 0x097f), (0xa8e0, 0xa8ff)] - -pyparsing_unicode.Japanese._ranges = (pyparsing_unicode.Japanese.Kanji._ranges - + pyparsing_unicode.Japanese.Hiragana._ranges - + pyparsing_unicode.Japanese.Katakana._ranges) - -# define ranges in language character sets -if PY_3: - setattr(pyparsing_unicode, u"العربية", pyparsing_unicode.Arabic) - setattr(pyparsing_unicode, u"中文", pyparsing_unicode.Chinese) - setattr(pyparsing_unicode, u"кириллица", pyparsing_unicode.Cyrillic) - setattr(pyparsing_unicode, u"Ελληνικά", pyparsing_unicode.Greek) - setattr(pyparsing_unicode, u"עִברִית", pyparsing_unicode.Hebrew) - setattr(pyparsing_unicode, u"日本語", pyparsing_unicode.Japanese) - setattr(pyparsing_unicode.Japanese, u"漢字", pyparsing_unicode.Japanese.Kanji) - setattr(pyparsing_unicode.Japanese, u"カタカナ", pyparsing_unicode.Japanese.Katakana) - setattr(pyparsing_unicode.Japanese, u"ひらがな", pyparsing_unicode.Japanese.Hiragana) - setattr(pyparsing_unicode, u"한국어", pyparsing_unicode.Korean) - setattr(pyparsing_unicode, u"ไทย", pyparsing_unicode.Thai) - setattr(pyparsing_unicode, u"देवनागरी", pyparsing_unicode.Devanagari) - - -class pyparsing_test: - """ - namespace class for classes useful in writing unit tests - """ - - class reset_pyparsing_context: - """ - Context manager to be used when writing unit tests that modify pyparsing config values: - - packrat parsing - - default whitespace characters. - - default keyword characters - - literal string auto-conversion class - - __diag__ settings - - Example: - with reset_pyparsing_context(): - # test that literals used to construct a grammar are automatically suppressed - ParserElement.inlineLiteralsUsing(Suppress) - - term = Word(alphas) | Word(nums) - group = Group('(' + term[...] + ')') - - # assert that the '()' characters are not included in the parsed tokens - self.assertParseAndCheckLisst(group, "(abc 123 def)", ['abc', '123', 'def']) - - # after exiting context manager, literals are converted to Literal expressions again - """ - - def __init__(self): - self._save_context = {} - - def save(self): - self._save_context["default_whitespace"] = ParserElement.DEFAULT_WHITE_CHARS - self._save_context["default_keyword_chars"] = Keyword.DEFAULT_KEYWORD_CHARS - self._save_context[ - "literal_string_class" - ] = ParserElement._literalStringClass - self._save_context["packrat_enabled"] = ParserElement._packratEnabled - self._save_context["packrat_parse"] = ParserElement._parse - self._save_context["__diag__"] = { - name: getattr(__diag__, name) for name in __diag__._all_names - } - self._save_context["__compat__"] = { - "collect_all_And_tokens": __compat__.collect_all_And_tokens - } - return self - - def restore(self): - # reset pyparsing global state - if ( - ParserElement.DEFAULT_WHITE_CHARS - != self._save_context["default_whitespace"] - ): - ParserElement.setDefaultWhitespaceChars( - self._save_context["default_whitespace"] - ) - Keyword.DEFAULT_KEYWORD_CHARS = self._save_context["default_keyword_chars"] - ParserElement.inlineLiteralsUsing( - self._save_context["literal_string_class"] - ) - for name, value in self._save_context["__diag__"].items(): - setattr(__diag__, name, value) - ParserElement._packratEnabled = self._save_context["packrat_enabled"] - ParserElement._parse = self._save_context["packrat_parse"] - __compat__.collect_all_And_tokens = self._save_context["__compat__"] - - def __enter__(self): - return self.save() - - def __exit__(self, *args): - return self.restore() - - class TestParseResultsAsserts: - """ - A mixin class to add parse results assertion methods to normal unittest.TestCase classes. - """ - def assertParseResultsEquals( - self, result, expected_list=None, expected_dict=None, msg=None - ): - """ - Unit test assertion to compare a ParseResults object with an optional expected_list, - and compare any defined results names with an optional expected_dict. - """ - if expected_list is not None: - self.assertEqual(expected_list, result.asList(), msg=msg) - if expected_dict is not None: - self.assertEqual(expected_dict, result.asDict(), msg=msg) - - def assertParseAndCheckList( - self, expr, test_string, expected_list, msg=None, verbose=True - ): - """ - Convenience wrapper assert to test a parser element and input string, and assert that - the resulting ParseResults.asList() is equal to the expected_list. - """ - result = expr.parseString(test_string, parseAll=True) - if verbose: - print(result.dump()) - self.assertParseResultsEquals(result, expected_list=expected_list, msg=msg) - - def assertParseAndCheckDict( - self, expr, test_string, expected_dict, msg=None, verbose=True - ): - """ - Convenience wrapper assert to test a parser element and input string, and assert that - the resulting ParseResults.asDict() is equal to the expected_dict. - """ - result = expr.parseString(test_string, parseAll=True) - if verbose: - print(result.dump()) - self.assertParseResultsEquals(result, expected_dict=expected_dict, msg=msg) - - def assertRunTestResults( - self, run_tests_report, expected_parse_results=None, msg=None - ): - """ - Unit test assertion to evaluate output of ParserElement.runTests(). If a list of - list-dict tuples is given as the expected_parse_results argument, then these are zipped - with the report tuples returned by runTests and evaluated using assertParseResultsEquals. - Finally, asserts that the overall runTests() success value is True. - - :param run_tests_report: tuple(bool, [tuple(str, ParseResults or Exception)]) returned from runTests - :param expected_parse_results (optional): [tuple(str, list, dict, Exception)] - """ - run_test_success, run_test_results = run_tests_report - - if expected_parse_results is not None: - merged = [ - (rpt[0], rpt[1], expected) - for rpt, expected in zip(run_test_results, expected_parse_results) - ] - for test_string, result, expected in merged: - # expected should be a tuple containing a list and/or a dict or an exception, - # and optional failure message string - # an empty tuple will skip any result validation - fail_msg = next( - (exp for exp in expected if isinstance(exp, str)), None - ) - expected_exception = next( - ( - exp - for exp in expected - if isinstance(exp, type) and issubclass(exp, Exception) - ), - None, - ) - if expected_exception is not None: - with self.assertRaises( - expected_exception=expected_exception, msg=fail_msg or msg - ): - if isinstance(result, Exception): - raise result - else: - expected_list = next( - (exp for exp in expected if isinstance(exp, list)), None - ) - expected_dict = next( - (exp for exp in expected if isinstance(exp, dict)), None - ) - if (expected_list, expected_dict) != (None, None): - self.assertParseResultsEquals( - result, - expected_list=expected_list, - expected_dict=expected_dict, - msg=fail_msg or msg, - ) - else: - # warning here maybe? - print("no validation for {!r}".format(test_string)) - - # do this last, in case some specific test results can be reported instead - self.assertTrue( - run_test_success, msg=msg if msg is not None else "failed runTests" - ) - - @contextmanager - def assertRaisesParseException(self, exc_type=ParseException, msg=None): - with self.assertRaises(exc_type, msg=msg): - yield - - -if __name__ == "__main__": - - selectToken = CaselessLiteral("select") - fromToken = CaselessLiteral("from") - - ident = Word(alphas, alphanums + "_$") - - columnName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) - columnNameList = Group(delimitedList(columnName)).setName("columns") - columnSpec = ('*' | columnNameList) - - tableName = delimitedList(ident, ".", combine=True).setParseAction(upcaseTokens) - tableNameList = Group(delimitedList(tableName)).setName("tables") - - simpleSQL = selectToken("command") + columnSpec("columns") + fromToken + tableNameList("tables") - - # demo runTests method, including embedded comments in test string - simpleSQL.runTests(""" - # '*' as column list and dotted table name - select * from SYS.XYZZY - - # caseless match on "SELECT", and casts back to "select" - SELECT * from XYZZY, ABC - - # list of column names, and mixed case SELECT keyword - Select AA,BB,CC from Sys.dual - - # multiple tables - Select A, B, C from Sys.dual, Table2 - - # invalid SELECT keyword - should fail - Xelect A, B, C from Sys.dual - - # incomplete command - should fail - Select - - # invalid column name - should fail - Select ^^^ frox Sys.dual - - """) - - pyparsing_common.number.runTests(""" - 100 - -100 - +100 - 3.14159 - 6.02e23 - 1e-12 - """) - - # any int or real number, returned as float - pyparsing_common.fnumber.runTests(""" - 100 - -100 - +100 - 3.14159 - 6.02e23 - 1e-12 - """) - - pyparsing_common.hex_integer.runTests(""" - 100 - FF - """) - - import uuid - pyparsing_common.uuid.setParseAction(tokenMap(uuid.UUID)) - pyparsing_common.uuid.runTests(""" - 12345678-1234-5678-1234-567812345678 - """) diff --git a/shotgun_api3/lib/requirements.txt b/shotgun_api3/lib/requirements.txt deleted file mode 100644 index 34172e948..000000000 --- a/shotgun_api3/lib/requirements.txt +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2009-2019, Shotgun Software Inc. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# - Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# - Neither the name of the Shotgun Software Inc nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# This file is unused. It is left there so Github can warn us is a CVE is -# released for our dependencies. -httplib2==0.22.0 -six==1.13.0 -certifi==2024.7.4 -pyparsing==2.4.7 \ No newline at end of file diff --git a/shotgun_api3/lib/sgtimezone.py b/shotgun_api3/lib/sgtimezone.py deleted file mode 100644 index df0b73281..000000000 --- a/shotgun_api3/lib/sgtimezone.py +++ /dev/null @@ -1,113 +0,0 @@ -#! /opt/local/bin/python - -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -# ---------------------------------------------------------------------------- -# SG_TIMEZONE module -# this is rolled into the this shotgun api file to avoid having to require -# current users of api2 to install new modules and modify PYTHONPATH info. -# ---------------------------------------------------------------------------- - -from datetime import tzinfo, timedelta -import time as _time - - -class SgTimezone(object): - ''' - Shotgun's server infrastructure is configured for Coordinated Universal - Time (UTC). In order to provide relevant local timestamps to users, we wrap - the datetime module's tzinfo to provide convenient conversion methods. - ''' - - ZERO = timedelta(0) - STDOFFSET = timedelta(seconds=-_time.timezone) - if _time.daylight: - DSTOFFSET = timedelta(seconds=-_time.altzone) - else: - DSTOFFSET = STDOFFSET - DSTDIFF = DSTOFFSET - STDOFFSET - - def __init__(self): - self.utc = UTC() - self.local = LocalTimezone() - - @classmethod - def UTC(cls): - ''' - For backwards compatibility, from when UTC was a nested class, - we allow instantiation via SgTimezone - ''' - return UTC() - - @classmethod - def LocalTimezone(cls): - ''' - For backwards compatibility, from when LocalTimezone was a nested - class, we allow instantiation via SgTimezone - ''' - return LocalTimezone() - - -class UTC(tzinfo): - ''' - Implementation of datetime's tzinfo to provide consistent calculated - offsets against Coordinated Universal Time (UTC) - ''' - - def utcoffset(self, dt): - return SgTimezone.ZERO - - def tzname(self, dt): - return "UTC" - - def dst(self, dt): - return SgTimezone.ZERO - - -class LocalTimezone(tzinfo): - ''' - Implementation of datetime's tzinfo to provide convenient conversion - between Shotgun server time and local user time - ''' - - def utcoffset(self, dt): - ''' - Difference between the user's local timezone and UTC timezone in seconds - ''' - if self._isdst(dt): - return SgTimezone.DSTOFFSET - else: - return SgTimezone.STDOFFSET - - def dst(self, dt): - ''' - Daylight savings time (dst) offset in seconds - ''' - if self._isdst(dt): - return SgTimezone.DSTDIFF - else: - return SgTimezone.ZERO - - def tzname(self, dt): - ''' - Name of the user's local timezone, including a reference - to daylight savings time (dst) if applicable - ''' - return _time.tzname[self._isdst(dt)] - - def _isdst(self, dt): - ''' - Calculate whether the timestamp in question was in daylight savings - ''' - tt = (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.weekday(), 0, -1) - stamp = _time.mktime(tt) - tt = _time.localtime(stamp) - return tt.tm_isdst > 0 diff --git a/shotgun_api3/lib/six.py b/shotgun_api3/lib/six.py deleted file mode 100644 index b22d2e57d..000000000 --- a/shotgun_api3/lib/six.py +++ /dev/null @@ -1,964 +0,0 @@ -# Copyright (c) 2010-2019 Benjamin Peterson -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -"""Utilities for writing code that runs on Python 2 and 3""" - -from __future__ import absolute_import - -import functools -import itertools -import operator -import sys -import types - -__author__ = "Benjamin Peterson " -__version__ = "1.13.0" - - -# Useful for very coarse version differentiation. -PY2 = sys.version_info[0] == 2 -PY3 = sys.version_info[0] == 3 -PY34 = sys.version_info[0:2] >= (3, 4) -PY38 = sys.version_info[0:2] >= (3, 8) - -if PY3: - string_types = str, - integer_types = int, - class_types = type, - text_type = str - binary_type = bytes - - MAXSIZE = sys.maxsize -else: - string_types = basestring, - integer_types = (int, long) - class_types = (type, types.ClassType) - text_type = unicode - binary_type = str - - if sys.platform.startswith("java"): - # Jython always uses 32 bits. - MAXSIZE = int((1 << 31) - 1) - else: - # It's possible to have sizeof(long) != sizeof(Py_ssize_t). - class X(object): - - def __len__(self): - return 1 << 31 - try: - len(X()) - except OverflowError: - # 32-bit - MAXSIZE = int((1 << 31) - 1) - else: - # 64-bit - MAXSIZE = int((1 << 63) - 1) - del X - - -def _add_doc(func, doc): - """Add documentation to a function.""" - func.__doc__ = doc - - -def _import_module(name): - """Import module, returning the module after the last dot.""" - __import__(name) - return sys.modules[name] - - -class _LazyDescr(object): - - def __init__(self, name): - self.name = name - - def __get__(self, obj, tp): - result = self._resolve() - setattr(obj, self.name, result) # Invokes __set__. - try: - # This is a bit ugly, but it avoids running this again by - # removing this descriptor. - delattr(obj.__class__, self.name) - except AttributeError: - pass - return result - - -class MovedModule(_LazyDescr): - - def __init__(self, name, old, new=None): - super(MovedModule, self).__init__(name) - if PY3: - if new is None: - new = name - self.mod = new - else: - self.mod = old - - def _resolve(self): - return _import_module(self.mod) - - def __getattr__(self, attr): - _module = self._resolve() - value = getattr(_module, attr) - setattr(self, attr, value) - return value - - -class _LazyModule(types.ModuleType): - - def __init__(self, name): - super(_LazyModule, self).__init__(name) - self.__doc__ = self.__class__.__doc__ - - def __dir__(self): - attrs = ["__doc__", "__name__"] - attrs += [attr.name for attr in self._moved_attributes] - return attrs - - # Subclasses should override this - _moved_attributes = [] - - -class MovedAttribute(_LazyDescr): - - def __init__(self, name, old_mod, new_mod, old_attr=None, new_attr=None): - super(MovedAttribute, self).__init__(name) - if PY3: - if new_mod is None: - new_mod = name - self.mod = new_mod - if new_attr is None: - if old_attr is None: - new_attr = name - else: - new_attr = old_attr - self.attr = new_attr - else: - self.mod = old_mod - if old_attr is None: - old_attr = name - self.attr = old_attr - - def _resolve(self): - module = _import_module(self.mod) - return getattr(module, self.attr) - - -class _SixMetaPathImporter(object): - - """ - A meta path importer to import six.moves and its submodules. - - This class implements a PEP302 finder and loader. It should be compatible - with Python 2.5 and all existing versions of Python3 - """ - - def __init__(self, six_module_name): - self.name = six_module_name - self.known_modules = {} - - def _add_module(self, mod, *fullnames): - for fullname in fullnames: - self.known_modules[self.name + "." + fullname] = mod - - def _get_module(self, fullname): - return self.known_modules[self.name + "." + fullname] - - def find_module(self, fullname, path=None): - if fullname in self.known_modules: - return self - return None - - def __get_module(self, fullname): - try: - return self.known_modules[fullname] - except KeyError: - raise ImportError("This loader does not know module " + fullname) - - def load_module(self, fullname): - try: - # in case of a reload - return sys.modules[fullname] - except KeyError: - pass - mod = self.__get_module(fullname) - if isinstance(mod, MovedModule): - mod = mod._resolve() - else: - mod.__loader__ = self - sys.modules[fullname] = mod - return mod - - def is_package(self, fullname): - """ - Return true, if the named module is a package. - - We need this method to get correct spec objects with - Python 3.4 (see PEP451) - """ - return hasattr(self.__get_module(fullname), "__path__") - - def get_code(self, fullname): - """Return None - - Required, if is_package is implemented""" - self.__get_module(fullname) # eventually raises ImportError - return None - get_source = get_code # same as get_code - -_importer = _SixMetaPathImporter(__name__) - - -class _MovedItems(_LazyModule): - - """Lazy loading of moved objects""" - __path__ = [] # mark as package - - -_moved_attributes = [ - MovedAttribute("cStringIO", "cStringIO", "io", "StringIO"), - MovedAttribute("filter", "itertools", "builtins", "ifilter", "filter"), - MovedAttribute("filterfalse", "itertools", "itertools", "ifilterfalse", "filterfalse"), - MovedAttribute("input", "__builtin__", "builtins", "raw_input", "input"), - MovedAttribute("intern", "__builtin__", "sys"), - MovedAttribute("map", "itertools", "builtins", "imap", "map"), - MovedAttribute("getcwd", "os", "os", "getcwdu", "getcwd"), - MovedAttribute("getcwdb", "os", "os", "getcwd", "getcwdb"), - MovedAttribute("getoutput", "commands", "subprocess"), - MovedAttribute("range", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("reload_module", "__builtin__", "importlib" if PY34 else "imp", "reload"), - MovedAttribute("reduce", "__builtin__", "functools"), - MovedAttribute("shlex_quote", "pipes", "shlex", "quote"), - MovedAttribute("StringIO", "StringIO", "io"), - MovedAttribute("UserDict", "UserDict", "collections"), - MovedAttribute("UserList", "UserList", "collections"), - MovedAttribute("UserString", "UserString", "collections"), - MovedAttribute("xrange", "__builtin__", "builtins", "xrange", "range"), - MovedAttribute("zip", "itertools", "builtins", "izip", "zip"), - MovedAttribute("zip_longest", "itertools", "itertools", "izip_longest", "zip_longest"), - MovedModule("builtins", "__builtin__"), - MovedModule("configparser", "ConfigParser"), - MovedModule("collections_abc", "collections", "collections.abc" if sys.version_info >= (3, 3) else "collections"), - MovedModule("copyreg", "copy_reg"), - MovedModule("dbm_gnu", "gdbm", "dbm.gnu"), - MovedModule("dbm_ndbm", "dbm", "dbm.ndbm"), - MovedModule("_dummy_thread", "dummy_thread", "_dummy_thread"), - MovedModule("http_cookiejar", "cookielib", "http.cookiejar"), - MovedModule("http_cookies", "Cookie", "http.cookies"), - MovedModule("html_entities", "htmlentitydefs", "html.entities"), - MovedModule("html_parser", "HTMLParser", "html.parser"), - MovedModule("http_client", "httplib", "http.client"), - MovedModule("email_mime_base", "email.MIMEBase", "email.mime.base"), - MovedModule("email_mime_image", "email.MIMEImage", "email.mime.image"), - MovedModule("email_mime_multipart", "email.MIMEMultipart", "email.mime.multipart"), - MovedModule("email_mime_nonmultipart", "email.MIMENonMultipart", "email.mime.nonmultipart"), - MovedModule("email_mime_text", "email.MIMEText", "email.mime.text"), - MovedModule("BaseHTTPServer", "BaseHTTPServer", "http.server"), - MovedModule("CGIHTTPServer", "CGIHTTPServer", "http.server"), - MovedModule("SimpleHTTPServer", "SimpleHTTPServer", "http.server"), - MovedModule("cPickle", "cPickle", "pickle"), - MovedModule("queue", "Queue"), - MovedModule("reprlib", "repr"), - MovedModule("socketserver", "SocketServer"), - MovedModule("_thread", "thread", "_thread"), - MovedModule("tkinter", "Tkinter"), - MovedModule("tkinter_dialog", "Dialog", "tkinter.dialog"), - MovedModule("tkinter_filedialog", "FileDialog", "tkinter.filedialog"), - MovedModule("tkinter_scrolledtext", "ScrolledText", "tkinter.scrolledtext"), - MovedModule("tkinter_simpledialog", "SimpleDialog", "tkinter.simpledialog"), - MovedModule("tkinter_tix", "Tix", "tkinter.tix"), - MovedModule("tkinter_ttk", "ttk", "tkinter.ttk"), - MovedModule("tkinter_constants", "Tkconstants", "tkinter.constants"), - MovedModule("tkinter_dnd", "Tkdnd", "tkinter.dnd"), - MovedModule("tkinter_colorchooser", "tkColorChooser", - "tkinter.colorchooser"), - MovedModule("tkinter_commondialog", "tkCommonDialog", - "tkinter.commondialog"), - MovedModule("tkinter_tkfiledialog", "tkFileDialog", "tkinter.filedialog"), - MovedModule("tkinter_font", "tkFont", "tkinter.font"), - MovedModule("tkinter_messagebox", "tkMessageBox", "tkinter.messagebox"), - MovedModule("tkinter_tksimpledialog", "tkSimpleDialog", - "tkinter.simpledialog"), - MovedModule("urllib_parse", __name__ + ".moves.urllib_parse", "urllib.parse"), - MovedModule("urllib_error", __name__ + ".moves.urllib_error", "urllib.error"), - MovedModule("urllib", __name__ + ".moves.urllib", __name__ + ".moves.urllib"), - MovedModule("urllib_robotparser", "robotparser", "urllib.robotparser"), - MovedModule("xmlrpc_client", "xmlrpclib", "xmlrpc.client"), - MovedModule("xmlrpc_server", "SimpleXMLRPCServer", "xmlrpc.server"), -] -# Add windows specific modules. -if sys.platform == "win32": - _moved_attributes += [ - MovedModule("winreg", "_winreg"), - ] - -for attr in _moved_attributes: - setattr(_MovedItems, attr.name, attr) - if isinstance(attr, MovedModule): - _importer._add_module(attr, "moves." + attr.name) -del attr - -_MovedItems._moved_attributes = _moved_attributes - -moves = _MovedItems(__name__ + ".moves") -_importer._add_module(moves, "moves") - - -class Module_six_moves_urllib_parse(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_parse""" - - -_urllib_parse_moved_attributes = [ - MovedAttribute("ParseResult", "urlparse", "urllib.parse"), - MovedAttribute("SplitResult", "urlparse", "urllib.parse"), - MovedAttribute("parse_qs", "urlparse", "urllib.parse"), - MovedAttribute("parse_qsl", "urlparse", "urllib.parse"), - MovedAttribute("urldefrag", "urlparse", "urllib.parse"), - MovedAttribute("urljoin", "urlparse", "urllib.parse"), - MovedAttribute("urlparse", "urlparse", "urllib.parse"), - MovedAttribute("urlsplit", "urlparse", "urllib.parse"), - MovedAttribute("urlunparse", "urlparse", "urllib.parse"), - MovedAttribute("urlunsplit", "urlparse", "urllib.parse"), - MovedAttribute("quote", "urllib", "urllib.parse"), - MovedAttribute("quote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote", "urllib", "urllib.parse"), - MovedAttribute("unquote_plus", "urllib", "urllib.parse"), - MovedAttribute("unquote_to_bytes", "urllib", "urllib.parse", "unquote", "unquote_to_bytes"), - MovedAttribute("urlencode", "urllib", "urllib.parse"), - MovedAttribute("splitquery", "urllib", "urllib.parse"), - MovedAttribute("splittag", "urllib", "urllib.parse"), - MovedAttribute("splituser", "urllib", "urllib.parse"), - MovedAttribute("splitvalue", "urllib", "urllib.parse"), - MovedAttribute("uses_fragment", "urlparse", "urllib.parse"), - MovedAttribute("uses_netloc", "urlparse", "urllib.parse"), - MovedAttribute("uses_params", "urlparse", "urllib.parse"), - MovedAttribute("uses_query", "urlparse", "urllib.parse"), - MovedAttribute("uses_relative", "urlparse", "urllib.parse"), -] -for attr in _urllib_parse_moved_attributes: - setattr(Module_six_moves_urllib_parse, attr.name, attr) -del attr - -Module_six_moves_urllib_parse._moved_attributes = _urllib_parse_moved_attributes - -_importer._add_module(Module_six_moves_urllib_parse(__name__ + ".moves.urllib_parse"), - "moves.urllib_parse", "moves.urllib.parse") - - -class Module_six_moves_urllib_error(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_error""" - - -_urllib_error_moved_attributes = [ - MovedAttribute("URLError", "urllib2", "urllib.error"), - MovedAttribute("HTTPError", "urllib2", "urllib.error"), - MovedAttribute("ContentTooShortError", "urllib", "urllib.error"), -] -for attr in _urllib_error_moved_attributes: - setattr(Module_six_moves_urllib_error, attr.name, attr) -del attr - -Module_six_moves_urllib_error._moved_attributes = _urllib_error_moved_attributes - -_importer._add_module(Module_six_moves_urllib_error(__name__ + ".moves.urllib.error"), - "moves.urllib_error", "moves.urllib.error") - - -class Module_six_moves_urllib_request(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_request""" - - -_urllib_request_moved_attributes = [ - MovedAttribute("urlopen", "urllib2", "urllib.request"), - MovedAttribute("install_opener", "urllib2", "urllib.request"), - MovedAttribute("build_opener", "urllib2", "urllib.request"), - MovedAttribute("pathname2url", "urllib", "urllib.request"), - MovedAttribute("url2pathname", "urllib", "urllib.request"), - MovedAttribute("getproxies", "urllib", "urllib.request"), - MovedAttribute("Request", "urllib2", "urllib.request"), - MovedAttribute("OpenerDirector", "urllib2", "urllib.request"), - MovedAttribute("HTTPDefaultErrorHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPRedirectHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPCookieProcessor", "urllib2", "urllib.request"), - MovedAttribute("ProxyHandler", "urllib2", "urllib.request"), - MovedAttribute("BaseHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgr", "urllib2", "urllib.request"), - MovedAttribute("HTTPPasswordMgrWithDefaultRealm", "urllib2", "urllib.request"), - MovedAttribute("AbstractBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyBasicAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("AbstractDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("ProxyDigestAuthHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPSHandler", "urllib2", "urllib.request"), - MovedAttribute("FileHandler", "urllib2", "urllib.request"), - MovedAttribute("FTPHandler", "urllib2", "urllib.request"), - MovedAttribute("CacheFTPHandler", "urllib2", "urllib.request"), - MovedAttribute("UnknownHandler", "urllib2", "urllib.request"), - MovedAttribute("HTTPErrorProcessor", "urllib2", "urllib.request"), - MovedAttribute("urlretrieve", "urllib", "urllib.request"), - MovedAttribute("urlcleanup", "urllib", "urllib.request"), - MovedAttribute("URLopener", "urllib", "urllib.request"), - MovedAttribute("FancyURLopener", "urllib", "urllib.request"), - MovedAttribute("proxy_bypass", "urllib", "urllib.request"), - MovedAttribute("parse_http_list", "urllib2", "urllib.request"), - MovedAttribute("parse_keqv_list", "urllib2", "urllib.request"), -] -for attr in _urllib_request_moved_attributes: - setattr(Module_six_moves_urllib_request, attr.name, attr) -del attr - -Module_six_moves_urllib_request._moved_attributes = _urllib_request_moved_attributes - -_importer._add_module(Module_six_moves_urllib_request(__name__ + ".moves.urllib.request"), - "moves.urllib_request", "moves.urllib.request") - - -class Module_six_moves_urllib_response(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_response""" - - -_urllib_response_moved_attributes = [ - MovedAttribute("addbase", "urllib", "urllib.response"), - MovedAttribute("addclosehook", "urllib", "urllib.response"), - MovedAttribute("addinfo", "urllib", "urllib.response"), - MovedAttribute("addinfourl", "urllib", "urllib.response"), -] -for attr in _urllib_response_moved_attributes: - setattr(Module_six_moves_urllib_response, attr.name, attr) -del attr - -Module_six_moves_urllib_response._moved_attributes = _urllib_response_moved_attributes - -_importer._add_module(Module_six_moves_urllib_response(__name__ + ".moves.urllib.response"), - "moves.urllib_response", "moves.urllib.response") - - -class Module_six_moves_urllib_robotparser(_LazyModule): - - """Lazy loading of moved objects in six.moves.urllib_robotparser""" - - -_urllib_robotparser_moved_attributes = [ - MovedAttribute("RobotFileParser", "robotparser", "urllib.robotparser"), -] -for attr in _urllib_robotparser_moved_attributes: - setattr(Module_six_moves_urllib_robotparser, attr.name, attr) -del attr - -Module_six_moves_urllib_robotparser._moved_attributes = _urllib_robotparser_moved_attributes - -_importer._add_module(Module_six_moves_urllib_robotparser(__name__ + ".moves.urllib.robotparser"), - "moves.urllib_robotparser", "moves.urllib.robotparser") - - -class Module_six_moves_urllib(types.ModuleType): - - """Create a six.moves.urllib namespace that resembles the Python 3 namespace""" - __path__ = [] # mark as package - parse = _importer._get_module("moves.urllib_parse") - error = _importer._get_module("moves.urllib_error") - request = _importer._get_module("moves.urllib_request") - response = _importer._get_module("moves.urllib_response") - robotparser = _importer._get_module("moves.urllib_robotparser") - - def __dir__(self): - return ['parse', 'error', 'request', 'response', 'robotparser'] - -_importer._add_module(Module_six_moves_urllib(__name__ + ".moves.urllib"), - "moves.urllib") - - -def add_move(move): - """Add an item to six.moves.""" - setattr(_MovedItems, move.name, move) - - -def remove_move(name): - """Remove item from six.moves.""" - try: - delattr(_MovedItems, name) - except AttributeError: - try: - del moves.__dict__[name] - except KeyError: - raise AttributeError("no such move, %r" % (name,)) - - -if PY3: - _meth_func = "__func__" - _meth_self = "__self__" - - _func_closure = "__closure__" - _func_code = "__code__" - _func_defaults = "__defaults__" - _func_globals = "__globals__" -else: - _meth_func = "im_func" - _meth_self = "im_self" - - _func_closure = "func_closure" - _func_code = "func_code" - _func_defaults = "func_defaults" - _func_globals = "func_globals" - - -try: - advance_iterator = next -except NameError: - def advance_iterator(it): - return it.next() -next = advance_iterator - - -try: - callable = callable -except NameError: - def callable(obj): - return any("__call__" in klass.__dict__ for klass in type(obj).__mro__) - - -if PY3: - def get_unbound_function(unbound): - return unbound - - create_bound_method = types.MethodType - - def create_unbound_method(func, cls): - return func - - Iterator = object -else: - def get_unbound_function(unbound): - return unbound.im_func - - def create_bound_method(func, obj): - return types.MethodType(func, obj, obj.__class__) - - def create_unbound_method(func, cls): - return types.MethodType(func, None, cls) - - class Iterator(object): - - def next(self): - return type(self).__next__(self) - - callable = callable -_add_doc(get_unbound_function, - """Get the function out of a possibly unbound function""") - - -get_method_function = operator.attrgetter(_meth_func) -get_method_self = operator.attrgetter(_meth_self) -get_function_closure = operator.attrgetter(_func_closure) -get_function_code = operator.attrgetter(_func_code) -get_function_defaults = operator.attrgetter(_func_defaults) -get_function_globals = operator.attrgetter(_func_globals) - - -if PY3: - def iterkeys(d, **kw): - return iter(d.keys(**kw)) - - def itervalues(d, **kw): - return iter(d.values(**kw)) - - def iteritems(d, **kw): - return iter(d.items(**kw)) - - def iterlists(d, **kw): - return iter(d.lists(**kw)) - - viewkeys = operator.methodcaller("keys") - - viewvalues = operator.methodcaller("values") - - viewitems = operator.methodcaller("items") -else: - def iterkeys(d, **kw): - return d.iterkeys(**kw) - - def itervalues(d, **kw): - return d.itervalues(**kw) - - def iteritems(d, **kw): - return d.iteritems(**kw) - - def iterlists(d, **kw): - return d.iterlists(**kw) - - viewkeys = operator.methodcaller("viewkeys") - - viewvalues = operator.methodcaller("viewvalues") - - viewitems = operator.methodcaller("viewitems") - -_add_doc(iterkeys, "Return an iterator over the keys of a dictionary.") -_add_doc(itervalues, "Return an iterator over the values of a dictionary.") -_add_doc(iteritems, - "Return an iterator over the (key, value) pairs of a dictionary.") -_add_doc(iterlists, - "Return an iterator over the (key, [values]) pairs of a dictionary.") - - -if PY3: - def b(s): - return s.encode("latin-1") - - def u(s): - return s - unichr = chr - import struct - int2byte = struct.Struct(">B").pack - del struct - byte2int = operator.itemgetter(0) - indexbytes = operator.getitem - iterbytes = iter - import io - StringIO = io.StringIO - BytesIO = io.BytesIO - del io - _assertCountEqual = "assertCountEqual" - if sys.version_info[1] <= 1: - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" - else: - _assertRaisesRegex = "assertRaisesRegex" - _assertRegex = "assertRegex" -else: - def b(s): - return s - # Workaround for standalone backslash - - def u(s): - return unicode(s.replace(r'\\', r'\\\\'), "unicode_escape") - unichr = unichr - int2byte = chr - - def byte2int(bs): - return ord(bs[0]) - - def indexbytes(buf, i): - return ord(buf[i]) - iterbytes = functools.partial(itertools.imap, ord) - import StringIO - StringIO = BytesIO = StringIO.StringIO - _assertCountEqual = "assertItemsEqual" - _assertRaisesRegex = "assertRaisesRegexp" - _assertRegex = "assertRegexpMatches" -_add_doc(b, """Byte literal""") -_add_doc(u, """Text literal""") - - -def assertCountEqual(self, *args, **kwargs): - return getattr(self, _assertCountEqual)(*args, **kwargs) - - -def assertRaisesRegex(self, *args, **kwargs): - return getattr(self, _assertRaisesRegex)(*args, **kwargs) - - -def assertRegex(self, *args, **kwargs): - return getattr(self, _assertRegex)(*args, **kwargs) - - -if PY3: - exec_ = getattr(moves.builtins, "exec") - - def reraise(tp, value, tb=None): - try: - if value is None: - value = tp() - if value.__traceback__ is not tb: - raise value.with_traceback(tb) - raise value - finally: - value = None - tb = None - -else: - def exec_(_code_, _globs_=None, _locs_=None): - """Execute code in a namespace.""" - if _globs_ is None: - frame = sys._getframe(1) - _globs_ = frame.f_globals - if _locs_ is None: - _locs_ = frame.f_locals - del frame - elif _locs_ is None: - _locs_ = _globs_ - exec("""exec _code_ in _globs_, _locs_""") - - exec_("""def reraise(tp, value, tb=None): - try: - raise tp, value, tb - finally: - tb = None -""") - - -if sys.version_info[:2] == (3, 2): - exec_("""def raise_from(value, from_value): - try: - if from_value is None: - raise value - raise value from from_value - finally: - value = None -""") -elif sys.version_info[:2] > (3, 2): - exec_("""def raise_from(value, from_value): - try: - raise value from from_value - finally: - value = None -""") -else: - def raise_from(value, from_value): - raise value - - -print_ = getattr(moves.builtins, "print", None) -if print_ is None: - def print_(*args, **kwargs): - """The new-style print function for Python 2.4 and 2.5.""" - fp = kwargs.pop("file", sys.stdout) - if fp is None: - return - - def write(data): - if not isinstance(data, basestring): - data = str(data) - # If the file has an encoding, encode unicode with it. - if (isinstance(fp, file) and - isinstance(data, unicode) and - fp.encoding is not None): - errors = getattr(fp, "errors", None) - if errors is None: - errors = "strict" - data = data.encode(fp.encoding, errors) - fp.write(data) - want_unicode = False - sep = kwargs.pop("sep", None) - if sep is not None: - if isinstance(sep, unicode): - want_unicode = True - elif not isinstance(sep, str): - raise TypeError("sep must be None or a string") - end = kwargs.pop("end", None) - if end is not None: - if isinstance(end, unicode): - want_unicode = True - elif not isinstance(end, str): - raise TypeError("end must be None or a string") - if kwargs: - raise TypeError("invalid keyword arguments to print()") - if not want_unicode: - for arg in args: - if isinstance(arg, unicode): - want_unicode = True - break - if want_unicode: - newline = unicode("\n") - space = unicode(" ") - else: - newline = "\n" - space = " " - if sep is None: - sep = space - if end is None: - end = newline - for i, arg in enumerate(args): - if i: - write(sep) - write(arg) - write(end) -if sys.version_info[:2] < (3, 3): - _print = print_ - - def print_(*args, **kwargs): - fp = kwargs.get("file", sys.stdout) - flush = kwargs.pop("flush", False) - _print(*args, **kwargs) - if flush and fp is not None: - fp.flush() - -_add_doc(reraise, """Reraise an exception.""") - -if sys.version_info[0:2] < (3, 4): - def wraps(wrapped, assigned=functools.WRAPPER_ASSIGNMENTS, - updated=functools.WRAPPER_UPDATES): - def wrapper(f): - f = functools.wraps(wrapped, assigned, updated)(f) - f.__wrapped__ = wrapped - return f - return wrapper -else: - wraps = functools.wraps - - -def with_metaclass(meta, *bases): - """Create a base class with a metaclass.""" - # This requires a bit of explanation: the basic idea is to make a dummy - # metaclass for one level of class instantiation that replaces itself with - # the actual metaclass. - class metaclass(type): - - def __new__(cls, name, this_bases, d): - if sys.version_info[:2] >= (3, 7): - # This version introduced PEP 560 that requires a bit - # of extra care (we mimic what is done by __build_class__). - resolved_bases = types.resolve_bases(bases) - if resolved_bases is not bases: - d['__orig_bases__'] = bases - else: - resolved_bases = bases - return meta(name, resolved_bases, d) - - @classmethod - def __prepare__(cls, name, this_bases): - return meta.__prepare__(name, bases) - return type.__new__(metaclass, 'temporary_class', (), {}) - - -def add_metaclass(metaclass): - """Class decorator for creating a class with a metaclass.""" - def wrapper(cls): - orig_vars = cls.__dict__.copy() - slots = orig_vars.get('__slots__') - if slots is not None: - if isinstance(slots, str): - slots = [slots] - for slots_var in slots: - orig_vars.pop(slots_var) - orig_vars.pop('__dict__', None) - orig_vars.pop('__weakref__', None) - if hasattr(cls, '__qualname__'): - orig_vars['__qualname__'] = cls.__qualname__ - return metaclass(cls.__name__, cls.__bases__, orig_vars) - return wrapper - - -def ensure_binary(s, encoding='utf-8', errors='strict'): - """Coerce **s** to six.binary_type. - - For Python 2: - - `unicode` -> encoded to `str` - - `str` -> `str` - - For Python 3: - - `str` -> encoded to `bytes` - - `bytes` -> `bytes` - """ - if isinstance(s, text_type): - return s.encode(encoding, errors) - elif isinstance(s, binary_type): - return s - else: - raise TypeError("not expecting type '%s'" % type(s)) - - -def ensure_str(s, encoding='utf-8', errors='strict'): - """Coerce *s* to `str`. - - For Python 2: - - `unicode` -> encoded to `str` - - `str` -> `str` - - For Python 3: - - `str` -> `str` - - `bytes` -> decoded to `str` - """ - if not isinstance(s, (text_type, binary_type)): - raise TypeError("not expecting type '%s'" % type(s)) - if PY2 and isinstance(s, text_type): - s = s.encode(encoding, errors) - elif PY3 and isinstance(s, binary_type): - s = s.decode(encoding, errors) - return s - - -def ensure_text(s, encoding='utf-8', errors='strict'): - """Coerce *s* to six.text_type. - - For Python 2: - - `unicode` -> `unicode` - - `str` -> `unicode` - - For Python 3: - - `str` -> `str` - - `bytes` -> decoded to `str` - """ - if isinstance(s, binary_type): - return s.decode(encoding, errors) - elif isinstance(s, text_type): - return s - else: - raise TypeError("not expecting type '%s'" % type(s)) - - - -def python_2_unicode_compatible(klass): - """ - A decorator that defines __unicode__ and __str__ methods under Python 2. - Under Python 3 it does nothing. - - To support Python 2 and 3 with a single code base, define a __str__ method - returning text and apply this decorator to the class. - """ - if PY2: - if '__str__' not in klass.__dict__: - raise ValueError("@python_2_unicode_compatible cannot be applied " - "to %s because it doesn't define __str__()." % - klass.__name__) - klass.__unicode__ = klass.__str__ - klass.__str__ = lambda self: self.__unicode__().encode('utf-8') - return klass - - -# Complete the moves implementation. -# This code is at the end of this module to speed up module loading. -# Turn this module into a package. -__path__ = [] # required for PEP 302 and PEP 451 -__package__ = __name__ # see PEP 366 @ReservedAssignment -if globals().get("__spec__") is not None: - __spec__.submodule_search_locations = [] # PEP 451 @UndefinedVariable -# Remove other six meta path importers, since they cause problems. This can -# happen if six is removed from sys.modules and then reloaded. (Setuptools does -# this for some reason.) -if sys.meta_path: - for i, importer in enumerate(sys.meta_path): - # Here's some real nastiness: Another "instance" of the six module might - # be floating around. Therefore, we can't use isinstance() to check for - # the six meta path importer, since the other six instance will have - # inserted an importer with different class. - if (type(importer).__name__ == "_SixMetaPathImporter" and - importer.name == __name__): - del sys.meta_path[i] - break - del i, importer -# Finally, add the importer to the meta path import hook. -sys.meta_path.append(_importer) diff --git a/shotgun_api3/shotgun.py b/shotgun_api3/shotgun.py deleted file mode 100644 index b682e87eb..000000000 --- a/shotgun_api3/shotgun.py +++ /dev/null @@ -1,4898 +0,0 @@ -#!/usr/bin/env python -""" ------------------------------------------------------------------------------ -Copyright (c) 2009-2019, Shotgun Software Inc. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - - Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - - - Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - - Neither the name of the Shotgun Software Inc nor the names of its - contributors may be used to endorse or promote products derived from this - software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -""" - -# Python 2/3 compatibility -from .lib import six -from .lib import sgsix -from .lib import sgutils -from .lib.six import BytesIO # used for attachment upload -from .lib.six.moves import map - -from .lib.six.moves import http_cookiejar # used for attachment upload -import datetime -import logging -import uuid # used for attachment upload -import os -import re -import copy -import ssl -import stat # used for attachment upload -import sys -import time -import json -from .lib.six.moves import urllib -import shutil # used for attachment download -from .lib.six.moves import http_client # Used for secure file upload. -from .lib.httplib2 import Http, ProxyInfo, socks, ssl_error_classes -from .lib.sgtimezone import SgTimezone - -# Import Error and ResponseError (even though they're unused in this file) since they need -# to be exposed as part of the API. -from .lib.six.moves.xmlrpc_client import Error, ProtocolError, ResponseError # noqa - -if six.PY3: - from base64 import encodebytes as base64encode -else: - from base64 import encodestring as base64encode - - -LOG = logging.getLogger("shotgun_api3") -""" -Logging instance for shotgun_api3 - -Provides a logging instance where log messages are sent during execution. This instance has no -handler associated with it. - -.. seealso:: :ref:`logging` -""" -LOG.setLevel(logging.WARN) - - -def _is_mimetypes_broken(): - """ - Checks if this version of Python ships with a broken version of mimetypes - - :returns: True if the version of mimetypes is broken, False otherwise. - """ - # mimetypes is broken on Windows only and for Python 2.7.0 to 2.7.9 inclusively. - # We're bundling the version from 2.7.10. - # See bugs : - # http://bugs.python.org/issue9291 <- Fixed in 2.7.7 - # http://bugs.python.org/issue21652 <- Fixed in 2.7.8 - # http://bugs.python.org/issue22028 <- Fixed in 2.7.10 - return ( - sys.platform == "win32" - and sys.version_info[0] == 2 - and sys.version_info[1] == 7 - and sys.version_info[2] >= 0 - and sys.version_info[2] <= 9 - ) - - -if _is_mimetypes_broken(): - from .lib import mimetypes as mimetypes -else: - import mimetypes - - -# mimetypes imported in version specific imports -mimetypes.add_type("video/webm", ".webm") # webm and mp4 seem to be missing -mimetypes.add_type("video/mp4", ".mp4") # from some OS/distros - -SG_TIMEZONE = SgTimezone() - -SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION = False - -NO_SSL_VALIDATION = False -""" -Turns off hostname matching validation for SSL certificates - -Sometimes there are cases where certificate validation should be disabled. For example, if you -have a self-signed internal certificate that isn't included in our certificate bundle, you may -not require the added security provided by enforcing this. -""" - -# ---------------------------------------------------------------------------- -# Version -__version__ = "3.8.2" - -# ---------------------------------------------------------------------------- -# Errors - - -class ShotgunError(Exception): - """ - Base for all Shotgun API Errors. - """ - - pass - - -class ShotgunFileDownloadError(ShotgunError): - """ - Exception for file download-related errors. - """ - - pass - - -class ShotgunThumbnailNotReady(ShotgunError): - """ - Exception for when trying to use a 'pending thumbnail' (aka transient thumbnail) in an operation - """ - - pass - - -class Fault(ShotgunError): - """ - Exception when server-side exception detected. - """ - - pass - - -class AuthenticationFault(Fault): - """ - Exception when the server side reports an error related to authentication. - """ - - pass - - -class MissingTwoFactorAuthenticationFault(Fault): - """ - Exception when the server side reports an error related to missing two-factor authentication - credentials. - """ - - pass - - -class UserCredentialsNotAllowedForSSOAuthenticationFault(Fault): - """ - Exception when the server is configured to use SSO. It is not possible to use - a username/password pair to authenticate on such server. - """ - - pass - - -class UserCredentialsNotAllowedForOxygenAuthenticationFault(Fault): - """ - Exception when the server is configured to use Oxygen. It is not possible to use - a username/password pair to authenticate on such server. - """ - - pass - - -# ---------------------------------------------------------------------------- -# API - - -class ServerCapabilities(object): - """ - Container for the servers capabilities, such as version enabled features. - - .. warning:: - - This class is part of the internal API and its interfaces may change at any time in - the future. Therefore, usage of this class is discouraged. - """ - - def __init__(self, host, meta): - """ - ServerCapabilities.__init__ - - :param str host: Host name for the server excluding protocol. - :param dict meta: dict of meta data for the server returned from the info() api method. - - :ivar str host: - :ivar dict server_info: - :ivar tuple version: Simple version of the Shotgun server. ``(major, minor, rev)`` - :ivar bool is_dev: ``True`` if server is running a development version of the Shotgun - codebase. - """ - self._ensure_python_version_supported() - # Server host name - self.host = host - self.server_info = meta - - # Version from server is major.minor.rev or major.minor.rev."Dev" - # Store version as tuple and check dev flag - try: - self.version = meta.get("version", None) - except AttributeError: - self.version = None - if not self.version: - raise ShotgunError( - "The Flow Production Tracking Server didn't respond with a version number. " - "This may be because you are running an older version of " - "Flow Production Tracking against a more recent version of the Flow Production Tracking API. " - "For more information, please contact the Autodesk support." - ) - - if len(self.version) > 3 and self.version[3] == "Dev": - self.is_dev = True - else: - self.is_dev = False - - self.version = tuple(self.version[:3]) - self._ensure_json_supported() - - def _ensure_python_version_supported(self): - """ - Checks the if current Python version is supported. - """ - if sys.version_info < (3, 7): - raise ShotgunError("This module requires Python version 3.7 or higher.") - - def _ensure_support(self, feature, raise_hell=True): - """ - Checks the server version supports a given feature, raises an exception if it does not. - - :param dict feature: dict where **version** key contains a 3 integer tuple indicating the - supported server version and **label** key contains a human-readable label str:: - - { 'version': (5, 4, 4), 'label': 'project parameter } - :param bool raise_hell: Whether to raise an exception if the feature is not supported. - Defaults to ``True`` - :raises: :class:`ShotgunError` if the current server version does not support ``feature`` - """ - - if not self.version or self.version < feature["version"]: - if raise_hell: - raise ShotgunError( - "%s requires server version %s or higher, " - "server is %s" - % ( - feature["label"], - _version_str(feature["version"]), - _version_str(self.version), - ) - ) - return False - else: - return True - - def _ensure_json_supported(self): - """ - Ensures server has support for JSON API endpoint added in v2.4.0. - """ - self._ensure_support({"version": (2, 4, 0), "label": "JSON API"}) - - def ensure_include_archived_projects(self): - """ - Ensures server has support for archived Projects feature added in v5.3.14. - """ - self._ensure_support( - {"version": (5, 3, 14), "label": "include_archived_projects parameter"} - ) - - def ensure_per_project_customization(self): - """ - Ensures server has support for per-project customization feature added in v5.4.4. - """ - return self._ensure_support( - {"version": (5, 4, 4), "label": "project parameter"}, True - ) - - def ensure_support_for_additional_filter_presets(self): - """ - Ensures server has support for additional filter presets feature added in v7.0.0. - """ - return self._ensure_support( - {"version": (7, 0, 0), "label": "additional_filter_presets parameter"}, True - ) - - def ensure_user_following_support(self): - """ - Ensures server has support for listing items a user is following, added in v7.0.12. - """ - return self._ensure_support( - {"version": (7, 0, 12), "label": "user_following parameter"}, True - ) - - def ensure_paging_info_without_counts_support(self): - """ - Ensures server has support for optimized pagination, added in v7.4.0. - """ - return self._ensure_support( - {"version": (7, 4, 0), "label": "optimized pagination"}, False - ) - - def ensure_return_image_urls_support(self): - """ - Ensures server has support for returning thumbnail URLs without additional round-trips, added in v3.3.0. - """ - return self._ensure_support( - {"version": (3, 3, 0), "label": "return thumbnail URLs"}, False - ) - - def __str__(self): - return "ServerCapabilities: host %s, version %s, is_dev %s" % ( - self.host, - self.version, - self.is_dev, - ) - - -class ClientCapabilities(object): - """ - Container for the client capabilities. - - .. warning:: - - This class is part of the internal API and its interfaces may change at any time in - the future. Therefore, usage of this class is discouraged. - - :ivar str platform: The current client platform. Valid values are ``mac``, ``linux``, - ``windows``, or ``None`` (if the current platform couldn't be determined). - :ivar str local_path_field: The PTR field used for local file paths. This is calculated using - the value of ``platform``. Ex. ``local_path_mac``. - :ivar str py_version: Simple version of Python executable as a string. Eg. ``2.7``. - :ivar str ssl_version: Version of OpenSSL installed. Eg. ``OpenSSL 1.0.2g 1 Mar 2016``. This - info is only available in Python 2.7+ if the ssl module was imported successfully. - Defaults to ``unknown`` - """ - - def __init__(self): - system = sys.platform.lower() - - if system == "darwin": - self.platform = "mac" - elif system.startswith("linux"): - self.platform = "linux" - elif system == "win32": - self.platform = "windows" - else: - self.platform = None - - if self.platform: - self.local_path_field = "local_path_%s" % (self.platform) - else: - self.local_path_field = None - - self.py_version = ".".join(str(x) for x in sys.version_info[:2]) - - # extract the OpenSSL version if we can. The version is only available in Python 2.7 and - # only if we successfully imported ssl - self.ssl_version = "unknown" - try: - self.ssl_version = ssl.OPENSSL_VERSION - except (AttributeError, NameError): - pass - - def __str__(self): - return ( - "ClientCapabilities: platform %s, local_path_field %s, " - "py_verison %s, ssl version %s" - % (self.platform, self.local_path_field, self.py_version, self.ssl_version) - ) - - -class _Config(object): - """ - Container for the client configuration. - """ - - def __init__(self, sg): - """ - :param sg: Shotgun connection. - """ - self._sg = sg - self.max_rpc_attempts = 3 - # rpc_attempt_interval stores the number of milliseconds to wait between - # request retries. By default, this will be 3000 milliseconds. You can - # override this by setting this property on the config like so: - # - # sg = Shotgun(site_name, script_name, script_key) - # sg.config.rpc_attempt_interval = 1000 # adjusting default interval - # - # Or by setting the ``SHOTGUN_API_RETRY_INTERVAL`` environment variable. - # In the case that the environment variable is already set, setting the - # property on the config will override it. - self.rpc_attempt_interval = 3000 - # From http://docs.python.org/2.6/library/httplib.html: - # If the optional timeout parameter is given, blocking operations - # (like connection attempts) will timeout after that many seconds - # (if it is not given, the global default timeout setting is used) - self.timeout_secs = None - self.api_ver = "api3" - self.convert_datetimes_to_utc = True - self._records_per_page = None - self.api_key = None - self.script_name = None - self.user_login = None - self.user_password = None - self.auth_token = None - self.sudo_as_login = None - # Authentication parameters to be folded into final auth_params dict - self.extra_auth_params = None - # uuid as a string - self.session_uuid = None - self.scheme = None - self.server = None - self.api_path = None - # The raw_http_proxy reflects the exact string passed in - # to the Shotgun constructor. This can be useful if you - # need to construct a Shotgun API instance based on - # another Shotgun API instance. - self.raw_http_proxy = None - # if a proxy server is being used, the proxy_handler - # below will contain a urllib2.ProxyHandler instance - # which can be used whenever a request needs to be made. - self.proxy_handler = None - self.proxy_server = None - self.proxy_port = 8080 - self.proxy_user = None - self.proxy_pass = None - self.session_token = None - self.authorization = None - self.no_ssl_validation = False - self.localized = False - - def set_server_params(self, base_url): - """ - Set the different server related fields based on the passed in URL. - - This will impact the following attributes: - - - scheme: http or https - - api_path: usually /api3/json - - server: usually something.shotgunstudio.com - - :param str base_url: The server URL. - - :raises ValueError: Raised if protocol is not http or https. - """ - self.scheme, self.server, api_base, _, _ = urllib.parse.urlsplit(base_url) - if self.scheme not in ("http", "https"): - raise ValueError("base_url must use http or https got '%s'" % base_url) - self.api_path = urllib.parse.urljoin( - urllib.parse.urljoin(api_base or "/", self.api_ver + "/"), "json" - ) - - @property - def records_per_page(self): - """ - The records per page value from the server. - """ - if self._records_per_page is None: - # Check for api_max_entities_per_page in the server info and change the record per page - # value if it is supplied. - self._records_per_page = ( - self._sg.server_info.get("api_max_entities_per_page") or 500 - ) - return self._records_per_page - - -class Shotgun(object): - """ - Shotgun Client connection. - """ - - # reg ex from - # http://underground.infovark.com/2008/07/22/iso-date-validation-regex/ - # Note a length check is done before checking the reg ex - _DATE_PATTERN = re.compile(r"^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])$") - _DATE_TIME_PATTERN = re.compile( - r"^(\d{4})\D?(0[1-9]|1[0-2])\D?([12]\d|0[1-9]|3[01])" - r"(\D?([01]\d|2[0-3])\D?([0-5]\d)\D?([0-5]\d)?\D?(\d{3})?)?$" - ) - - _MULTIPART_UPLOAD_CHUNK_SIZE = 20000000 - MAX_ATTEMPTS = 3 # Retries on failure - BACKOFF = 0.75 # Seconds to wait before retry, times the attempt number - - def __init__( - self, - base_url, - script_name=None, - api_key=None, - convert_datetimes_to_utc=True, - http_proxy=None, - ensure_ascii=True, - connect=True, - ca_certs=None, - login=None, - password=None, - sudo_as_login=None, - session_token=None, - auth_token=None, - ): - """ - Initializes a new instance of the Shotgun client. - - :param str base_url: http or https url of the Shotgun server. Do not include the trailing - slash:: - - https://example.shotgunstudio.com - :param str script_name: name of the Script entity used to authenticate to the server. - If provided, then ``api_key`` must be as well, and neither ``login`` nor ``password`` - can be provided. - - .. seealso:: :ref:`authentication` - :param str api_key: API key for the provided ``script_name``. Used to authenticate to the - server. If provided, then ``script_name`` must be as well, and neither ``login`` nor - ``password`` can be provided. - - .. seealso:: :ref:`authentication` - :param bool convert_datetimes_to_utc: (optional) When ``True``, datetime values are converted - from local time to UTC time before being sent to the server. Datetimes received from - the server are then converted back to local time. When ``False`` the client should use - UTC date time values. Default is ``True``. - :param str http_proxy: (optional) URL for a proxy server to use for all connections. The - expected str format is ``[username:password@]111.222.333.444[:8080]``. Examples:: - - 192.168.0.1 - 192.168.0.1:8888 - joe:user@192.168.0.1:8888 - :param bool connect: (optional) When ``True``, as soon as the :class:`~shotgun_api3.Shotgun` - instance is created, a connection will be made to the Shotgun server to determine the - server capabilities and confirm this version of the client is compatible with the server - version. This is mostly used for testing. Default is ``True``. - :param str ca_certs: (optional) path to an external SSL certificates file. By default, the - Shotgun API will use its own built-in certificates file which stores root certificates - for the most common Certificate Authorities (CAs). If you are using a corporate or - internal CA, or are packaging an application into an executable, it may be necessary to - point to your own certificates file. You can do this by passing in the full path to the - file via this parameter or by setting the environment variable ``SHOTGUN_API_CACERTS``. - In the case both are set, this parameter will take precedence. - :param str login: The user login str to use to authenticate to the server when using user-based - authentication. If provided, then ``password`` must be as well, and neither - ``script_name`` nor ``api_key`` can be provided. - - .. seealso:: :ref:`authentication` - :param str password: The password str to use to authenticate to the server when using user-based - authentication. If provided, then ``login`` must be as well and neither ``script_name`` - nor ``api_key`` can be provided. - - See :ref:`authentication` for more info. - :param str sudo_as_login: A user login string for the user whose permissions will be applied - to all actions. Event log entries will be generated showing this user performing all - actions with an additional extra meta-data parameter ``sudo_actual_user`` indicating the - script or user that is actually authenticated. - :param str session_token: The session token to use to authenticate to the server. This - can be used as an alternative to authenticating with a script user or regular user. - You can retrieve the session token by running the - :meth:`~shotgun_api3.Shotgun.get_session_token()` method. - - .. todo: Add this info to the Authentication section of the docs - :param str auth_token: The authentication token required to authenticate to a server with - two-factor authentication turned on. If provided, then ``login`` and ``password`` must - be provided as well, and neither ``script_name`` nor ``api_key`` can be provided. - - .. note:: These tokens can be short lived so a session is established right away if an - ``auth_token`` is provided. A - :class:`~shotgun_api3.MissingTwoFactorAuthenticationFault` will be raised if the - ``auth_token`` is invalid. - .. todo: Add this info to the Authentication section of the docs - - .. note:: A note about proxy connections: If you are using Python <= v2.6.2, HTTPS - connections through a proxy server will not work due to a bug in the :mod:`urllib2` - library (see http://bugs.python.org/issue1424152). This will affect upload and - download-related methods in the Shotgun API (eg. :meth:`~shotgun_api3.Shotgun.upload`, - :meth:`~shotgun_api3.Shotgun.upload_thumbnail`, - :meth:`~shotgun_api3.Shotgun.upload_filmstrip_thumbnail`, - :meth:`~shotgun_api3.Shotgun.download_attachment`. Normal CRUD methods for passing JSON - data should still work fine. If you cannot upgrade your Python installation, you can see - the patch merged into Python v2.6.3 (http://hg.python.org/cpython/rev/0f57b30a152f/) and - try and hack it into your installation but YMMV. For older versions of Python there - are other patches that were proposed in the bug report that may help you as well. - """ - - # verify authentication arguments - if session_token is not None: - if script_name is not None or api_key is not None: - raise ValueError( - "cannot provide both session_token " "and script_name/api_key" - ) - if login is not None or password is not None: - raise ValueError( - "cannot provide both session_token " "and login/password" - ) - - if login is not None or password is not None: - if script_name is not None or api_key is not None: - raise ValueError( - "cannot provide both login/password " "and script_name/api_key" - ) - if login is None: - raise ValueError("password provided without login") - if password is None: - raise ValueError("login provided without password") - - if script_name is not None or api_key is not None: - if script_name is None: - raise ValueError("api_key provided without script_name") - if api_key is None: - raise ValueError("script_name provided without api_key") - - if auth_token is not None: - if login is None or password is None: - raise ValueError( - "must provide a user login and password with an auth_token" - ) - - if script_name is not None or api_key is not None: - raise ValueError("cannot provide an auth_code with script_name/api_key") - - # Can't use 'all' with python 2.4 - if ( - len( - [x for x in [session_token, script_name, api_key, login, password] if x] - ) - == 0 - ): - if connect: - raise ValueError( - "must provide login/password, session_token or script_name/api_key" - ) - - self.config = _Config(self) - self.config.api_key = api_key - self.config.script_name = script_name - self.config.user_login = login - self.config.user_password = password - self.config.auth_token = auth_token - self.config.session_token = session_token - self.config.sudo_as_login = sudo_as_login - self.config.convert_datetimes_to_utc = convert_datetimes_to_utc - self.config.no_ssl_validation = NO_SSL_VALIDATION - self.config.raw_http_proxy = http_proxy - - try: - self.config.rpc_attempt_interval = int( - os.environ.get("SHOTGUN_API_RETRY_INTERVAL", 3000) - ) - except ValueError: - retry_interval = os.environ.get("SHOTGUN_API_RETRY_INTERVAL", 3000) - raise ValueError( - "Invalid value '%s' found in environment variable " - "SHOTGUN_API_RETRY_INTERVAL, must be int." % retry_interval - ) - if self.config.rpc_attempt_interval < 0: - raise ValueError( - "Value of SHOTGUN_API_RETRY_INTERVAL must be positive, " - "got '%s'." % self.config.rpc_attempt_interval - ) - - global SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION - if ( - os.environ.get("SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION", "0") - .strip() - .lower() - == "1" - ): - SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION = True - - self._connection = None - - self.__ca_certs = self._get_certs_file(ca_certs) - - self.base_url = (base_url or "").lower() - self.config.set_server_params(self.base_url) - - # if the service contains user information strip it out - # copied from the xmlrpclib which turned the user:password into - # and auth header - - # Do NOT self._split_url(self.base_url) here, as it contains the lower - # case version of the base_url argument. Doing so would base64encode - # the lowercase version of the credentials. - auth, self.config.server = self._split_url(base_url) - if auth: - auth = base64encode( - sgutils.ensure_binary(urllib.parse.unquote(auth)) - ).decode("utf-8") - self.config.authorization = "Basic " + auth.strip() - - # foo:bar@123.456.789.012:3456 - if http_proxy: - # check if we're using authentication. Start from the end since - # there might be @ in the user's password. - p = http_proxy.rsplit("@", 1) - if len(p) > 1: - self.config.proxy_user, self.config.proxy_pass = p[0].split(":", 1) - proxy_server = p[1] - else: - proxy_server = http_proxy - proxy_netloc_list = proxy_server.split(":", 1) - self.config.proxy_server = proxy_netloc_list[0] - if len(proxy_netloc_list) > 1: - try: - self.config.proxy_port = int(proxy_netloc_list[1]) - except ValueError: - raise ValueError( - "Invalid http_proxy address '%s'. Valid " - "format is '123.456.789.012' or '123.456.789.012:3456'" - ". If no port is specified, a default of %d will be " - "used." % (http_proxy, self.config.proxy_port) - ) - - # now populate self.config.proxy_handler - if self.config.proxy_user and self.config.proxy_pass: - auth_string = "%s:%s@" % ( - self.config.proxy_user, - self.config.proxy_pass, - ) - else: - auth_string = "" - proxy_addr = "http://%s%s:%d" % ( - auth_string, - self.config.proxy_server, - self.config.proxy_port, - ) - self.config.proxy_handler = urllib.request.ProxyHandler( - {self.config.scheme: proxy_addr} - ) - - if ensure_ascii: - self._json_loads = self._json_loads_ascii - - self.client_caps = ClientCapabilities() - # this relies on self.client_caps being set first - self.reset_user_agent() - - self._server_caps = None - # test to ensure the the server supports the json API - # call to server will only be made once and will raise error - if connect: - self.server_caps - - # When using auth_token in a 2FA scenario we need to switch to session-based - # authentication because the auth token will no longer be valid after a first use. - if self.config.auth_token is not None: - self.config.session_token = self.get_session_token() - self.config.user_login = None - self.config.user_password = None - self.config.auth_token = None - - def _split_url(self, base_url): - """ - Extract the hostname:port and username/password/token from base_url - sent when connect to the API. - - In python 3.8 `urllib.parse.splituser` was deprecated warning devs to - use `urllib.parse.urlparse`. - """ - if six.PY38: - auth = None - results = urllib.parse.urlparse(base_url) - server = results.hostname - if results.port: - server = "{}:{}".format(server, results.port) - - if results.username: - auth = results.username - - if results.password: - auth = "{}:{}".format(auth, results.password) - - else: - auth, server = urllib.parse.splituser( - urllib.parse.urlsplit(base_url).netloc - ) - - return auth, server - - # ======================================================================== - # API Functions - - @property - def server_info(self): - """ - Property containing server information. - - >>> sg.server_info - {'full_version': [6, 3, 15, 0], 'version': [6, 3, 15], ...} - - .. note:: - - Beyond ``full_version`` and ``version`` which differ by the inclusion of the bugfix number, - you should expect these values to be unsupported and for internal use only. - - :returns: dict of server information from :class:`ServerCapabilities` object - :rtype: dict - """ - return self.server_caps.server_info - - @property - def server_caps(self): - """ - Property containing :class:`ServerCapabilities` object. - - >>> sg.server_caps - - - :returns: :class:`ServerCapabilities` object that describe the server the client is - connected to. - :rtype: :class:`ServerCapabilities` object - """ - if not self._server_caps or (self._server_caps.host != self.config.server): - self._server_caps = ServerCapabilities(self.config.server, self.info()) - return self._server_caps - - def connect(self): - """ - Connect client to the server if it is not already connected. - - .. note:: The client will automatically connect to the server on demand. You only need to - call this function if you wish to confirm the client can connect. - """ - self._get_connection() - self.info() - return - - def close(self): - """ - Close the current connection to the server. - - If the client needs to connect again it will do so automatically. - """ - self._close_connection() - return - - def info(self): - """ - Get API-related metadata from the Shotgun server. - - >>> sg.info() - {'full_version': [8, 2, 1, 0], 'version': [8, 2, 1], 'user_authentication_method': 'default', ...} - - :: - - Token Value - -------- --------- - full_version An ordered array of the full Shotgun version. - [major, minor, patch, hotfix] - version An ordered array of the Shotgun version. - [major, minor, patch] - user_authentication_method Indicates the authentication method used by Shotgun. - Will be one of the following values: - default: regular username/password. - ldap: username/password from the company's LDAP. - saml2: SSO used, over SAML2. - - .. note:: - - Beyond the documented tokens, you should expect - the other values to be unsupported and for internal use only. - - :returns: dict of the server metadata. - :rtype: dict - """ - return self._call_rpc("info", None, include_auth_params=False) - - def find_one( - self, - entity_type, - filters, - fields=None, - order=None, - filter_operator=None, - retired_only=False, - include_archived_projects=True, - additional_filter_presets=None, - ): - """ - Shortcut for :meth:`~shotgun_api3.Shotgun.find` with ``limit=1`` so it returns a single - result. - - >>> sg.find_one("Asset", [["id", "is", 32]], ["id", "code", "sg_status_list"]) - {'code': 'Gopher', 'id': 32, 'sg_status_list': 'ip', 'type': 'Asset'} - - :param str entity_type: Shotgun entity type as a string to find. - :param list filters: list of filters to apply to the query. - - .. seealso:: :ref:`filter_syntax` - - :param list fields: Optional list of fields to include in each entity record returned. - Defaults to ``["id"]``. - :param int order: Optional list of fields to order the results by. List has the format:: - - [ - {'field_name':'foo', 'direction':'asc'}, - {'field_name':'bar', 'direction':'desc'} - ] - - Defaults to sorting by ``id`` in ascending order. - :param str filter_operator: Operator to apply to the filters. Supported values are ``"all"`` - and ``"any"``. These are just another way of defining if the query is an AND or OR - query. Defaults to ``"all"``. - :param bool retired_only: Optional boolean when ``True`` will return only entities that have - been retired. Defaults to ``False`` which returns only entities which have not been - retired. There is no option to return both retired and non-retired entities in the - same query. - :param bool include_archived_projects: Optional boolean flag to include entities whose projects - have been archived. Defaults to ``True``. - :param additional_filter_presets: Optional list of presets to further filter the result - set, list has the form:: - - [{ - "preset_name": , - : , - ... - }] - - Note that these filters are ANDed together and ANDed with the 'filter' - argument. - - For details on supported presets and the format of this parameter see - :ref:`additional_filter_presets` - :returns: Dictionary representing a single matching entity with the requested fields, - and the defaults ``"id"`` and ``"type"`` which are always included. - - .. seealso:: :ref:`entity-fields` - - :rtype: dict - """ - - results = self.find( - entity_type, - filters, - fields, - order, - filter_operator, - 1, - retired_only, - include_archived_projects=include_archived_projects, - additional_filter_presets=additional_filter_presets, - ) - - if results: - return results[0] - return None - - def find( - self, - entity_type, - filters, - fields=None, - order=None, - filter_operator=None, - limit=0, - retired_only=False, - page=0, - include_archived_projects=True, - additional_filter_presets=None, - ): - """ - Find entities matching the given filters. - - >>> # Find Character Assets in Sequence 100_FOO - >>> # ------------- - >>> fields = ['id', 'code', 'sg_asset_type'] - >>> sequence_id = 2 # Sequence "100_FOO" - >>> project_id = 4 # Demo Project - >>> filters = [ - ... ['project', 'is', {'type': 'Project', 'id': project_id}], - ... ['sg_asset_type', 'is', 'Character'], - ... ['sequences', 'is', {'type': 'Sequence', 'id': sequence_id}] - ... ] - >>> assets= sg.find("Asset",filters,fields) - [{'code': 'Gopher', 'id': 32, 'sg_asset_type': 'Character', 'type': 'Asset'}, - {'code': 'Cow', 'id': 33, 'sg_asset_type': 'Character', 'type': 'Asset'}, - {'code': 'Bird_1', 'id': 35, 'sg_asset_type': 'Character', 'type': 'Asset'}, - {'code': 'Bird_2', 'id': 36, 'sg_asset_type': 'Character', 'type': 'Asset'}, - {'code': 'Bird_3', 'id': 37, 'sg_asset_type': 'Character', 'type': 'Asset'}, - {'code': 'Raccoon', 'id': 45, 'sg_asset_type': 'Character', 'type': 'Asset'}, - {'code': 'Wet Gopher', 'id': 149, 'sg_asset_type': 'Character', 'type': 'Asset'}] - - You can drill through single entity links to filter on fields or display linked fields. - This is often called "deep linking" or using "dot notation". - - .. seealso:: :ref:`filter_syntax` - - >>> # Find Versions created by Tasks in the Animation Pipeline Step - >>> # ------------- - >>> fields = ['id', 'code'] - >>> pipeline_step_id = 2 # Animation Step ID - >>> project_id = 4 # Demo Project - >>> # you can drill through single-entity link fields - >>> filters = [ - ... ['project','is', {'type': 'Project','id': project_id}], - ... ['sg_task.Task.step.Step.id', 'is', pipeline_step_id] - >>> ] - >>> sg.find("Version", filters, fields) - [{'code': 'scene_010_anim_v001', 'id': 42, 'type': 'Version'}, - {'code': 'scene_010_anim_v002', 'id': 134, 'type': 'Version'}, - {'code': 'bird_v001', 'id': 137, 'type': 'Version'}, - {'code': 'birdAltBlue_v002', 'id': 236, 'type': 'Version'}] - - :param str entity_type: Shotgun entity type to find. - :param list filters: list of filters to apply to the query. - - .. seealso:: :ref:`filter_syntax`, :ref:`combining-related-queries` - - :param list fields: Optional list of fields to include in each entity record returned. - Defaults to ``["id"]``. - - .. seealso:: :ref:`combining-related-queries` - - :param list order: Optional list of dictionaries defining how to order the results of the - query. Each dictionary contains the ``field_name`` to order by and the ``direction`` - to sort:: - - [ - {'field_name':'foo', 'direction':'asc'}, - {'field_name':'bar', 'direction':'desc'} - ] - - Defaults to sorting by ``id`` in ascending order. - :param str filter_operator: Operator to apply to the filters. Supported values are ``"all"`` - and ``"any"``. These are just another way of defining if the query is an AND or OR - query. Defaults to ``"all"``. - :param int limit: Optional limit to the number of entities to return. Defaults to ``0`` which - returns all entities that match. - :param int page: Optional page of results to return. Use this together with the ``limit`` - parameter to control how your query results are paged. Defaults to ``0`` which returns - all entities that match. - :param bool retired_only: Optional boolean when ``True`` will return only entities that have - been retired. Defaults to ``False`` which returns only entities which have not been - retired. There is no option to return both retired and non-retired entities in the - same query. - :param bool include_archived_projects: Optional boolean flag to include entities whose projects - have been archived. Defaults to ``True``. - :param additional_filter_presets: Optional list of presets to further filter the result - set, list has the form:: - - [{ - "preset_name": , - : , - ... - }] - - Note that these filters are ANDed together and ANDed with the 'filter' - argument. - - For details on supported presets and the format of this parameter see - :ref:`additional_filter_presets` - :returns: list of dictionaries representing each entity with the requested fields, and the - defaults ``"id"`` and ``"type"`` which are always included. - - .. seealso:: :ref:`entity-fields` - - :rtype: list - """ - - if not isinstance(limit, int) or limit < 0: - raise ValueError("limit parameter must be a positive integer") - - if not isinstance(page, int) or page < 0: - raise ValueError("page parameter must be a positive integer") - - if isinstance(filters, (list, tuple)): - filters = _translate_filters(filters, filter_operator) - elif filter_operator: - # TODO: Not sure if this test is correct, replicated from prev api - raise ShotgunError( - "Deprecated: Use of filter_operator for find() is not valid any more." - " See the documentation on find()" - ) - - if not include_archived_projects: - # This defaults to True on the server (no argument is sent) - # So we only need to check the server version if it is False - self.server_caps.ensure_include_archived_projects() - - if additional_filter_presets: - self.server_caps.ensure_support_for_additional_filter_presets() - - params = self._construct_read_parameters( - entity_type, - fields, - filters, - retired_only, - order, - include_archived_projects, - additional_filter_presets, - ) - - if self.server_caps.ensure_return_image_urls_support(): - params["api_return_image_urls"] = True - - if self.server_caps.ensure_paging_info_without_counts_support(): - paging_info_param = "return_paging_info_without_counts" - else: - paging_info_param = "return_paging_info" - - params[paging_info_param] = False - - if limit and limit <= self.config.records_per_page: - params["paging"]["entities_per_page"] = limit - # If page isn't set and the limit doesn't require pagination, - # then trigger the faster code path. - if page == 0: - page = 1 - - # if page is specified, then only return the page of records requested - if page != 0: - params["paging"]["current_page"] = page - records = self._call_rpc("read", params).get("entities", []) - return self._parse_records(records) - - params[paging_info_param] = True - records = [] - - if self.server_caps.ensure_paging_info_without_counts_support(): - has_next_page = True - while has_next_page: - result = self._call_rpc("read", params) - records.extend(result.get("entities")) - - if limit and len(records) >= limit: - records = records[:limit] - break - - has_next_page = result["paging_info"]["has_next_page"] - params["paging"]["current_page"] += 1 - else: - result = self._call_rpc("read", params) - while result.get("entities"): - records.extend(result.get("entities")) - - if limit and len(records) >= limit: - records = records[:limit] - break - if len(records) == result["paging_info"]["entity_count"]: - break - - params["paging"]["current_page"] += 1 - result = self._call_rpc("read", params) - - return self._parse_records(records) - - def _construct_read_parameters( - self, - entity_type, - fields, - filters, - retired_only, - order, - include_archived_projects, - additional_filter_presets, - ): - params = {} - params["type"] = entity_type - params["return_fields"] = fields or ["id"] - params["filters"] = filters - params["return_only"] = (retired_only and "retired") or "active" - params["paging"] = { - "entities_per_page": self.config.records_per_page, - "current_page": 1, - } - - if additional_filter_presets: - params["additional_filter_presets"] = additional_filter_presets - - if include_archived_projects is False: - # Defaults to True on the server, so only pass it if it's False - params["include_archived_projects"] = False - - if order: - sort_list = [] - for sort in order: - if "column" in sort: - # TODO: warn about deprecation of 'column' param name - sort["field_name"] = sort["column"] - sort.setdefault("direction", "asc") - sort_list.append( - {"field_name": sort["field_name"], "direction": sort["direction"]} - ) - params["sorts"] = sort_list - return params - - def _add_project_param(self, params, project_entity): - - if project_entity and self.server_caps.ensure_per_project_customization(): - params["project"] = project_entity - - return params - - def _translate_update_params( - self, entity_type, entity_id, data, multi_entity_update_modes - ): - global SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION - - def optimize_field(field_dict): - if SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION: - return field_dict - return {k: _get_type_and_id_from_value(v) for k, v in field_dict.items()} - - full_fields = self._dict_to_list( - data, - extra_data=self._dict_to_extra_data( - multi_entity_update_modes, "multi_entity_update_mode" - ), - ) - return { - "type": entity_type, - "id": entity_id, - "fields": [optimize_field(field_dict) for field_dict in full_fields], - } - - def summarize( - self, - entity_type, - filters, - summary_fields, - filter_operator=None, - grouping=None, - include_archived_projects=True, - ): - """ - Summarize field data returned by a query. - - This provides the same functionality as the summaries in the UI. You can specify one or - more fields to summarize, choose the summary type for each, and optionally group the - results which will return summary information for each group as well as the total for - the query. - - **Example: Count all Assets for a Project** - - >>> sg.summarize(entity_type='Asset', - ... filters = [['project', 'is', {'type':'Project', 'id':4}]], - ... summary_fields=[{'field':'id', 'type':'count'}]) - {'groups': [], 'summaries': {'id': 15}} - - ``summaries`` contains the total summary for the query. Each key is the field summarized - and the value is the result of the summary operation for the entire result set. - - .. note:: - You cannot perform more than one summary on a field at a time, but you can summarize - several different fields in the same call. - - **Example: Count all Assets for a Project, grouped by sg_asset_type** - - >>> sg.summarize(entity_type='Asset', - ... filters=[['project', 'is', {'type': 'Project', 'id': 4}]], - ... summary_fields=[{'field': 'id', 'type': 'count'}], - ... grouping=[{'field': 'sg_asset_type', 'type': 'exact', 'direction': 'asc'}]) - {'groups': [{'group_name': 'Character','group_value': 'Character', 'summaries': {'id': 3}}, - {'group_name': 'Environment','group_value': 'Environment', 'summaries': {'id': 3}}, - {'group_name': 'Matte Painting', 'group_value': 'Matte Painting', 'summaries': {'id': 1}}, - {'group_name': 'Prop', 'group_value': 'Prop', 'summaries': {'id': 4}}, - {'group_name': 'Vehicle', 'group_value': 'Vehicle', 'summaries': {'id': 4}}], - 'summaries': {'id': 15}} - - - ``summaries`` contains the total summary for the query. - - ``groups`` contains the summary for each group. - - - ``group_name`` is the display name for the group. - - ``group_value`` is the actual value of the grouping value. This is often the same as - ``group_name`` but in the case when grouping by entity, the ``group_name`` may be - ``PuppyA`` and the group_value would be - ``{'type':'Asset','id':922,'name':'PuppyA'}``. - - ``summaries`` contains the summary calculation dict for each field requested. - - **Example: Count all Tasks for a Sequence and find the latest due_date** - - >>> sg.summarize(entity_type='Task', - ... filters = [ - ... ['entity.Shot.sg_sequence', 'is', {'type':'Sequence', 'id':2}], - ... ['sg_status_list', 'is_not', 'na']], - ... summary_fields=[{'field':'id', 'type':'count'}, - ... {'field':'due_date','type':'latest'}]) - {'groups': [], 'summaries': {'due_date': '2013-07-05', 'id': 30}} - - This shows that the there are 30 Tasks for Shots in the Sequence and the latest ``due_date`` - of any Task is ``2013-07-05``. - - **Example: Count all Tasks for a Sequence, find the latest due_date and group by Shot** - - >>> sg.summarize(entity_type='Task', - ... filters = [ - ... ['entity.Shot.sg_sequence', 'is', {'type': 'Sequence', 'id': 2}], - ... ['sg_status_list', 'is_not', 'na']], - ... summary_fields=[{'field': 'id', 'type': 'count'}, {'field': 'due_date', 'type': 'latest'}], - ... grouping=[{'field': 'entity', 'type': 'exact', 'direction': 'asc'}])) - {'groups': [{'group_name': 'shot_010', - 'group_value': {'id': 2, 'name': 'shot_010', 'type': 'Shot', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-06-18', 'id': 10}}, - {'group_name': 'shot_020', - 'group_value': {'id': 3, 'name': 'shot_020', 'type': 'Shot', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-06-28', 'id': 10}}, - {'group_name': 'shot_030', - 'group_value': {'id': 4, 'name': 'shot_030', 'type': 'Shot', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-07-05', 'id': 10}}], - 'summaries': {'due_date': '2013-07-05', 'id': 30}} - - This shows that the there are 30 Tasks for Shots in the Sequence and the latest ``due_date`` - of any Task is ``2013-07-05``. Because the summary is grouped by ``entity``, we can also - see the summaries for each Shot returned. Each Shot has 10 Tasks and the latest ``due_date`` - for each Shot. The difference between ``group_name`` and ``group_value`` is highlighted in - this example as the name of the Shot is different from its value. - - **Example: Count all Tasks for a Sequence, find the latest due_date, group by Shot and - Pipeline Step** - - >>> sg.summarize(entity_type='Task', - ... filters = [ - ... ['entity.Shot.sg_sequence', 'is', {'type': 'Sequence', 'id': 2}], - ... ['sg_status_list', 'is_not', 'na']], - ... summary_fields=[{'field': 'id', 'type': 'count'}, - ... {'field': 'due_date', 'type': 'latest'}], - ... grouping=[{'field': 'entity', 'type': 'exact', 'direction': 'asc'}, - ... {'field': 'step', 'type': 'exact', 'direction': 'asc'}]) - {'groups': [{'group_name': 'shot_010', - 'group_value': {'id': 2, 'name': 'shot_010', 'type': 'Shot', 'valid': 'valid'}, - 'groups': [{'group_name': 'Client', - 'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-05-04', 'id': 1}}, - {'group_name': 'Online', - 'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-05-05', 'id': 1}}, - ... - ... truncated for brevity - ... - {'group_name': 'Comp', - 'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-06-18', 'id': 1}}], - 'summaries': {'due_date': '2013-06-18', 'id': 10}}, - {'group_name': 'shot_020', - 'group_value': {'id': 3, 'name': 'shot_020', 'type': 'Shot', 'valid': 'valid'}, - 'groups': [{'group_name': 'Client', - 'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-05-15', 'id': 1}}, - {'group_name': 'Online', - 'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-05-16', 'id': 1}}, - ... - ... truncated for brevity - ... - {'group_name': 'Comp', - 'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-06-28', 'id': 1}}], - 'summaries': {'due_date': '2013-06-28', 'id': 10}}, - {'group_name': 'shot_030', - 'group_value': {'id': 4, 'name': 'shot_030', 'type': 'Shot', 'valid': 'valid'}, - 'groups': [{'group_name': 'Client', - 'group_value': {'id': 1, 'name': 'Client', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-05-20', 'id': 1}}, - {'group_name': 'Online', - 'group_value': {'id': 2, 'name': 'Online', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-05-21', 'id': 1}}, - ... - ... truncated for brevity - ... - {'group_name': 'Comp', - 'group_value': {'id': 8, 'name': 'Comp', 'type': 'Step', 'valid': 'valid'}, - 'summaries': {'due_date': '2013-07-05', 'id': 1}}], - 'summaries': {'due_date': '2013-07-05', 'id': 10}}], - 'summaries': {'due_date': '2013-07-05', 'id': 30}} - - When grouping my more than one field, the grouping structure is repeated for each sub-group - and summary values are returned for each group on each level. - - :param str entity_type: The entity type to summarize - :param list filters: A list of conditions used to filter the find query. Uses the same - syntax as :meth:`~shotgun_api3.Shotgun.find` method. - :param list summary_fields: A list of dictionaries with the following keys: - - :field: The internal Shotgun field name you are summarizing. - :type: The type of summary you are performing on the field. Summary types can be any of - ``record_count``, ``count``, ``sum``, ``maximum``, ``minimum``, ``average``, - ``earliest``, ``latest``, ``percentage``, ``status_percentage``, ``status_list``, - ``checked``, ``unchecked`` depending on the type of field you're summarizing. - - :param str filter_operator: Operator to apply to the filters. Supported values are ``"all"`` - and ``"any"``. These are just another way of defining if the query is an AND or OR - query. Defaults to ``"all"``. - :param list grouping: Optional list of dicts with the following keys: - - :field: a string indicating the internal Shotgun field name on ``entity_type`` to - group results by. - :type: A string indicating the type of grouping to perform for each group. - Valid types depend on the type of field you are grouping on and can be one of - ``exact``, ``tens``, ``hundreds``, ``thousands``, ``tensofthousands``, - ``hundredsofthousands``, ``millions``, ``day``, ``week``, ``month``, - ``quarter``,``year``, ``clustered_date``, ``oneday``, ``fivedays``, - ``entitytype``, ``firstletter``. - :direction: A string that sets the order to display the grouped results. Valid - options are ``asc`` and ``desc``. Defaults to ``asc``. - - :returns: dictionary containing grouping and summaries keys. - :rtype: dict - """ - - if not isinstance(grouping, list) and grouping is not None: - msg = "summarize() 'grouping' parameter must be a list or None" - raise ValueError(msg) - - if isinstance(filters, (list, tuple)): - filters = _translate_filters(filters, filter_operator) - - if not include_archived_projects: - # This defaults to True on the server (no argument is sent) - # So we only need to check the server version if it is False - self.server_caps.ensure_include_archived_projects() - - params = {"type": entity_type, "summaries": summary_fields, "filters": filters} - - if include_archived_projects is False: - # Defaults to True on the server, so only pass it if it's False - params["include_archived_projects"] = False - - if grouping is not None: - params["grouping"] = grouping - - records = self._call_rpc("summarize", params) - return records - - def create(self, entity_type, data, return_fields=None): - """ - Create a new entity of the specified ``entity_type``. - - >>> data = { - ... "project": {"type": "Project", "id": 161}, - ... "sg_sequence": {"type": "Sequence", "id": 109}, - ... "code": "001_100", - ... 'sg_status_list': "ip" - ... } - >>> sg.create('Shot', data) - {'code': '001_100', - 'id': 2557, - 'project': {'id': 161, 'name': 'Pied Piper', 'type': 'Project'}, - 'sg_sequence': {'id': 109, 'name': 'Sequence 001', 'type': 'Sequence'}, - 'sg_status_list': 'ip', - 'type': 'Shot'} - - :param str entity_type: Shotgun entity type to create. - :param dict data: Dictionary of fields and corresponding values to set on the new entity. If - ``image`` or ``filmstrip_image`` fields are provided, the file path will be uploaded - to the server automatically. - :param list return_fields: Optional list of additional field values to return from the new - entity. Defaults to ``id`` field. - - .. seealso:: :ref:`combining-related-queries` - - :returns: Shotgun entity dictionary containing the field/value pairs of all of the fields - set from the ``data`` parameter as well as the defaults ``type`` and ``id``. If any - additional fields were provided using the ``return_fields`` parameter, these would be - included as well. - - .. seealso:: :ref:`entity-fields` - - :rtype: dict - """ - - data = data.copy() - if not return_fields: - return_fields = ["id"] - - upload_image = None - if "image" in data: - upload_image = data.pop("image") - - upload_filmstrip_image = None - if "filmstrip_image" in data: - if not self.server_caps.version or self.server_caps.version < (3, 1, 0): - raise ShotgunError( - "Filmstrip thumbnail support requires server version 3.1 or " - "higher, server is %s" % (self.server_caps.version,) - ) - upload_filmstrip_image = data.pop("filmstrip_image") - - params = { - "type": entity_type, - "fields": self._dict_to_list(data), - "return_fields": return_fields, - } - - record = self._call_rpc("create", params, first=True) - result = self._parse_records(record)[0] - - if upload_image: - self.upload_thumbnail(entity_type, result["id"], upload_image) - image = self.find_one( - entity_type, [["id", "is", result.get("id")]], fields=["image"] - ) - result["image"] = image.get("image") - - if upload_filmstrip_image: - self.upload_filmstrip_thumbnail( - entity_type, result["id"], upload_filmstrip_image - ) - filmstrip = self.find_one( - entity_type, - [["id", "is", result.get("id")]], - fields=["filmstrip_image"], - ) - result["filmstrip_image"] = filmstrip.get("filmstrip_image") - - return result - - def update(self, entity_type, entity_id, data, multi_entity_update_modes=None): - """ - Update the specified entity with the supplied data. - - >>> shots = [ - ... {'type':'Shot', 'id':'40435'}, - ... {'type':'Shot', 'id':'40438'}, - ... {'type':'Shot', 'id':'40441'}] - >>> data = { - ... 'shots': shots_asset_is_in, - ... 'sg_status_list':'rev'} - >>> sg.update("Asset", 55, data) - {'type': 'Shot', - 'id': 55, - 'sg_status_`list`': 'rev', - 'shots': [{'id': 40435, 'name': '100_010', 'type': 'Shot', 'valid': 'valid'}, - {'id': 40438, 'name': '100_040', 'type': 'Shot', 'valid': 'valid'}, - {'id': 40441, 'name': '100_070', 'type': 'Shot', 'valid': 'valid'}] - } - - :param str entity_type: Entity type to update. - :param id entity_id: id of the entity to update. - :param dict data: key/value pairs where key is the field name and value is the value to set - for that field. This method does not restrict the updating of fields hidden in the web - UI via the Project Tracking Settings panel. - :param dict multi_entity_update_modes: Optional dict indicating what update mode to use - when updating a multi-entity link field. The keys in the dict are the fields to set - the mode for, and the values from the dict are one of ``set``, ``add``, or ``remove``. - Defaults to ``set``. - :: - - multi_entity_update_modes={"shots": "add", "assets": "remove"} - - :returns: Dictionary of the fields updated, with the default keys `type` and `id` added as well. - :rtype: dict - """ - - data = data.copy() - upload_image = None - if "image" in data and data["image"] is not None: - upload_image = data.pop("image") - upload_filmstrip_image = None - if "filmstrip_image" in data: - if not self.server_caps.version or self.server_caps.version < (3, 1, 0): - raise ShotgunError( - "Filmstrip thumbnail support requires server version 3.1 or " - "higher, server is %s" % (self.server_caps.version,) - ) - upload_filmstrip_image = data.pop("filmstrip_image") - - if data: - params = self._translate_update_params( - entity_type, entity_id, data, multi_entity_update_modes - ) - record = self._call_rpc("update", params) - result = self._parse_records(record)[0] - else: - result = {"id": entity_id, "type": entity_type} - - if upload_image: - self.upload_thumbnail(entity_type, entity_id, upload_image) - image = self.find_one( - entity_type, [["id", "is", result.get("id")]], fields=["image"] - ) - result["image"] = image.get("image") - - if upload_filmstrip_image: - self.upload_filmstrip_thumbnail( - entity_type, result["id"], upload_filmstrip_image - ) - filmstrip = self.find_one( - entity_type, - [["id", "is", result.get("id")]], - fields=["filmstrip_image"], - ) - result["filmstrip_image"] = filmstrip.get("filmstrip_image") - - return result - - def delete(self, entity_type, entity_id): - """ - Retire the specified entity. - - Entities in Shotgun are not "deleted" destructively, they are instead, "retired". This - means they are placed in the trash where they are no longer accessible to users. - - The entity can be brought back to life using :meth:`~shotgun_api3.Shotgun.revive`. - - >>> sg.delete("Shot", 2557) - True - - :param str entity_type: Shotgun entity type to delete. - :param id entity_id: ``id`` of the entity to delete. - :returns: ``True`` if the entity was deleted, ``False`` otherwise (for example, if the - entity was already deleted). - :rtype: bool - :raises: :class:`Fault` if entity does not exist (deleted or not). - """ - - params = {"type": entity_type, "id": entity_id} - - return self._call_rpc("delete", params) - - def revive(self, entity_type, entity_id): - """ - Revive an entity that has previously been deleted. - - >>> sg.revive("Shot", 860) - True - - :param str entity_type: Shotgun entity type to revive. - :param int entity_id: id of the entity to revive. - :returns: ``True`` if the entity was revived, ``False`` otherwise (e.g. if the - entity is not currently retired). - :rtype: bool - """ - - params = {"type": entity_type, "id": entity_id} - - return self._call_rpc("revive", params) - - def batch(self, requests): - """ - Make a batch request of several :meth:`~shotgun_api3.Shotgun.create`, - :meth:`~shotgun_api3.Shotgun.update`, and :meth:`~shotgun_api3.Shotgun.delete` calls. - - All requests are performed within a transaction, so either all will complete or none will. - - Ex. Make a bunch of shots:: - - batch_data = [] - for i in range(1,100): - data = { - "code": "shot_%04d" % i, - "project": project - } - batch_data.append({"request_type": "create", "entity_type": "Shot", "data": data}) - sg.batch(batch_data) - - Example output:: - - [{'code': 'shot_0001', - 'type': 'Shot', - 'id': 3624, - 'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}}, - ... - ... and a bunch more ... - ... - {'code': 'shot_0099', - 'type': 'Shot', - 'id': 3722, - 'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}}] - - Ex. All three types of requests in one batch:: - - batch_data = [ - {"request_type": "create", "entity_type": "Shot", "data": {"code": "New Shot 1", "project": project}}, - {"request_type": "update", "entity_type": "Shot", "entity_id": 3624, "data": {"code": "Changed 1"}}, - {"request_type": "delete", "entity_type": "Shot", "entity_id": 3624} - ] - sg.batch(batch_data) - - Example output:: - - [{'code': 'New Shot 1', 'type': 'Shot', 'id': 3723, - 'project': {'id': 4, 'name': 'Demo Project', 'type': 'Project'}}, - {'code': 'Changed 1', 'type': 'Shot', 'id': 3624}, - True] - - :param list requests: A list of dict's of the form which have a request_type key and also - specifies: - - - create: ``entity_type``, data dict of fields to set - - update: ``entity_type``, ``entity_id``, data dict of fields to set, - and optionally ``multi_entity_update_modes`` - - delete: ``entity_type`` and entity_id - :returns: A list of values for each operation. Create and update requests return a dict of - the fields updated. Delete requests return ``True`` if the entity was deleted. - :rtype: list - """ - - if not isinstance(requests, list): - raise ShotgunError( - "batch() expects a list. Instead was sent a %s" % type(requests) - ) - - # If we have no requests, just return an empty list immediately. - # Nothing to process means nothing to get results of. - if len(requests) == 0: - return [] - - calls = [] - - def _required_keys(message, required_keys, data): - missing = set(required_keys) - set(data.keys()) - if missing: - raise ShotgunError( - "%s missing required key: %s. " - "Value was: %s." % (message, ", ".join(missing), data) - ) - - for req in requests: - _required_keys("Batched request", ["request_type", "entity_type"], req) - request_params = { - "request_type": req["request_type"], - "type": req["entity_type"], - } - - if req["request_type"] == "create": - _required_keys("Batched create request", ["data"], req) - request_params["fields"] = self._dict_to_list(req["data"]) - request_params["return_fields"] = req.get("return_fields") or ["id"] - elif req["request_type"] == "update": - _required_keys("Batched update request", ["entity_id", "data"], req) - request_params["id"] = req["entity_id"] - request_params["fields"] = self._dict_to_list( - req["data"], - extra_data=self._dict_to_extra_data( - req.get("multi_entity_update_modes"), "multi_entity_update_mode" - ), - ) - if "multi_entity_update_mode" in req: - request_params["multi_entity_update_mode"] = req[ - "multi_entity_update_mode" - ] - elif req["request_type"] == "delete": - _required_keys("Batched delete request", ["entity_id"], req) - request_params["id"] = req["entity_id"] - else: - raise ShotgunError( - "Invalid request_type '%s' for batch" % (req["request_type"]) - ) - calls.append(request_params) - records = self._call_rpc("batch", calls) - return self._parse_records(records) - - def work_schedule_read(self, start_date, end_date, project=None, user=None): - """ - Return the work day rules for a given date range. - - .. versionadded:: 3.0.9 - Requires Shotgun server v3.2.0+ - - This returns the defined WorkDayRules between the ``start_date`` and ``end_date`` inclusive - as a dict where the key is the date and the value is another dict describing the rule for - that date. - - Rules are represented by a dict with the following keys: - - :description: the description entered into the work day rule exception if applicable. - :reason: one of six options: - - - STUDIO_WORK_WEEK: standard studio schedule applies - - STUDIO_EXCEPTION: studio-wide exception applies - - PROJECT_WORK_WEEK: standard project schedule applies - - PROJECT_EXCEPTION: project-specific exception applies - - USER_WORK_WEEK: standard user work week applies - - USER_EXCEPTION: user-specific exception applies - - :working: boolean indicating whether it is a "working" day or not. - - >>> sg.work_schedule_read("2015-12-21", "2015-12-25") - {'2015-12-21': {'description': None, - 'reason': 'STUDIO_WORK_WEEK', - 'working': True}, - '2015-12-22': {'description': None, - 'reason': 'STUDIO_WORK_WEEK', - 'working': True}, - '2015-12-23': {'description': None, - 'reason': 'STUDIO_WORK_WEEK', - 'working': True}, - '2015-12-24': {'description': 'Closed for Christmas Eve', - 'reason': 'STUDIO_EXCEPTION', - 'working': False}, - '2015-12-25': {'description': 'Closed for Christmas', - 'reason': 'STUDIO_EXCEPTION', - 'working': False}} - - - :param str start_date: Start date of date range. ``YYYY-MM-DD`` - :param str end_date: End date of date range. ``YYYY-MM-DD`` - :param dict project: Optional Project entity to query `WorkDayRules` for. - :param dict user: Optional HumanUser entity to query WorkDayRules for. - :returns: Complex dict containing each date and the WorkDayRule defined for that date - between the ``start_date`` and ``end date`` inclusive. See above for details. - :rtype: dict - """ - - if not self.server_caps.version or self.server_caps.version < (3, 2, 0): - raise ShotgunError( - "Work schedule support requires server version 3.2 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - if not isinstance(start_date, str) or not isinstance(end_date, str): - raise ShotgunError( - "The start_date and end_date arguments must be strings in YYYY-MM-DD format" - ) - - params = dict( - start_date=start_date, end_date=end_date, project=project, user=user - ) - - return self._call_rpc("work_schedule_read", params) - - def work_schedule_update( - self, - date, - working, - description=None, - project=None, - user=None, - recalculate_field=None, - ): - """ - Update the work schedule for a given date. - - .. versionadded:: 3.0.9 - Requires Shotgun server v3.2.0+ - - If neither ``project`` nor ``user`` are passed in, the studio work schedule will be updated. - ``project`` and ``user`` can only be used exclusively of each other. - - >>> sg.work_schedule_update ("2015-12-31", working=False, - ... description="Studio closed for New Years Eve", project=None, - ... user=None, recalculate_field=None) - {'date': '2015-12-31', - 'description': "Studio closed for New Years Eve", - 'project': None, - 'user': None, - 'working': False} - - :param str date: Date of WorkDayRule to update. ``YYY-MM-DD`` - :param bool working: Indicates whether the day is a working day or not. - :param str description: Optional reason for time off. - :param dict project: Optional Project entity to assign the rule to. Cannot be used with the - ``user`` param. - :param dict user: Optional HumanUser entity to assign the rule to. Cannot be used with the - ``project`` param. - :param str recalculate_field: Optional schedule field that will be recalculated on Tasks - when they are affected by a change in working schedule. Options are ``due_date`` or - ``duration``. Defaults to the value set in the Shotgun web application's Site - Preferences. - :returns: dict containing key/value pairs for each value of the work day rule updated. - :rtype: dict - """ - - if not self.server_caps.version or self.server_caps.version < (3, 2, 0): - raise ShotgunError( - "Work schedule support requires server version 3.2 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - if not isinstance(date, str): - raise ShotgunError("The date argument must be string in YYYY-MM-DD format") - - params = dict( - date=date, - working=working, - description=description, - project=project, - user=user, - recalculate_field=recalculate_field, - ) - - return self._call_rpc("work_schedule_update", params) - - def follow(self, user, entity): - """ - Add the entity to the user's followed entities. - - If the user is already following the entity, the method will succeed but nothing will be - changed on the server-side. - - >>> sg.follow({"type": "HumanUser", "id": 42}, {"type": "Shot", "id": 2050}) - {'followed': True, 'user': {'type': 'HumanUser', 'id': 42}, - 'entity': {'type': 'Shot', 'id': 2050}} - - :param dict user: User entity that will follow the entity. - :param dict entity: Shotgun entity to be followed. - :returns: dict with ``"followed": True`` as well as key/values for the params that were - passed in. - :rtype: dict - """ - - if not self.server_caps.version or self.server_caps.version < (5, 1, 22): - raise ShotgunError( - "Follow support requires server version 5.2 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - params = dict(user=user, entity=entity) - - return self._call_rpc("follow", params) - - def unfollow(self, user, entity): - """ - Remove entity from the user's followed entities. - - This does nothing if the user is not following the entity. - - >>> sg.unfollow({"type": "HumanUser", "id": 42}, {"type": "Shot", "id": 2050}) - {'entity': {'type': 'Shot', 'id': 2050}, 'user': {'type': 'HumanUser', 'id': 42}, - 'unfollowed': True} - - :param dict user: User entity that will unfollow the entity. - :param dict entity: Entity to be unfollowed - :returns: dict with ``"unfollowed": True`` as well as key/values for the params that were - passed in. - :rtype: dict - """ - - if not self.server_caps.version or self.server_caps.version < (5, 1, 22): - raise ShotgunError( - "Follow support requires server version 5.2 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - params = dict(user=user, entity=entity) - - return self._call_rpc("unfollow", params) - - def followers(self, entity): - """ - Return all followers for an entity. - - >>> sg.followers({"type": "Shot", "id": 2050}) - [{'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Richard Hendriks', - 'id': 42}, - {'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Bertram Gilfoyle', - 'id': 33}, - {'status': 'act', 'valid': 'valid', 'type': 'HumanUser', 'name': 'Dinesh Chugtai', - 'id': 57}] - - :param dict entity: Entity to find followers of. - :returns: list of dicts representing each user following the entity - :rtype: list - :versionadded: - """ - - if not self.server_caps.version or self.server_caps.version < (5, 1, 22): - raise ShotgunError( - "Follow support requires server version 5.2 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - params = dict(entity=entity) - - return self._call_rpc("followers", params) - - def following(self, user, project=None, entity_type=None): - """ - Return all entity instances a user is following. - - Optionally, a project and/or entity_type can be supplied to restrict returned results. - - >>> user = {"type": "HumanUser", "id": 1234} - >>> project = {"type": "Project", "id": 1234} - >>> entity_type = "Task" - >>> sg.following(user, project=project, entity_type=entity_type) - [{"type":"Task", "id":1}, - {"type":"Task", "id":2}, - {"type":"Task", "id":3}] - - :param dict user: Find what this person is following. - :param dict project: Optional filter to only return results from a specific project. - :param str entity_type: Optional filter to only return results from one entity type. - :returns: list of dictionaries, each containing entity type & id's being followed. - :rtype: list - """ - - self.server_caps.ensure_user_following_support() - - params = {"user": user} - if project: - params["project"] = project - if entity_type: - params["entity_type"] = entity_type - - return self._call_rpc("following", params) - - def schema_entity_read(self, project_entity=None): - """ - Return all active entity types, their display names, and their visibility. - - If the project parameter is specified, the schema visibility for the given project is - being returned. If the project parameter is omitted or set to ``None``, a full listing is - returned where per-project entity type visibility settings are not considered. - - >>> sg.schema_entity_read() - {'ActionMenuItem': {'name': {'editable': False, 'value': 'Action Menu Item'}, - 'visible': {'editable': False, 'value': True}}, - 'ApiUser': {'name': {'editable': False, 'value': 'Script'}, - 'visible': {'editable': False, 'value': True}}, - 'AppWelcomeUserConnection': {'name': {'editable': False, - 'value': 'App Welcome User Connection'}, - 'visible': {'editable': False, 'value': True}}, - 'Asset': {'name': {'editable': False, 'value': 'Asset'}, - 'visible': {'editable': False, 'value': True}}, - 'AssetAssetConnection': {'name': {'editable': False, - 'value': 'Asset Asset Connection'}, - 'visible': {'editable': False, 'value': True}}, - '...' - } - - :param dict project_entity: Optional Project entity specifying which project to return - the listing for. If omitted or set to ``None``, per-project visibility settings are - not taken into consideration and the global list is returned. Example: - ``{'type': 'Project', 'id': 3}`` - :returns: dict of Entity Type to dict containing the display name. - :rtype: dict - - .. note:: - The returned display names for this method will be localized when the ``localize`` Shotgun config property is set to ``True``. See :ref:`localization` for more information. - """ - - params = {} - - params = self._add_project_param(params, project_entity) - - if params: - return self._call_rpc("schema_entity_read", params) - else: - return self._call_rpc("schema_entity_read", None) - - def schema_read(self, project_entity=None): - """ - Get the schema for all fields on all entities. - - .. note:: - If ``project_entity`` is not specified, everything is reported as visible. - - >>> sg.schema_read() - {'ActionMenuItem': {'created_at': {'data_type': {'editable': False, 'value': 'date_time'}, - 'description': {'editable': True, 'value': ''}, - 'editable': {'editable': False, 'value': False}, - 'entity_type': {'editable': False, 'value': 'ActionMenuItem'}, - 'mandatory': {'editable': False, 'value': False}, - 'name': {'editable': True, 'value': 'Date Created'}, - 'properties': {'default_value': {'editable': False, 'value': None}, - 'summary_default': {'editable': True, 'value': 'none'}}, - 'unique': {'editable': False, 'value': False}, - 'visible': {'editable': False, 'value': True}}, - 'created_by': {'data_type': {'editable': False,'value': 'entity'}, - 'description': {'editable': True,'value': ''}, - 'editable': {'editable': False,'value': False}, - 'entity_type': {'editable': False,'value': 'ActionMenuItem'}, - 'mandatory': {'editable': False,'value': False}, - 'name': {'editable': True,'value': 'Created by'}, - 'properties': {'default_value': {'editable': False,'value': None}, - 'summary_default': {'editable': True,'value': 'none'}, - 'valid_types': {'editable': True,'value': - ['HumanUser','ApiUser']}}, - 'unique': {'editable': False,'value': False}, - 'visible': {'editable': False,'value': True}}, - ... - ... - ... - ... - 'Version': {'client_approved': {'data_type': {'editable': False,'value': 'checkbox'}, - 'description': {'editable': True,'value': ''}, - 'editable': {'editable': False,'value': True}, - 'entity_type': {'editable': False,'value': 'Version'}, - 'mandatory': {'editable': False,'value': False}, - 'name': {'editable': True,'value': 'Client Approved'}, - 'properties': {'default_value': {'editable': False,'value': False}, - 'summary_default': {'editable': False,'value': 'none'}}, - 'unique': {'editable': False,'value': False}, - 'visible': {'editable': False,'value': True}}, - ... - ... - ... - ... - } - - :param dict project_entity: Optional, Project entity specifying which project to return - the listing for. If omitted or set to ``None``, per-project visibility settings are - not taken into consideration and the global list is returned. Example: - ``{'type': 'Project', 'id': 3}``. Defaults to ``None``. - :returns: A nested dict object containing a key/value pair for all fields of all entity - types. Properties that are ``'editable': True``, can be updated using the - :meth:`~shotgun_api3.Shotgun.schema_field_update` method. - :rtype: dict - - .. note:: - The returned display names for this method will be localized when the ``localize`` Shotgun config property is set to ``True``. See :ref:`localization` for more information. - """ - - params = {} - - params = self._add_project_param(params, project_entity) - - if params: - return self._call_rpc("schema_read", params) - else: - return self._call_rpc("schema_read", None) - - def schema_field_read(self, entity_type, field_name=None, project_entity=None): - """ - Get schema for all fields on the specified entity type or just the field name specified - if provided. - - .. note:: - Unlike how the results of a :meth:`~shotgun_api3.Shotgun.find` can be pumped into a - :meth:`~shotgun_api3.Shotgun.create` or :meth:`~shotgun_api3.Shotgun.update`, the - results of :meth:`~shotgun_api3.Shotgun.schema_field_read` are not compatible with - the format used for :meth:`~shotgun_api3.Shotgun.schema_field_create` or - :meth:`~shotgun_api3.Shotgun.schema_field_update`. If you need to pipe the results - from :meth:`~shotgun_api3.Shotgun.schema_field_read` into a - :meth:`~shotgun_api3.Shotgun.schema_field_create` or - :meth:`~shotgun_api3.Shotgun.schema_field_update`, you will need to reformat the - data in your script. - - .. note:: - If you don't specify a ``project_entity``, everything is reported as visible. - - .. note:: - The returned display names for this method will be localized when the ``localize`` Shotgun config property is set to ``True``. See :ref:`localization` for more information. - - >>> sg.schema_field_read('Asset', 'shots') - {'shots': {'data_type': {'editable': False, 'value': 'multi_entity'}, - 'description': {'editable': True, 'value': ''}, - 'editable': {'editable': False, 'value': True}, - 'entity_type': {'editable': False, 'value': 'Asset'}, - 'mandatory': {'editable': False, 'value': False}, - 'name': {'editable': True, 'value': 'Shots'}, - 'properties': {'default_value': {'editable': False, - 'value': None}, - 'summary_default': {'editable': True, - 'value': 'none'}, - 'valid_types': {'editable': True, - 'value': ['Shot']}}, - 'unique': {'editable': False, 'value': False}, - 'visible': {'editable': False, 'value': True}}} - - :param str entity_type: Entity type to get the schema for. - :param str field_name: Optional internal Shotgun name of the field to get the schema - definition for. If this parameter is excluded or set to ``None``, data structures of - all fields will be returned. Defaults to ``None``. Example: ``sg_temp_field``. - :param dict project_entity: Optional Project entity specifying which project to return - the listing for. If omitted or set to ``None``, per-project visibility settings are - not taken into consideration and the global list is returned. Example: - ``{'type': 'Project', 'id': 3}`` - :returns: a nested dict object containing a key/value pair for the ``field_name`` specified - and its properties, or if no field_name is specified, for all the fields of the - ``entity_type``. Properties that are ``'editable': True``, can be updated using the - :meth:`~shotgun_api3.Shotgun.schema_field_update` method. - :rtype: dict - """ - - params = { - "type": entity_type, - } - - if field_name: - params["field_name"] = field_name - - params = self._add_project_param(params, project_entity) - - return self._call_rpc("schema_field_read", params) - - def schema_field_create( - self, entity_type, data_type, display_name, properties=None - ): - """ - Create a field for the specified entity type. - - .. note:: - If the internal Shotgun field name computed from the provided ``display_name`` already - exists, the internal Shotgun field name will automatically be appended with ``_1`` in - order to create a unique name. The integer suffix will be incremented by 1 until a - unique name is found. - - >>> properties = {"summary_default": "count", "description": "Complexity breakdown of Asset"} - >>> sg.schema_field_create("Asset", "text", "Complexity", properties) - 'sg_complexity' - - :param str entity_type: Entity type to add the field to. - :param str data_type: Shotgun data type for the new field. - :param str display_name: Specifies the display name of the field you are creating. The - system name will be created from this display name and returned upon successful - creation. - :param dict properties: Dict of valid properties for the new field. Use this to specify - other field properties such as the 'description' or 'summary_default'. - :returns: The internal Shotgun name for the new field, this is different to the - ``display_name`` parameter passed in. - :rtype: str - """ - - params = { - "type": entity_type, - "data_type": data_type, - "properties": [{"property_name": "name", "value": display_name}], - } - params["properties"].extend( - self._dict_to_list(properties, key_name="property_name", value_name="value") - ) - - return self._call_rpc("schema_field_create", params) - - def schema_field_update( - self, entity_type, field_name, properties, project_entity=None - ): - """ - Update the properties for the specified field on an entity. - - .. note:: - Although the property name may be the key in a nested dictionary, like - 'summary_default', it is treated no differently than keys that are up - one level, like 'description'. - - >>> properties = {"name": "Test Number Field Renamed", "summary_default": "sum", - ... "description": "this is only a test"} - >>> sg.schema_field_update("Asset", "sg_test_number", properties) - True - - :param entity_type: Entity type of field to update. - :param field_name: Internal Shotgun name of the field to update. - :param properties: Dictionary with key/value pairs where the key is the property to be - updated and the value is the new value. - :param dict project_entity: Optional Project entity specifying which project to modify the - ``visible`` property for. If ``visible`` is present in ``properties`` and - ``project_entity`` is not set, an exception will be raised. Example: - ``{'type': 'Project', 'id': 3}`` - :returns: ``True`` if the field was updated. - - .. note:: - The ``project_entity`` parameter can only affect the state of the ``visible`` property - and has no impact on other properties. - - :rtype: bool - """ - - params = { - "type": entity_type, - "field_name": field_name, - "properties": [ - {"property_name": k, "value": v} - for k, v in six.iteritems((properties or {})) - ], - } - params = self._add_project_param(params, project_entity) - return self._call_rpc("schema_field_update", params) - - def schema_field_delete(self, entity_type, field_name): - """ - Delete the specified field from the entity type. - - >>> sg.schema_field_delete("Asset", "sg_temp_field") - True - - :param str entity_type: Entity type to delete the field from. - :param str field_name: Internal Shotgun name of the field to delete. - :returns: ``True`` if the field was deleted. - :rtype: bool - """ - - params = {"type": entity_type, "field_name": field_name} - - return self._call_rpc("schema_field_delete", params) - - def add_user_agent(self, agent): - """ - Add agent to the user-agent header. - - Appends agent to the user-agent string sent with every API request. - - >>> sg.add_user_agent("my_tool 1.0") - - :param str agent: string to append to user-agent. - """ - self._user_agents.append(agent) - - def reset_user_agent(self): - """ - Reset user agent to the default value. - - Example default user-agent:: - - shotgun-json (3.0.17); Python 2.6 (Mac); ssl OpenSSL 1.0.2d 9 Jul 2015 (validate) - - """ - ua_platform = "Unknown" - if self.client_caps.platform is not None: - ua_platform = self.client_caps.platform.capitalize() - - # create ssl validation string based on settings - validation_str = "validate" - if self.config.no_ssl_validation: - validation_str = "no-validate" - - self._user_agents = [ - "shotgun-json (%s)" % __version__, - "Python %s (%s)" % (self.client_caps.py_version, ua_platform), - "ssl %s (%s)" % (self.client_caps.ssl_version, validation_str), - ] - - def set_session_uuid(self, session_uuid): - """ - Set the browser session_uuid in the current Shotgun API instance. - - When this is set, any events generated by the API will include the ``session_uuid`` value - on the corresponding EventLogEntries. If there is a current browser session open with - this ``session_uuid``, the browser will display updates for these events. - - >>> sg.set_session_uuid("5a1d49b0-0c69-11e0-a24c-003048d17544") - - :param str session_uuid: The uuid of the browser session to be updated. - """ - - self.config.session_uuid = session_uuid - return - - def share_thumbnail( - self, - entities, - thumbnail_path=None, - source_entity=None, - filmstrip_thumbnail=False, - **kwargs, - ): - """ - Associate a thumbnail with more than one Shotgun entity. - - .. versionadded:: 3.0.9 - Requires Shotgun server v4.0.0+ - - Share the thumbnail from between entities without requiring uploading the thumbnail file - multiple times. You can use this in two ways: - - 1) Upload an image to set as the thumbnail on multiple entities. - 2) Update multiple entities to point to an existing entity's thumbnail. - - .. note:: - When sharing a filmstrip thumbnail, it is required to have a static thumbnail in - place before the filmstrip will be displayed in the Shotgun web UI. - If the :ref:`thumbnail is still processing and is using a placeholder - `, this method will error. - - Simple use case: - - >>> thumb = '/data/show/ne2/100_110/anim/01.mlk-02b.jpg' - >>> e = [{'type': 'Version', 'id': 123}, {'type': 'Version', 'id': 456}] - >>> sg.share_thumbnail(entities=e, thumbnail_path=thumb) - 4271 - - >>> e = [{'type': 'Version', 'id': 123}, {'type': 'Version', 'id': 456}] - >>> sg.share_thumbnail(entities=e, source_entity={'type':'Version', 'id': 789}) - 4271 - - :param list entities: The entities to update to point to the shared thumbnail provided in - standard entity dict format:: - - [{'type': 'Version', 'id': 123}, - {'type': 'Version', 'id': 456}] - :param str thumbnail_path: The full path to the local thumbnail file to upload and share. - Required if ``source_entity`` is not provided. - :param dict source_entity: The entity whos thumbnail will be the source for sharing. - Required if ``source_entity`` is not provided. - :param bool filmstrip_thumbnail: ``True`` to share the filmstrip thumbnail. ``False`` to - share the static thumbnail. Defaults to ``False``. - :returns: ``id`` of the Attachment entity representing the source thumbnail that is shared. - :rtype: int - :raises: :class:`ShotgunError` if not supported by server version or improperly called, - or :class:`ShotgunThumbnailNotReady` if thumbnail is still pending. - """ - if not self.server_caps.version or self.server_caps.version < (4, 0, 0): - raise ShotgunError( - "Thumbnail sharing support requires server " - "version 4.0 or higher, server is %s" % (self.server_caps.version,) - ) - - if not isinstance(entities, list) or len(entities) == 0: - raise ShotgunError( - "'entities' parameter must be a list of entity " - "hashes and may not be empty" - ) - - for e in entities: - if not isinstance(e, dict) or "id" not in e or "type" not in e: - raise ShotgunError( - "'entities' parameter must be a list of " - "entity hashes with at least 'type' and 'id' keys.\nInvalid " - "entity: %s" % e - ) - - if (not thumbnail_path and not source_entity) or ( - thumbnail_path and source_entity - ): - raise ShotgunError( - "You must supply either thumbnail_path OR source_entity." - ) - - # upload thumbnail - if thumbnail_path: - source_entity = entities.pop(0) - if filmstrip_thumbnail: - thumb_id = self.upload_filmstrip_thumbnail( - source_entity["type"], source_entity["id"], thumbnail_path, **kwargs - ) - else: - thumb_id = self.upload_thumbnail( - source_entity["type"], source_entity["id"], thumbnail_path, **kwargs - ) - else: - if ( - not isinstance(source_entity, dict) - or "id" not in source_entity - or "type" not in source_entity - ): - raise ShotgunError( - "'source_entity' parameter must be a dict " - "with at least 'type' and 'id' keys.\nGot: %s (%s)" - % (source_entity, type(source_entity)) - ) - - # only 1 entity in list and we already uploaded the thumbnail to it - if len(entities) == 0: - return thumb_id - - # update entities with source_entity thumbnail - entities_str = [] - for e in entities: - entities_str.append("%s_%s" % (e["type"], e["id"])) - # format for post request - if filmstrip_thumbnail: - filmstrip_thumbnail = 1 - params = { - "entities": ",".join(entities_str), - "source_entity": "%s_%s" % (source_entity["type"], source_entity["id"]), - "filmstrip_thumbnail": filmstrip_thumbnail, - } - - url = urllib.parse.urlunparse( - ( - self.config.scheme, - self.config.server, - "/upload/share_thumbnail", - None, - None, - None, - ) - ) - - result = self._send_form(url, params) - - if result.startswith("1:"): - # clearing thumbnail returns no attachment_id - try: - attachment_id = int(result.split(":", 2)[1].split("\n", 1)[0]) - except ValueError: - attachment_id = None - elif result.startswith("2"): - raise ShotgunThumbnailNotReady("Unable to share thumbnail: %s" % result) - else: - raise ShotgunError("Unable to share thumbnail: %s" % result) - - return attachment_id - - def upload_thumbnail(self, entity_type, entity_id, path, **kwargs): - """ - Upload a file from a local path and assign it as the thumbnail for the specified entity. - - .. note:: - Images will automatically be re-sized on the server to generate a size-appropriate image - file. However, the original file is retained as well and is accessible when you click - on the thumbnail image in the web UI. If you are using a local install of Shotgun and - have not enabled S3, this can eat up disk space if you're uploading really large source - images for your thumbnails. - - You can un-set (aka clear) a thumbnail on an entity using the - :meth:`~shotgun_api3.Shotgun.update` method and setting the **image** field to ``None``. - This will also unset the ``filmstrip_thumbnail`` field if it is set. - - Supported image file types include ``.jpg` and ``.png`` (preferred) but will also accept. - ``.gif```, ``.tif``, ``.tiff``, ``.bmp``, ``.exr``, ``.dpx``, and ``.tga``. - - This method wraps over :meth:`~shotgun_api3.Shotgun.upload`. Additional keyword arguments - passed to this method will be forwarded to the :meth:`~shotgun_api3.Shotgun.upload` method. - - :param str entity_type: Entity type to set the thumbnail for. - :param int entity_id: Id of the entity to set the thumbnail for. - :param str path: Full path to the thumbnail file on disk. - :returns: Id of the new attachment - """ - return self.upload( - entity_type, entity_id, path, field_name="thumb_image", **kwargs - ) - - def upload_filmstrip_thumbnail(self, entity_type, entity_id, path, **kwargs): - """ - Upload filmstrip thumbnail to specified entity. - - .. versionadded:: 3.0.9 - Requires Shotgun server v3.1.0+ - - Uploads a file from a local directory and assigns it as the filmstrip thumbnail for the - specified entity. The image must be a horizontal strip of any number of frames that are - exactly 240 pixels wide. Therefore the whole strip must be an exact multiple of 240 pixels - in width. The height can be anything (and will depend on the aspect ratio of the frames). - Any image file type that works for thumbnails will work for filmstrip thumbnails. - - Filmstrip thumbnails will only be visible in the Thumbnail field on an entity if a - regular thumbnail image is also uploaded to the entity. The standard thumbnail is - displayed by default as the poster frame. Then, on hover, the filmstrip thumbnail is - displayed and updated based on your horizontal cursor position for scrubbing. On mouseout, - the default thumbnail is displayed again as the poster frame. - - The url for a filmstrip thumbnail on an entity is available by querying for the - ``filmstrip_image field``. - - You can un-set (aka clear) a thumbnail on an entity using the - :meth:`~shotgun_api3.Shotgun.update` method and setting the **image** field to ``None``. - This will also unset the ``filmstrip_thumbnail`` field if it is set. - - This method wraps over :meth:`~shotgun_api3.Shotgun.upload`. Additional keyword arguments - passed to this method will be forwarded to the :meth:`~shotgun_api3.Shotgun.upload` method. - - >>> filmstrip_thumbnail = '/data/show/ne2/100_110/anim/01.mlk-02b_filmstrip.jpg' - >>> sg.upload_filmstrip_thumbnail("Version", 27, filmstrip_thumbnail) - 87 - - :param str entity_type: Entity type to set the filmstrip thumbnail for. - :param int entity_id: Id of the entity to set the filmstrip thumbnail for. - :param str path: Full path to the filmstrip thumbnail file on disk. - :returns: Id of the new Attachment entity created for the filmstrip thumbnail - :rtype: int - """ - if not self.server_caps.version or self.server_caps.version < (3, 1, 0): - raise ShotgunError( - "Filmstrip thumbnail support requires server version 3.1 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - return self.upload( - entity_type, entity_id, path, field_name="filmstrip_thumb_image", **kwargs - ) - - def upload( - self, - entity_type, - entity_id, - path, - field_name=None, - display_name=None, - tag_list=None, - ): - """ - Upload a file to the specified entity. - - Creates an Attachment entity for the file in Shotgun and links it to the specified entity. - You can optionally store the file in a field on the entity, change the display name, and - assign tags to the Attachment. - - .. note:: - Make sure to have retries for file uploads. Failures when uploading will occasionally happen. - When it does, immediately retrying to upload usually works - - >>> mov_file = '/data/show/ne2/100_110/anim/01.mlk-02b.mov' - >>> sg.upload("Shot", 423, mov_file, field_name="sg_latest_quicktime", - ... display_name="Latest QT") - 72 - - :param str entity_type: Entity type to link the upload to. - :param int entity_id: Id of the entity to link the upload to. - :param str path: Full path to an existing non-empty file on disk to upload. - :param str field_name: The internal Shotgun field name on the entity to store the file in. - This field must be a File/Link field type. - :param str display_name: The display name to use for the file. Defaults to the file name. - :param str tag_list: comma-separated string of tags to assign to the file. - :returns: Id of the Attachment entity that was created for the image. - :rtype: int - :raises: :class:`ShotgunError` on upload failure. - """ - # Basic validations of the file to upload. - path = os.path.abspath(os.path.expanduser(path or "")) - - # We need to check for string encodings that we aren't going to be able - # to support later in the upload process. If the given path wasn't already - # unicode, we will try to decode it as utf-8, and if that fails then we - # have to raise a sane exception. This will always work for ascii and utf-8 - # encoded strings, but will fail on some others if the string includes non - # ascii characters. - if not isinstance(path, str): - try: - path = path.decode("utf-8") - except UnicodeDecodeError: - raise ShotgunError( - "Could not upload the given file path. It is encoded as " - "something other than utf-8 or ascii. To upload this file, " - "it can be string encoded as utf-8, or given as unicode: %s" % path - ) - - if not os.path.isfile(path): - raise ShotgunError("Path must be a valid file, got '%s'" % path) - if os.path.getsize(path) == 0: - raise ShotgunError("Path cannot be an empty file: '%s'" % path) - - is_thumbnail = field_name in [ - "thumb_image", - "filmstrip_thumb_image", - "image", - "filmstrip_image", - ] - - # Supported types can be directly uploaded to Cloud storage - if self._requires_direct_s3_upload(entity_type, field_name): - return self._upload_to_storage( - entity_type, - entity_id, - path, - field_name, - display_name, - tag_list, - is_thumbnail, - ) - else: - return self._upload_to_sg( - entity_type, - entity_id, - path, - field_name, - display_name, - tag_list, - is_thumbnail, - ) - - def _upload_to_storage( - self, - entity_type, - entity_id, - path, - field_name, - display_name, - tag_list, - is_thumbnail, - ): - """ - Internal function to upload a file to the Cloud storage and link it to the specified entity. - - :param str entity_type: Entity type to link the upload to. - :param int entity_id: Id of the entity to link the upload to. - :param str path: Full path to an existing non-empty file on disk to upload. - :param str field_name: The internal Shotgun field name on the entity to store the file in. - This field must be a File/Link field type. - :param str display_name: The display name to use for the file. Defaults to the file name. - :param str tag_list: comma-separated string of tags to assign to the file. - :param bool is_thumbnail: indicates if the attachment is a thumbnail. - :returns: Id of the Attachment entity that was created for the image. - :rtype: int - """ - - filename = os.path.basename(path) - - # Step 1: get the upload url - - is_multipart_upload = os.path.getsize(path) > self._MULTIPART_UPLOAD_CHUNK_SIZE - - upload_info = self._get_attachment_upload_info( - is_thumbnail, filename, is_multipart_upload - ) - - # Step 2: upload the file - # We upload large files in multiple parts because it is more robust - # (and required when using S3 storage) - if is_multipart_upload: - self._multipart_upload_file_to_storage(path, upload_info) - else: - self._upload_file_to_storage(path, upload_info["upload_url"]) - - # Step 3: create the attachment - - url = urllib.parse.urlunparse( - ( - self.config.scheme, - self.config.server, - "/upload/api_link_file", - None, - None, - None, - ) - ) - - params = { - "entity_type": entity_type, - "entity_id": entity_id, - "upload_link_info": upload_info["upload_info"], - } - - params.update(self._auth_params()) - - if is_thumbnail: - if field_name == "filmstrip_thumb_image" or field_name == "filmstrip_image": - params["filmstrip"] = True - else: - if display_name is None: - display_name = filename - # we allow linking to nothing for generic reference use cases - if field_name is not None: - params["field_name"] = field_name - params["display_name"] = display_name - # None gets converted to a string and added as a tag... - if tag_list: - params["tag_list"] = tag_list - - result = self._send_form(url, params) - if not result.startswith("1"): - raise ShotgunError( - "Could not upload file successfully, but " - "not sure why.\nPath: %s\nUrl: %s\nError: %s" % (path, url, result) - ) - - LOG.debug("Attachment linked to content on Cloud storage") - - attachment_id = int(result.split(":", 2)[1].split("\n", 1)[0]) - return attachment_id - - def _upload_to_sg( - self, - entity_type, - entity_id, - path, - field_name, - display_name, - tag_list, - is_thumbnail, - ): - """ - Internal function to upload a file to Shotgun and link it to the specified entity. - - :param str entity_type: Entity type to link the upload to. - :param int entity_id: Id of the entity to link the upload to. - :param str path: Full path to an existing non-empty file on disk to upload. - :param str field_name: The internal Shotgun field name on the entity to store the file in. - This field must be a File/Link field type. - :param str display_name: The display name to use for the file. Defaults to the file name. - :param str tag_list: comma-separated string of tags to assign to the file. - :param bool is_thumbnail: indicates if the attachment is a thumbnail. - - :returns: Id of the Attachment entity that was created for the image. - :rtype: int - """ - - params = { - "entity_type": entity_type, - "entity_id": entity_id, - } - - params.update(self._auth_params()) - - if is_thumbnail: - url = urllib.parse.urlunparse( - ( - self.config.scheme, - self.config.server, - "/upload/publish_thumbnail", - None, - None, - None, - ) - ) - params["thumb_image"] = open(path, "rb") - if field_name == "filmstrip_thumb_image" or field_name == "filmstrip_image": - params["filmstrip"] = True - else: - url = urllib.parse.urlunparse( - ( - self.config.scheme, - self.config.server, - "/upload/upload_file", - None, - None, - None, - ) - ) - if display_name is None: - display_name = os.path.basename(path) - # we allow linking to nothing for generic reference use cases - if field_name is not None: - params["field_name"] = field_name - params["display_name"] = display_name - # None gets converted to a string and added as a tag... - if tag_list: - params["tag_list"] = tag_list - - params["file"] = open(path, "rb") - - result = self._send_form(url, params) - - if not result.startswith("1"): - raise ShotgunError( - "Could not upload file successfully, but " - "not sure why.\nPath: %s\nUrl: %s\nError: %s" % (path, url, result) - ) - - attachment_id = int(result.split(":", 2)[1].split("\n", 1)[0]) - return attachment_id - - def _get_attachment_upload_info(self, is_thumbnail, filename, is_multipart_upload): - """ - Internal function to get the information needed to upload a file to Cloud storage. - - :param bool is_thumbnail: indicates if the attachment is a thumbnail. - :param str filename: name of the file that will be uploaded. - :param bool is_multipart_upload: Indicates if we want multi-part upload information back. - - :returns: dictionary containing upload details from the server. - These details are used throughout the upload process. - :rtype: dict - """ - - if is_thumbnail: - upload_type = "Thumbnail" - else: - upload_type = "Attachment" - - params = {"upload_type": upload_type, "filename": filename} - - params["multipart_upload"] = is_multipart_upload - - upload_url = "/upload/api_get_upload_link_info" - url = urllib.parse.urlunparse( - (self.config.scheme, self.config.server, upload_url, None, None, None) - ) - - upload_info = self._send_form(url, params) - if not upload_info.startswith("1"): - raise ShotgunError( - "Could not get upload_url but " - "not sure why.\nPath: %s\nUrl: %s\nError: %s" - % (filename, url, upload_info) - ) - - LOG.debug("Completed rpc call to %s" % (upload_url)) - - upload_info_parts = upload_info.split("\n") - - return { - "upload_url": upload_info_parts[1], - "timestamp": upload_info_parts[2], - "upload_type": upload_info_parts[3], - "upload_id": upload_info_parts[4], - "upload_info": upload_info, - } - - def download_attachment(self, attachment=False, file_path=None, attachment_id=None): - """ - Download the file associated with a Shotgun Attachment. - - >>> version = sg.find_one("Version", [["id", "is", 7115]], ["sg_uploaded_movie"]) - >>> local_file_path = "/var/tmp/%s" % version["sg_uploaded_movie"]["name"] - >>> sg.download_attachment(version["sg_uploaded_movie"], file_path=local_file_path) - /var/tmp/100b_scene_output_v032.mov - - .. warning:: - - On older (< v5.1.0) Shotgun versions, non-downloadable files - on Shotgun don't raise exceptions, they cause a server error which - returns a 200 with the page content. - - :param dict attachment: Usually a dictionary representing an Attachment entity. - The dictionary should have a ``url`` key that specifies the download url. - Optionally, the dictionary can be a standard entity hash format with ``id`` and - ``type`` keys as long as ``"type"=="Attachment"``. This is only supported for - backwards compatibility (#22150). - - If an int value is passed in, the Attachment entity with the matching id will - be downloaded from the Shotgun server. - :param str file_path: Optional file path to write the data directly to local disk. This - avoids loading all of the data in memory and saves the file locally at the given path. - :param id attachment_id: (deprecated) Optional ``id`` of the Attachment entity in Shotgun to - download. - - .. note: - This parameter exists only for backwards compatibility for scripts specifying - the parameter with keywords. - :returns: If ``file_path`` is provided, returns the path to the file on disk. If - ``file_path`` is ``None``, returns the actual data of the file, as str in Python 2 or - bytes in Python 3. - :rtype: str | bytes - """ - # backwards compatibility when passed via keyword argument - if attachment is False: - if type(attachment_id) == int: - attachment = attachment_id - else: - raise TypeError( - "Missing parameter 'attachment'. Expected a " - "dict, int, NoneType value or" - "an int for parameter attachment_id" - ) - # write to disk - if file_path: - try: - fp = open(file_path, "wb") - except IOError as e: - raise IOError( - "Unable to write Attachment to disk using " "file_path. %s" % e - ) - - url = self.get_attachment_download_url(attachment) - if url is None: - return None - - cookie_handler = None - if self.config.server in url: - # We only need to set the auth cookie for downloads from Shotgun server - cookie_handler = self.get_auth_cookie_handler() - - opener = self._build_opener(cookie_handler) - try: - request = urllib.request.Request(url) - request.add_header("user-agent", "; ".join(self._user_agents)) - req = opener.open(request) - if file_path: - shutil.copyfileobj(req, fp) - else: - attachment = req.read() - # 400 [sg] Attachment id doesn't exist or is a local file - # 403 [s3] link is invalid - except urllib.error.URLError as e: - if file_path: - fp.close() - err = "Failed to open %s\n%s" % (url, e) - if hasattr(e, "code"): - if e.code == 400: - err += "\nAttachment may not exist or is a local file?" - elif e.code == 403: - # Only parse the body if it is an Amazon S3 url. - if ( - url.find("s3.amazonaws.com") != -1 - and e.headers["content-type"] == "application/xml" - ): - body = [sgutils.ensure_text(line) for line in e.readlines()] - if body: - xml = "".join(body) - # Once python 2.4 support is not needed we can think about using - # elementtree. The doc is pretty small so this shouldn't be an issue. - match = re.search("(.*)", xml) - if match: - err += " - %s" % (match.group(1)) - elif e.code == 409 or e.code == 410: - # we may be dealing with a file that is pending/failed a malware scan, e.g: - # 409: This file is undergoing a malware scan, please try again in a few minutes - # 410: File scanning has detected malware and the file has been quarantined - lines = e.readlines() - if lines: - err += "\n%s\n" % "".join(lines) - raise ShotgunFileDownloadError(err) - else: - if file_path: - if not fp.closed: - fp.close() - return file_path - else: - return attachment - - def get_auth_cookie_handler(self): - """ - Return an urllib cookie handler containing a cookie for FPTR - authentication. - - Looks up session token and sets that in a cookie in the :mod:`urllib2` - handler. - This is used internally for downloading attachments from FPTR. - """ - sid = self.get_session_token() - cj = http_cookiejar.LWPCookieJar() - c = http_cookiejar.Cookie( - "0", - "_session_id", - sid, - None, - False, - self.config.server, - False, - False, - "/", - True, - False, - None, - True, - None, - None, - {}, - ) - cj.set_cookie(c) - return urllib.request.HTTPCookieProcessor(cj) - - def get_attachment_download_url(self, attachment): - """ - Return the URL for downloading provided Attachment. - - :param mixed attachment: Usually a dict representing An Attachment entity in Shotgun to - return the download url for. If the ``url`` key is present, it will be used as-is for - the download url. If the ``url`` key is not present, a url will be constructed pointing - at the current Shotgun server for downloading the Attachment entity using the ``id``. - - If ``None`` is passed in, it is silently ignored in order to avoid raising an error when - results from a :meth:`~shotgun_api3.Shotgun.find` are passed off to - :meth:`~shotgun_api3.Shotgun.download_attachment` - - .. note:: - Support for passing in an int representing the Attachment ``id`` is deprecated - - :returns: the download URL for the Attachment or ``None`` if ``None`` was passed to - ``attachment`` parameter. - :rtype: str - """ - # TODO: Support for a standard entity hash should be removed: #22150 - attachment_id = None - if isinstance(attachment, int): - attachment_id = attachment - elif isinstance(attachment, dict): - try: - url = attachment["url"] - except KeyError: - if ( - "id" in attachment - and "type" in attachment - and attachment["type"] == "Attachment" - ): - attachment_id = attachment["id"] - else: - raise ValueError("Missing 'url' key in Attachment dict") - elif attachment is None: - url = None - else: - raise TypeError( - "Unable to determine download url. Expected " - "dict, int, or NoneType. Instead got %s" % type(attachment) - ) - - if attachment_id: - url = urllib.parse.urlunparse( - ( - self.config.scheme, - self.config.server, - "/file_serve/attachment/%s" - % urllib.parse.quote(str(attachment_id)), - None, - None, - None, - ) - ) - return url - - def authenticate_human_user(self, user_login, user_password, auth_token=None): - """ - Authenticate Shotgun HumanUser. - - Authenticates a user given the login, password, and optionally, one-time auth token (when - two-factor authentication is required). The user must be a ``HumanUser`` entity and the - account must be active. - - >>> sg.authenticate_human_user("rhendriks", "c0mPre$Hi0n", None) - {"type": "HumanUser", "id": 123, "name": "Richard Hendriks"} - - :param str user_login: Login name of Shotgun HumanUser - :param str user_password: Password for Shotgun HumanUser - :param str auth_token: One-time token required to authenticate Shotgun HumanUser - when two-factor authentication is turned on. - :returns: Standard Shotgun dictionary representing the HumanUser if authentication - succeeded. ``None`` if authentication failed for any reason. - :rtype: dict - """ - if not user_login: - raise ValueError("Please supply a username to authenticate.") - - if not user_password: - raise ValueError("Please supply a password for the user.") - - # Override permissions on Config obj - original_login = self.config.user_login - original_password = self.config.user_password - original_auth_token = self.config.auth_token - - self.config.user_login = user_login - self.config.user_password = user_password - self.config.auth_token = auth_token - - try: - data = self.find_one( - "HumanUser", - [["sg_status_list", "is", "act"], ["login", "is", user_login]], - ["id", "login"], - "", - "all", - ) - # Set back to default - There finally and except cannot be used together in python2.4 - self.config.user_login = original_login - self.config.user_password = original_password - self.config.auth_token = original_auth_token - return data - except Fault: - # Set back to default - There finally and except cannot be used together in python2.4 - self.config.user_login = original_login - self.config.user_password = original_password - self.config.auth_token = original_auth_token - except Exception: - # Set back to default - There finally and except cannot be used together in python2.4 - self.config.user_login = original_login - self.config.user_password = original_password - self.config.auth_token = original_auth_token - raise - - def update_project_last_accessed(self, project, user=None): - """ - Update a Project's ``last_accessed_by_current_user`` field to the current timestamp. - - This helps keep track of the recent Projects each user has worked on and enables scripts - and apps to use this information to display "Recent Projects" for users as a convenience. - - .. versionadded:: - Requires Shotgun v5.3.20+ - - >>> sg.update_project_last_accessed({"type": "Project", "id": 66}, - ... {"type": "HumanUser", "id": 43}) - - :param dict project: Standard Project entity dictionary - :param dict user: Standard user entity dictionary. This is optional if the current API - instance is using user-based authenitcation, or has specified ``sudo_as_login``. In - these cases, if ``user`` is not provided, the ``sudo_as_login`` value or ``login`` - value from the current instance will be used instead. - """ - if self.server_caps.version and self.server_caps.version < (5, 3, 20): - raise ShotgunError( - "update_project_last_accessed requires server version 5.3.20 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - if not user: - # Try to use sudo as user if present - if self.config.sudo_as_login: - user = self.find_one( - "HumanUser", [["login", "is", self.config.sudo_as_login]] - ) - # Try to use login if present - if self.config.user_login: - user = self.find_one( - "HumanUser", [["login", "is", self.config.user_login]] - ) - - params = { - "project_id": project["id"], - } - if user: - params["user_id"] = user["id"] - - record = self._call_rpc("update_project_last_accessed_by_current_user", params) - self._parse_records(record)[0] - - def note_thread_read(self, note_id, entity_fields=None): - """ - Return the full conversation for a given note, including Replies and Attachments. - - Returns a complex data structure on the following form:: - - [{'content': 'Please add more awesomeness to the color grading.', - 'created_at': '2015-07-14 21:33:28 UTC', - 'created_by': {'id': 38, - 'name': 'John Pink', - 'status': 'act', - 'type': 'HumanUser', - 'valid': 'valid'}, - 'id': 6013, - 'type': 'Note'}, - {'created_at': '2015-07-14 21:33:32 UTC', - 'created_by': {'id': 38, - 'name': 'John Pink', - 'status': 'act', - 'type': 'HumanUser', - 'valid': 'valid'}, - 'id': 159, - 'type': 'Attachment'}, - {'content': 'More awesomeness added', - 'created_at': '2015-07-14 21:54:51 UTC', - 'id': 5, - 'type': 'Reply', - 'user': {'id': 38, - 'name': 'David Blue', - 'status': 'act', - 'type': 'HumanUser', - 'valid': 'valid'}}] - - The list is returned in descending chronological order. - - If you wish to include additional fields beyond the ones that are - returned by default, you can specify these in an entity_fields - dictionary. This dictionary should be keyed by entity type and each - key should contain a list of fields to retrieve, for example:: - - { "Note": ["created_by.HumanUser.image", - "addressings_to", - "playlist", - "user" ], - "Reply": ["content"], - "Attachment": ["filmstrip_image", - "local_storage", - "this_file", - "image"] - } - - :param int note_id: The id for the note to be retrieved - :param dict entity_fields: Additional fields to retrieve as part of the request. - See above for details. - :returns: A list of dictionaries. See above for example. - :rtype: list - """ - - if self.server_caps.version and self.server_caps.version < (6, 2, 0): - raise ShotgunError( - "note_thread requires server version 6.2.0 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - entity_fields = entity_fields or {} - - if not isinstance(entity_fields, dict): - raise ValueError("entity_fields parameter must be a dictionary") - - params = {"note_id": note_id, "entity_fields": entity_fields} - - record = self._call_rpc("note_thread_contents", params) - result = self._parse_records(record) - return result - - def text_search(self, text, entity_types, project_ids=None, limit=None): - """ - Search across the specified entity types for the given text. - - This method can be used to implement auto completion or a Shotgun global search. The method - requires a text input phrase that is at least three characters long, or an exception will - be raised. - - Several ways to limit the results of the query are available: - - - Using the ``project_ids`` parameter, you can provide a list of Project ids to search - across. Leaving this at its default value of ``None`` will search across all Shotgun data. - - - You need to define which subset of entity types to search using the ``entity_types`` - parameter. Each of these entity types can be associated with a filter query to further - reduce the list of matches. The filter list is using the standard filter syntax used by - for example the :meth:`~shotgun_api3.Shotgun.find` method. - - **Example: Constrain the search to all Tasks but Character Assets only** - - >>> entity_types = { - ... "Asset": [["sg_asset_type", "is", "Character"]], - ... "Task": [] - ... } - >>> sg.text_search("bunny", entity_types) - {'matches': [{'id': 734, - 'type': 'Asset', - 'name': 'Bunny', - 'project_id': 65, - 'image': 'https://...', - 'links': ['', ''], - 'status': 'fin'}, - ... - {'id': 558, - 'type': 'Task' - 'name': 'FX', - 'project_id': 65, - 'image': 'https://...', - 'links': ['Shot', 'bunny_010_0010'], - 'status': 'fin'}], - 'terms': ['bunny']} - - The links field will contain information about any linked entity. This is useful when, for - example, presenting Tasks and you want to display what Shot or Asset the Task is associated - with. - - :param str text: Text to search for. This must be at least three characters long, or an - exception will be raised. - :param dict entity_types: Dictionary to specify which entity types to search across. See - above for usage examples. - :param list project_ids: List of Projects to search. By default, all projects will be - searched. - :param int limit: Specify the maximum number of matches to return. - :returns: A complex dictionary structure, see above for example. - :rtype: dict - """ - if self.server_caps.version and self.server_caps.version < (6, 2, 0): - raise ShotgunError( - "auto_complete requires server version 6.2.0 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - # convert entity_types structure into the form - # that the API endpoint expects - if not isinstance(entity_types, dict): - raise ValueError("entity_types parameter must be a dictionary") - - api_entity_types = {} - for entity_type, filter_list in six.iteritems(entity_types): - - if isinstance(filter_list, (list, tuple)): - resolved_filters = _translate_filters(filter_list, filter_operator=None) - api_entity_types[entity_type] = resolved_filters - else: - raise ValueError( - "value of entity_types['%s'] must " - "be a list or tuple." % entity_type - ) - - project_ids = project_ids or [] - - params = { - "text": text, - "entity_types": api_entity_types, - "project_ids": project_ids, - "max_results": limit, - } - - record = self._call_rpc("query_display_name_cache", params) - result = self._parse_records(record)[0] - return result - - def activity_stream_read( - self, - entity_type, - entity_id, - entity_fields=None, - min_id=None, - max_id=None, - limit=None, - ): - """ - Retrieve activity stream data from Shotgun. - - This data corresponds to the data that is displayed in the - Activity tab for an entity in the Shotgun Web UI. - - A complex data structure on the following form will be - returned from Shotgun:: - - {'earliest_update_id': 50, - 'entity_id': 65, - 'entity_type': 'Project', - 'latest_update_id': 79, - 'updates': [{'created_at': '2015-07-15 11:06:55 UTC', - 'created_by': {'id': 38, - 'image': '6641', - 'name': 'John Smith', - 'status': 'act', - 'type': 'HumanUser'}, - 'id': 79, - 'meta': {'entity_id': 6004, - 'entity_type': 'Version', - 'type': 'new_entity'}, - 'primary_entity': {'id': 6004, - 'name': 'Review_turntable_v2', - 'status': 'rev', - 'type': 'Version'}, - 'read': False, - 'update_type': 'create'}, - {...}, - ] - } - - The main payload of the return data can be found inside the 'updates' - key, containing a list of dictionaries. This list is always returned - in descending date order. Each item may contain different fields - depending on their update type. The primary_entity key represents the - main Shotgun entity that is associated with the update. By default, - this entity is returned with a set of standard fields. By using the - entity_fields parameter, you can extend the returned data to include - additional fields. If for example you wanted to return the asset type - for all assets and the linked sequence for all Shots, pass the - following entity_fields:: - - {"Shot": ["sg_sequence"], "Asset": ["sg_asset_type"]} - - Deep queries can be used in this syntax if you want to - traverse into connected data. - - :param str entity_type: Entity type to retrieve activity stream for - :param int entity_id: Entity id to retrieve activity stream for - :param list entity_fields: List of additional fields to include. - See above for details - :param int max_id: Do not retrieve ids greater than this id. - This is useful when implementing paging. - :param int min_id: Do not retrieve ids lesser than this id. - This is useful when implementing caching of - the event stream data and you want to - "top up" an existing cache. - :param int limit: Limit the number of returned records. If not specified, - the system default will be used. - :returns: A complex activity stream data structure. See above for details. - :rtype: dict - """ - if self.server_caps.version and self.server_caps.version < (6, 2, 0): - raise ShotgunError( - "activity_stream requires server version 6.2.0 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - # set up parameters to send to server. - entity_fields = entity_fields or {} - - if not isinstance(entity_fields, dict): - raise ValueError("entity_fields parameter must be a dictionary") - - params = { - "type": entity_type, - "id": entity_id, - "max_id": max_id, - "min_id": min_id, - "limit": limit, - "entity_fields": entity_fields, - } - - record = self._call_rpc("activity_stream", params) - result = self._parse_records(record)[0] - return result - - def nav_expand(self, path, seed_entity_field=None, entity_fields=None): - """ - Expand the navigation hierarchy for the supplied path. - - .. warning:: - - This is an experimental method that is not officially part of the - python-api. Usage of this method is discouraged. This method's name, - arguments, and argument types may change at any point. - - """ - return self._call_rpc( - "nav_expand", - { - "path": path, - "seed_entity_field": seed_entity_field, - "entity_fields": entity_fields, - }, - ) - - def nav_search_string(self, root_path, search_string, seed_entity_field=None): - """ - Search function adapted to work with the navigation hierarchy. - - .. warning:: - - This is an experimental method that is not officially part of the - python-api. Usage of this method is discouraged. This method's name, - arguments, and argument types may change at any point. - """ - return self._call_rpc( - "nav_search", - { - "root_path": root_path, - "seed_entity_field": seed_entity_field, - "search_criteria": {"search_string": search_string}, - }, - ) - - def nav_search_entity(self, root_path, entity, seed_entity_field=None): - """ - Search function adapted to work with the navigation hierarchy. - - .. warning:: - - This is an experimental method that is not officially part of the - python-api. Usage of this method is discouraged. This method's name, - arguments, and argument types may change at any point. - - """ - return self._call_rpc( - "nav_search", - { - "root_path": root_path, - "seed_entity_field": seed_entity_field, - "search_criteria": {"entity": entity}, - }, - ) - - def get_session_token(self): - """ - Get the session token associated with the current session. - - If a session token has already been established, this is returned, otherwise a new one is - generated on the server and returned. - - >>> sg.get_session_token() - dd638be7d07c39fa73d935a775558a50 - - :returns: String containing a session token. - :rtype: str - """ - if self.config.session_token: - return self.config.session_token - - rv = self._call_rpc("get_session_token", None) - session_token = (rv or {}).get("session_id") - if not session_token: - raise RuntimeError("Could not extract session_id from %s", rv) - self.config.session_token = session_token - - return session_token - - def preferences_read(self, prefs=None): - """ - Get a subset of the site preferences. - - >>> sg.preferences_read() - { - "pref_name": "pref value" - } - - :param list prefs: An optional list of preference names to return. - :returns: Dictionary of preferences and their values. - :rtype: dict - """ - if self.server_caps.version and self.server_caps.version < (7, 10, 0): - raise ShotgunError( - "preferences_read requires server version 7.10.0 or " - "higher, server is %s" % (self.server_caps.version,) - ) - - prefs = prefs or [] - - return self._call_rpc("preferences_read", {"prefs": prefs}) - - def user_subscriptions_read(self): - """ - Get the list of user subscriptions. - - :returns: A list of user subscriptions where each subscription is a - dictionary containing the ``humanUserId`` and ``subscription`` - fields. - :rtype: list - """ - - return self._call_rpc("user_subscriptions_read", None) - - def user_subscriptions_create(self, users): - # type: (list[dict[str, Union[str, list[str], None]) -> bool - """ - Assign subscriptions to users. - - :param list users: list of user subscriptions to assign. - Each subscription must be a dictionary with the ``humanUserId`` and - ``subscription`` fields. - The ``subscription`` is either ``None``, a single string, or an - array of strings with subscription information. - - :returns: ``True`` if the request succedeed, ``False`` if otherwise. - :rtype: bool - """ - - response = self._call_rpc("user_subscriptions_create", {"users": users}) - - if not isinstance(response, dict): - return False - - return response.get("status") == "success" - - def _build_opener(self, handler): - """ - Build urllib2 opener with appropriate proxy handler. - """ - handlers = [] - if self.__ca_certs and not NO_SSL_VALIDATION: - handlers.append(CACertsHTTPSHandler(self.__ca_certs)) - - if self.config.proxy_handler: - handlers.append(self.config.proxy_handler) - - if handler is not None: - handlers.append(handler) - return urllib.request.build_opener(*handlers) - - @classmethod - def _get_certs_file(cls, ca_certs): - """ - The following method tells the API where to look for - certificate authorities certificates (we will be referring to these - as CAC from now on). Here's how the Python API interacts with those. - - Auth and CRUD operations - ======================== - These operations are executed with httplib2. httplib2 ships with a - list of CACs instead of asking Python's ssl module for them. - - Upload/Downloads - ================ - These operations are executed using urllib2. urllib2 asks a Python - module called `ssl` for CACs. We have bundled certifi with the API - so that we can be sure the certs are correct at the time of the API - release. This does however mean when the certs change we must update - the API to contain the latest certifi. - This approach is preferable to not using certifi since, on Windows, - ssl searches for CACs in the Windows Certificate Store, on - Linux/macOS, it asks the OpenSSL library linked with Python for CACs. - Depending on how Python was compiled for a given DCC, Python may be - linked against the OpenSSL from the OS or a copy of OpenSSL distributed - with the DCC. This impacts which versions of the certificates are - available to Python, as an OS level OpenSSL will be aware of system - wide certificates that have been added, while an OpenSSL that comes - with a DCC is likely bundling a list of certificates that get update - with each release and may not contain system wide certificates. - - Using custom CACs - ================= - When a user requires a non-standard CAC, the SHOTGUN_API_CACERTS - environment variable allows to provide an alternate location for - the CACs. - - :param ca_certs: A default cert can be provided - :return: The cert file path to use. - """ - if ca_certs is not None: - # certs were provided up front so use these - return ca_certs - elif "SHOTGUN_API_CACERTS" in os.environ: - return os.environ.get("SHOTGUN_API_CACERTS") - else: - # No certs have been specifically provided fallback to using the - # certs shipped with this API. - # We bundle certifi with this API so that we have a higher chance - # of using an uptodate certificate, rather than relying - # on the certs that are bundled with Python or the OS in some cases. - # However we can't use certifi.where() since that searches for the - # cacert.pem file using the sys.path and this means that if another - # copy of certifi can be found first, then it won't use ours. - # So we manually generate the path to the cert, but still use certifi - # to make it easier for updating the bundled cert with the API. - cur_dir = os.path.dirname(os.path.abspath(__file__)) - # Now add the rest of the path to the cert file. - cert_file = os.path.join(cur_dir, "lib", "certifi", "cacert.pem") - return cert_file - - def _turn_off_ssl_validation(self): - """ - Turn off SSL certificate validation. - """ - global NO_SSL_VALIDATION - self.config.no_ssl_validation = True - NO_SSL_VALIDATION = True - # reset ssl-validation in user-agents - self._user_agents = [ - ( - "ssl %s (no-validate)" % self.client_caps.ssl_version - if ua.startswith("ssl ") - else ua - ) - for ua in self._user_agents - ] - - # Deprecated methods from old wrapper - def schema(self, entity_type): - """ - .. deprecated:: 3.0.0 - Use :meth:`~shotgun_api3.Shotgun.schema_field_read` instead. - """ - raise ShotgunError( - "Deprecated: use schema_field_read('%s') instead" % entity_type - ) - - def entity_types(self): - """ - .. deprecated:: 3.0.0 - Use :meth:`~shotgun_api3.Shotgun.schema_entity_read` instead. - """ - raise ShotgunError("Deprecated: use schema_entity_read() instead") - - # ======================================================================== - # RPC Functions - - def _call_rpc(self, method, params, include_auth_params=True, first=False): - """ - Call the specified method on the Shotgun Server sending the supplied payload. - """ - - LOG.debug("Starting rpc call to %s with params %s" % (method, params)) - - params = self._transform_outbound(params) - payload = self._build_payload( - method, params, include_auth_params=include_auth_params - ) - encoded_payload = self._encode_payload(payload) - - req_headers = { - "content-type": "application/json; charset=utf-8", - "connection": "keep-alive", - } - - if self.config.localized is True: - req_headers["locale"] = "auto" - - attempt = 1 - while attempt <= self.MAX_ATTEMPTS: - http_status, resp_headers, body = self._make_call( - "POST", - self.config.api_path, - encoded_payload, - req_headers, - ) - - LOG.debug("Completed rpc call to %s" % (method)) - - try: - self._parse_http_status(http_status) - except ProtocolError as e: - e.headers = resp_headers - - # We've seen some rare instances of PTR returning 502 for issues that - # appear to be caused by something internal to PTR. We're going to - # allow for limited retries for those specifically. - if attempt != self.MAX_ATTEMPTS and e.errcode in [502, 504]: - LOG.debug("Got a 502 or 504 response. Waiting and retrying...") - time.sleep(float(attempt) * self.BACKOFF) - attempt += 1 - continue - elif e.errcode == 403: - # 403 is returned with custom error page when api access is blocked - e.errmsg += ": %s" % body - raise - else: - break - - response = self._decode_response(resp_headers, body) - self._response_errors(response) - response = self._transform_inbound(response) - - if not isinstance(response, dict) or "results" not in response: - return response - - results = response.get("results") - if first and isinstance(results, list): - return results[0] - return results - - def _auth_params(self): - """ - Return a dictionary of the authentication parameters being used. - """ - # Used to authenticate HumanUser credentials - if self.config.user_login and self.config.user_password: - auth_params = { - "user_login": str(self.config.user_login), - "user_password": str(self.config.user_password), - } - if self.config.auth_token: - auth_params["auth_token"] = str(self.config.auth_token) - - # Use script name instead - elif self.config.script_name and self.config.api_key: - auth_params = { - "script_name": str(self.config.script_name), - "script_key": str(self.config.api_key), - } - - # Authenticate using session_id - elif self.config.session_token: - if self.server_caps.version and self.server_caps.version < (5, 3, 0): - raise ShotgunError( - "Session token based authentication requires server version " - "5.3.0 or higher, server is %s" % (self.server_caps.version,) - ) - - auth_params = {"session_token": str(self.config.session_token)} - - # Request server side to raise exception for expired sessions. - # This was added in as part of Shotgun 5.4.4 - if self.server_caps.version and self.server_caps.version > (5, 4, 3): - auth_params["reject_if_expired"] = True - - else: - raise ValueError("invalid auth params") - - if self.config.session_uuid: - auth_params["session_uuid"] = self.config.session_uuid - - # Make sure sudo_as_login is supported by server version - if self.config.sudo_as_login: - if self.server_caps.version and self.server_caps.version < (5, 3, 12): - raise ShotgunError( - "Option 'sudo_as_login' requires server version 5.3.12 or " - "higher, server is %s" % (self.server_caps.version,) - ) - auth_params["sudo_as_login"] = self.config.sudo_as_login - - if self.config.extra_auth_params: - auth_params.update(self.config.extra_auth_params) - - return auth_params - - def _sanitize_auth_params(self, params): - """ - Given an authentication parameter dictionary, sanitize any sensitive - information and return the sanitized dict copy. - """ - sanitized_params = copy.copy(params) - for k in ["user_password", "script_key", "session_token"]: - if k in sanitized_params: - sanitized_params[k] = "********" - return sanitized_params - - def _build_payload(self, method, params, include_auth_params=True): - """ - Build the payload to be send to the rpc endpoint. - """ - if not method: - raise ValueError("method is empty") - - call_params = [] - - if include_auth_params: - auth_params = self._auth_params() - call_params.append(auth_params) - - if params: - call_params.append(params) - - return {"method_name": method, "params": call_params} - - def _encode_payload(self, payload): - """ - Encode the payload to a string to be passed to the rpc endpoint. - - The payload is json encoded as a unicode string if the content - requires it. The unicode string is then encoded as 'utf-8' as it must - be in a single byte encoding to go over the wire. - """ - - wire = json.dumps(payload, ensure_ascii=False) - return sgutils.ensure_binary(wire) - - def _make_call(self, verb, path, body, headers): - """ - Make an HTTP call to the server. - - Handles retry and failure. - """ - - attempt = 0 - req_headers = {} - req_headers["user-agent"] = "; ".join(self._user_agents) - if self.config.authorization: - req_headers["Authorization"] = self.config.authorization - - req_headers.update(headers or {}) - body = body or None - - max_rpc_attempts = self.config.max_rpc_attempts - rpc_attempt_interval = self.config.rpc_attempt_interval / 1000.0 - - while attempt < max_rpc_attempts: - attempt += 1 - try: - return self._http_request(verb, path, body, req_headers) - except ssl.SSLEOFError as e: - # SG-34910 - EOF occurred in violation of protocol (_ssl.c:2426) - # This issue seems to be related to proxy and keep alive. - # It looks like, sometimes, the proxy drops the connection on - # the TCP/TLS level despites the keep-alive. So we need to close - # the connection and make a new attempt. - LOG.debug("SSLEOFError: {}".format(e)) - self._close_connection() - if attempt == max_rpc_attempts: - LOG.debug("Request failed. Giving up after %d attempts." % attempt) - raise - # This is the exact same block as the "except Exception" bellow. - # We need to do it here because the next except will match it - # otherwise and will not re-attempt. - # When we drop support of Python 2 and we will probably drop the - # next except, we might want to remove this except too. - except ssl_error_classes as e: - # Test whether the exception is due to the fact that this is an older version of - # Python that cannot validate certificates encrypted with SHA-2. If it is, then - # fall back on disabling the certificate validation and try again - unless the - # SHOTGUN_FORCE_CERTIFICATE_VALIDATION environment variable has been set by the - # user. In that case we simply raise the exception. Any other exceptions simply - # get raised as well. - # - # For more info see: - # https://www.shotgridsoftware.com/blog/important-ssl-certificate-renewal-and-sha-2/ - # - # SHA-2 errors look like this: - # [Errno 1] _ssl.c:480: error:0D0C50A1:asn1 encoding routines:ASN1_item_verify: - # unknown message digest algorithm - # - # Any other exceptions simply get raised. - if ( - "unknown message digest algorithm" not in str(e) - or "SHOTGUN_FORCE_CERTIFICATE_VALIDATION" in os.environ - ): - raise - - if self.config.no_ssl_validation is False: - LOG.warning( - "SSL Error: this Python installation is incompatible with " - "certificates signed with SHA-2. Disabling certificate validation. " - "For more information, see https://www.shotgridsoftware.com/blog/" - "important-ssl-certificate-renewal-and-sha-2/" - ) - self._turn_off_ssl_validation() - # reload user agent to reflect that we have turned off ssl validation - req_headers["user-agent"] = "; ".join(self._user_agents) - - self._close_connection() - if attempt == max_rpc_attempts: - LOG.debug("Request failed. Giving up after %d attempts." % attempt) - raise - except Exception: - self._close_connection() - if attempt == max_rpc_attempts: - LOG.debug("Request failed. Giving up after %d attempts." % attempt) - raise - - LOG.debug( - "Request failed, attempt %d of %d. Retrying in %.2f seconds..." - % (attempt, max_rpc_attempts, rpc_attempt_interval) - ) - time.sleep(rpc_attempt_interval) - - def _http_request(self, verb, path, body, headers): - """ - Make the actual HTTP request. - """ - url = urllib.parse.urlunparse( - (self.config.scheme, self.config.server, path, None, None, None) - ) - LOG.debug("Request is %s:%s" % (verb, url)) - LOG.debug("Request headers are %s" % headers) - LOG.debug("Request body is %s" % body) - - conn = self._get_connection() - resp, content = conn.request(url, method=verb, body=body, headers=headers) - # http response code is handled else where - http_status = (resp.status, resp.reason) - resp_headers = dict((k.lower(), v) for k, v in six.iteritems(resp)) - resp_body = content - - LOG.debug("Response status is %s %s" % http_status) - LOG.debug("Response headers are %s" % resp_headers) - LOG.debug("Response body is %s" % resp_body) - - return (http_status, resp_headers, resp_body) - - def _make_upload_request(self, request, opener): - """ - Open the given request object, return the - response, raises URLError on protocol errors. - """ - try: - result = opener.open(request) - - except urllib.error.HTTPError: - raise - return result - - def _parse_http_status(self, status): - """ - Parse the status returned from the http request. - - :param tuple status: Tuple of (code, reason). - :raises: RuntimeError if the http status is non success. - """ - error_code = status[0] - errmsg = status[1] - - if status[0] >= 300: - headers = "HTTP error from server" - if status[0] == 503: - errmsg = "Flow Production Tracking is currently down for maintenance or too busy to reply. Please try again later." - raise ProtocolError(self.config.server, error_code, errmsg, headers) - - return - - def _decode_response(self, headers, body): - """ - Decode the response from the server from the wire format to - a python data structure. - - :param dict headers: Headers from the server. - :param str body: Raw response body from the server. - :returns: If the content-type starts with application/json or - text/javascript the body is json decoded. Otherwise the raw body is - returned. - :rtype: str - """ - if not body: - return body - - ct = (headers.get("content-type") or "application/json").lower() - - if ct.startswith("application/json") or ct.startswith("text/javascript"): - return self._json_loads(body) - return body - - def _json_loads(self, body): - return json.loads(body) - - def _json_loads_ascii(self, body): - """ - See http://stackoverflow.com/questions/956867 - """ - - def _decode_list(lst): - newlist = [] - for i in lst: - if isinstance(i, str): - i = sgutils.ensure_str(i) - elif isinstance(i, list): - i = _decode_list(i) - newlist.append(i) - return newlist - - def _decode_dict(dct): - newdict = {} - for k, v in six.iteritems(dct): - if isinstance(k, str): - k = sgutils.ensure_str(k) - if isinstance(v, str): - v = sgutils.ensure_str(v) - elif isinstance(v, list): - v = _decode_list(v) - newdict[k] = v - return newdict - - return json.loads(body, object_hook=_decode_dict) - - def _response_errors(self, sg_response): - """ - Raise any API errors specified in the response. - - :raises ShotgunError: If the server response contains an exception. - """ - - # error code for authentication related problems - ERR_AUTH = 102 - # error code when 2FA authentication is required but no 2FA token provided. - ERR_2FA = 106 - # error code when SSO is activated on the site, preventing the use of username/password for authentication. - ERR_SSO = 108 - # error code when Oxygen is activated on the site, preventing the use of username/password for authentication. - ERR_OXYG = 110 - - if isinstance(sg_response, dict) and sg_response.get("exception"): - if sg_response.get("error_code") == ERR_AUTH: - raise AuthenticationFault( - sg_response.get("message", "Unknown Authentication Error") - ) - elif sg_response.get("error_code") == ERR_2FA: - raise MissingTwoFactorAuthenticationFault( - sg_response.get("message", "Unknown 2FA Authentication Error") - ) - elif sg_response.get("error_code") == ERR_SSO: - raise UserCredentialsNotAllowedForSSOAuthenticationFault( - sg_response.get( - "message", - "Authentication using username/password is not " - "allowed for an SSO-enabled Flow Production Tracking site", - ) - ) - elif sg_response.get("error_code") == ERR_OXYG: - raise UserCredentialsNotAllowedForOxygenAuthenticationFault( - sg_response.get( - "message", - "Authentication using username/password is not " - "allowed for an Autodesk Identity enabled Flow Production Tracking site", - ) - ) - else: - # raise general Fault - raise Fault(sg_response.get("message", "Unknown Error")) - return - - def _visit_data(self, data, visitor): - """ - Walk the data (simple python types) and call the visitor. - """ - - if not data: - return data - - recursive = self._visit_data - if isinstance(data, list): - return [recursive(i, visitor) for i in data] - - if isinstance(data, tuple): - return tuple(recursive(i, visitor) for i in data) - - if isinstance(data, dict): - return dict((k, recursive(v, visitor)) for k, v in six.iteritems(data)) - - return visitor(data) - - def _transform_outbound(self, data): - """ - Transform data types or values before they are sent by the client. - - - changes timezones - - converts dates and times to strings - """ - - if self.config.convert_datetimes_to_utc: - - def _change_tz(value): - if value.tzinfo is None: - value = value.replace(tzinfo=SG_TIMEZONE.local) - return value.astimezone(SG_TIMEZONE.utc) - - else: - _change_tz = None - - local_now = datetime.datetime.now() - - def _outbound_visitor(value): - - if isinstance(value, datetime.datetime): - if _change_tz: - value = _change_tz(value) - - return value.strftime("%Y-%m-%dT%H:%M:%SZ") - - if isinstance(value, datetime.date): - # existing code did not tz transform dates. - return value.strftime("%Y-%m-%d") - - if isinstance(value, datetime.time): - value = local_now.replace( - hour=value.hour, - minute=value.minute, - second=value.second, - microsecond=value.microsecond, - ) - if _change_tz: - value = _change_tz(value) - return value.strftime("%Y-%m-%dT%H:%M:%SZ") - - # ensure return is six.text_type - if isinstance(value, str): - return sgutils.ensure_text(value) - - return value - - return self._visit_data(data, _outbound_visitor) - - def _transform_inbound(self, data): - """ - Transforms data types or values after they are received from the server. - """ - # NOTE: The time zone is removed from the time after it is transformed - # to the local time, otherwise it will fail to compare to datetimes - # that do not have a time zone. - if self.config.convert_datetimes_to_utc: - - def _change_tz(x): - return x.replace(tzinfo=SG_TIMEZONE.utc).astimezone(SG_TIMEZONE.local) - - else: - _change_tz = None - - def _inbound_visitor(value): - if isinstance(value, str): - if len(value) == 20 and self._DATE_TIME_PATTERN.match(value): - try: - # strptime was not on datetime in python2.4 - value = datetime.datetime( - *time.strptime(value, "%Y-%m-%dT%H:%M:%SZ")[:6] - ) - except ValueError: - return value - if _change_tz: - return _change_tz(value) - return value - - return value - - return self._visit_data(data, _inbound_visitor) - - # ======================================================================== - # Connection Functions - - def _get_connection(self): - """ - Return the current connection or creates a new connection to the current server. - """ - if self._connection is not None: - return self._connection - - if self.config.proxy_server: - pi = ProxyInfo( - socks.PROXY_TYPE_HTTP, - self.config.proxy_server, - self.config.proxy_port, - proxy_user=self.config.proxy_user, - proxy_pass=self.config.proxy_pass, - ) - self._connection = Http( - timeout=self.config.timeout_secs, - ca_certs=self.__ca_certs, - proxy_info=pi, - disable_ssl_certificate_validation=self.config.no_ssl_validation, - ) - else: - self._connection = Http( - timeout=self.config.timeout_secs, - ca_certs=self.__ca_certs, - proxy_info=None, - disable_ssl_certificate_validation=self.config.no_ssl_validation, - ) - - return self._connection - - def _close_connection(self): - """ - Close the current connection. - """ - if self._connection is None: - return - - for conn in self._connection.connections.values(): - try: - conn.close() - except Exception: - pass - self._connection.connections.clear() - self._connection = None - return - - # ======================================================================== - # Utility - - def _parse_records(self, records): - """ - Parse 'records' returned from the api to do local modifications: - - - Insert thumbnail urls - - Insert local file paths. - - Revert < html entities that may be the result of input sanitization - mechanisms back to a litteral < character. - - :param records: List of records (dicts) to process or a single record. - - :returns: A list of the records processed. - """ - - if not records: - return [] - - if not isinstance(records, (list, tuple)): - records = [ - records, - ] - - for rec in records: - # skip results that aren't entity dictionaries - if not isinstance(rec, dict): - continue - - # iterate over each item and check each field for possible injection - for k, v in six.iteritems(rec): - if not v: - continue - - # Check for html entities in strings - if isinstance(v, str): - rec[k] = rec[k].replace("<", "<") - - # check for thumbnail for older version (<3.3.0) of shotgun - if ( - k == "image" - and self.server_caps.version - and self.server_caps.version < (3, 3, 0) - ): - rec["image"] = self._build_thumb_url(rec["type"], rec["id"]) - continue - - if ( - isinstance(v, dict) - and v.get("link_type") == "local" - and self.client_caps.local_path_field in v - ): - local_path = v[self.client_caps.local_path_field] - v["local_path"] = local_path - v["url"] = "file://%s" % (local_path or "",) - - return records - - def _build_thumb_url(self, entity_type, entity_id): - """ - Return the URL for the thumbnail of an entity given the entity type and the entity id. - - Note: This makes a call to the server for every thumbnail. - - :param entity_type: Entity type the id is for. - :param entity_id: id of the entity to get the thumbnail for. - :returns: Fully qualified url to the thumbnail. - """ - # Example response from the end point - # curl "https://foo.com/upload/get_thumbnail_url?entity_type=Version&entity_id=1" - # 1 - # /files/0000/0000/0012/232/shot_thumb.jpg.jpg - entity_info = { - "e_type": urllib.parse.quote(entity_type), - "e_id": urllib.parse.quote(str(entity_id)), - } - url = ( - "/upload/get_thumbnail_url?" - + "entity_type=%(e_type)s&entity_id=%(e_id)s" % entity_info - ) - - body = self._make_call("GET", url, None, None)[2] - - code, thumb_url = body.splitlines() - code = int(code) - - # code of 0 means error, second line is the error code - if code == 0: - raise ShotgunError(thumb_url) - - if code == 1: - return urllib.parse.urlunparse( - ( - self.config.scheme, - self.config.server, - thumb_url.strip(), - None, - None, - None, - ) - ) - - # Comments in prev version said we can get this sometimes. - raise RuntimeError("Unknown code %s %s" % (code, thumb_url)) - - def _dict_to_list( - self, d, key_name="field_name", value_name="value", extra_data=None - ): - """ - Utility function to convert a dict into a list dicts using the key_name and value_name keys. - - e.g. d {'foo' : 'bar'} changed to [{'field_name':'foo', 'value':'bar'}] - - Any dictionary passed in via extra_data will be merged into the resulting dictionary. - e.g. d as above and extra_data of {'foo': {'thing1': 'value1'}} changes into - [{'field_name': 'foo', 'value': 'bar', 'thing1': 'value1'}] - """ - ret = [] - for k, v in six.iteritems((d or {})): - d = {key_name: k, value_name: v} - d.update((extra_data or {}).get(k, {})) - ret.append(d) - return ret - - def _dict_to_extra_data(self, d, key_name="value"): - """ - Utility function to convert a dict into a dict compatible with the extra_data arg - of _dict_to_list. - - e.g. d {'foo' : 'bar'} changed to {'foo': {"value": 'bar'}] - """ - return dict([(k, {key_name: v}) for (k, v) in six.iteritems((d or {}))]) - - def _upload_file_to_storage(self, path, storage_url): - """ - Internal function to upload an entire file to the Cloud storage. - - :param str path: Full path to an existing non-empty file on disk to upload. - :param str storage_url: Target URL for the uploaded file. - """ - filename = os.path.basename(path) - - fd = open(path, "rb") - try: - content_type = mimetypes.guess_type(filename)[0] - content_type = content_type or "application/octet-stream" - file_size = os.fstat(fd.fileno())[stat.ST_SIZE] - self._upload_data_to_storage(fd, content_type, file_size, storage_url) - finally: - fd.close() - - LOG.debug("File uploaded to Cloud storage: %s", filename) - - def _multipart_upload_file_to_storage(self, path, upload_info): - """ - Internal function to upload a file to the Cloud storage in multiple parts. - - :param str path: Full path to an existing non-empty file on disk to upload. - :param dict upload_info: Contains details received from the server, about the upload. - """ - - fd = open(path, "rb") - try: - content_type = mimetypes.guess_type(path)[0] - content_type = content_type or "application/octet-stream" - file_size = os.fstat(fd.fileno())[stat.ST_SIZE] - filename = os.path.basename(path) - - etags = [] - part_number = 1 - bytes_read = 0 - chunk_size = self._MULTIPART_UPLOAD_CHUNK_SIZE - while bytes_read < file_size: - data = fd.read(chunk_size) - data_size = len(data) - # keep data as a stream so that we don't need to worry how it was - # encoded. - data = BytesIO(data) - bytes_read += data_size - part_url = self._get_upload_part_link( - upload_info, filename, part_number - ) - etags.append( - self._upload_data_to_storage( - data, content_type, data_size, part_url - ) - ) - part_number += 1 - - self._complete_multipart_upload(upload_info, filename, etags) - finally: - fd.close() - - LOG.debug("File uploaded in multiple parts to Cloud storage: %s", path) - - def _get_upload_part_link(self, upload_info, filename, part_number): - """ - Internal function to get the url to upload the next part of a file to the - Cloud storage, in a multi-part upload process. - - :param dict upload_info: Contains details received from the server, about the upload. - :param str filename: Name of the file for which we want the link. - :param int part_number: Part number for the link. - :returns: upload url. - :rtype: str - """ - params = { - "upload_type": upload_info["upload_type"], - "filename": filename, - "timestamp": upload_info["timestamp"], - "upload_id": upload_info["upload_id"], - "part_number": part_number, - } - - url = urllib.parse.urlunparse( - ( - self.config.scheme, - self.config.server, - "/upload/api_get_upload_link_for_part", - None, - None, - None, - ) - ) - result = self._send_form(url, params) - - # Response is of the form: 1\n (for success) or 0\n (for failure). - # In case of success, we know we the second line of the response contains the - # requested URL. - if not result.startswith("1"): - raise ShotgunError("Unable get upload part link: %s" % result) - - LOG.debug("Got next upload link from server for multipart upload.") - return result.split("\n", 2)[1] - - def _upload_data_to_storage(self, data, content_type, size, storage_url): - """ - Internal function to upload data to Cloud storage. - - :param stream data: Contains details received from the server, about the upload. - :param str content_type: Content type of the data stream. - :param int size: Number of bytes in the data stream. - :param str storage_url: Target URL for the uploaded file. - :returns: upload url. - :rtype: str - """ - - attempt = 1 - while attempt <= self.MAX_ATTEMPTS: - try: - opener = self._build_opener(urllib.request.HTTPHandler) - - request = urllib.request.Request(storage_url, data=data) - request.add_header("Content-Type", content_type) - request.add_header("Content-Length", size) - request.get_method = lambda: "PUT" - result = self._make_upload_request(request, opener) - - LOG.debug("Completed request to %s" % request.get_method()) - - except urllib.error.HTTPError as e: - if attempt != self.MAX_ATTEMPTS and e.code in [500, 503]: - LOG.debug("Got a %s response. Waiting and retrying..." % e.code) - time.sleep(float(attempt) * self.BACKOFF) - attempt += 1 - continue - elif e.code in [500, 503]: - raise ShotgunError( - "Got a %s response when uploading to %s: %s" - % (e.code, storage_url, e) - ) - else: - raise ShotgunError( - "Unanticipated error occurred uploading to %s: %s" - % (storage_url, e) - ) - except urllib.error.URLError as e: - LOG.debug("Got a '%s' response. Waiting and retrying..." % e) - time.sleep(float(attempt) * self.BACKOFF) - attempt += 1 - continue - else: - break - else: - raise ShotgunError("Max attemps limit reached.") - - etag = result.info()["Etag"] - LOG.debug("Part upload completed successfully.") - return etag - - def _complete_multipart_upload(self, upload_info, filename, etags): - """ - Internal function to complete a multi-part upload to the Cloud storage. - - :param dict upload_info: Contains details received from the server, about the upload. - :param str filename: Name of the file for which we want to complete the upload. - :param tupple etags: Contains the etag of each uploaded file part. - """ - - params = { - "upload_type": upload_info["upload_type"], - "filename": filename, - "timestamp": upload_info["timestamp"], - "upload_id": upload_info["upload_id"], - "etags": ",".join(etags), - } - - url = urllib.parse.urlunparse( - ( - self.config.scheme, - self.config.server, - "/upload/api_complete_multipart_upload", - None, - None, - None, - ) - ) - result = self._send_form(url, params) - - # Response is of the form: 1\n or 0\n to indicate success or failure of the call. - if not result.startswith("1"): - raise ShotgunError("Unable get upload part link: %s" % result) - - def _requires_direct_s3_upload(self, entity_type, field_name): - """ - Internal function that determines if an entity_type + field_name combination - should be uploaded to cloud storage. - - The info endpoint should return `s3_enabled_upload_types` which contains an object like the following: - { - 'Version': ['sg_uploaded_movie'], - 'Attachment': '*', - '*': ['this_file'] - } - - :param str entity_type: The entity type of the file being uploaded. - :param str field_name: The matching field name for the file being uploaded. - - :returns: Whether the field + entity type combination should be uploaded to cloud storage. - :rtype: bool - """ - supported_s3_types = self.server_info.get("s3_enabled_upload_types") or {} - supported_fields = supported_s3_types.get(entity_type) or [] - supported_star_fields = supported_s3_types.get("*") or [] - # If direct uploads are enabled - if self.server_info.get("s3_direct_uploads_enabled", False): - # If field_name is part of a supported entity_type - if field_name in supported_fields or field_name in supported_star_fields: - return True - # If supported_fields is a string or a list with * - if isinstance(supported_fields, list) and "*" in supported_fields: - return True - elif supported_fields == "*": - return True - # If supported_star_fields is a list containing * or * as a string - if isinstance(supported_star_fields, list) and "*" in supported_star_fields: - return True - elif supported_star_fields == "*": - return True - # Support direct upload for old versions of shotgun - return entity_type == "Version" and field_name == "sg_uploaded_movie" - else: - return False - - def _send_form(self, url, params): - """ - Utility function to send a Form to Shotgun and process any HTTP errors that - could occur. - - :param url: endpoint where the form is sent. - :param params: form data - :returns: result from the server. - """ - - params.update(self._auth_params()) - - attempt = 1 - while attempt <= self.MAX_ATTEMPTS: - # Perform the request - try: - opener = self._build_opener(FormPostHandler) - resp = opener.open(url, params) - result = resp.read() - # response headers are in str(resp.info()).splitlines() - except urllib.error.URLError as e: - LOG.debug("Got a %s response. Waiting and retrying..." % e) - time.sleep(float(attempt) * self.BACKOFF) - attempt += 1 - continue - except urllib.error.HTTPError as e: - if e.code == 500: - raise ShotgunError( - "Server encountered an internal error. " - "\n%s\n(%s)\n%s\n\n" - % (url, self._sanitize_auth_params(params), e) - ) - else: - raise ShotgunError("Unanticipated error occurred %s" % (e)) - - return sgutils.ensure_text(result) - else: - raise ShotgunError("Max attemps limit reached.") - - -class CACertsHTTPSConnection(http_client.HTTPConnection): - """ " - This class allows to create an HTTPS connection that uses the custom certificates - passed in. - """ - - default_port = http_client.HTTPS_PORT - - def __init__(self, *args, **kwargs): - """ - :param args: Positional arguments passed down to the base class. - :param ca_certs: Path to the custom CA certs file. - :param kwargs: Keyword arguments passed down to the bas class - """ - # Pop that argument, - self.__ca_certs = kwargs.pop("ca_certs") - super().__init__(self, *args, **kwargs) - - def connect(self): - "Connect to a host on a given (SSL) port." - super().connect(self) - # Now that the regular HTTP socket has been created, wrap it with our SSL certs. - if six.PY38: - context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT) - context.verify_mode = ssl.CERT_REQUIRED - context.check_hostname = False - if self.__ca_certs: - context.load_verify_locations(self.__ca_certs) - self.sock = context.wrap_socket(self.sock) - else: - self.sock = ssl.wrap_socket( - self.sock, ca_certs=self.__ca_certs, cert_reqs=ssl.CERT_REQUIRED - ) - - -class CACertsHTTPSHandler(urllib.request.HTTPHandler): - """ - Handler that ensures https connections are created with the custom CA certs. - """ - - def __init__(self, cacerts): - super().__init__(self) - self.__ca_certs = cacerts - - def https_open(self, req): - return self.do_open(self.create_https_connection, req) - - def create_https_connection(self, *args, **kwargs): - return CACertsHTTPSConnection(*args, ca_certs=self.__ca_certs, **kwargs) - - -# Helpers from the previous API, left as is. -# Based on http://code.activestate.com/recipes/146306/ -class FormPostHandler(urllib.request.BaseHandler): - """ - Handler for multipart form data - """ - - handler_order = urllib.request.HTTPHandler.handler_order - 10 # needs to run first - - def http_request(self, request): - # get_data was removed in 3.4. since we're testing against 3.6 and - # 3.7, this should be sufficient. - if six.PY3: - data = request.data - else: - data = request.get_data() - if data is not None and not isinstance(data, str): - files = [] - params = [] - for key, value in data.items(): - if isinstance(value, sgsix.file_types): - files.append((key, value)) - else: - params.append((key, value)) - if not files: - data = sgutils.ensure_binary( - urllib.parse.urlencode(params, True) - ) # sequencing on - else: - boundary, data = self.encode(params, files) - content_type = "multipart/form-data; boundary=%s" % boundary - request.add_unredirected_header("Content-Type", content_type) - # add_data was removed in 3.4. since we're testing against 3.6 and - # 3.7, this should be sufficient. - if six.PY3: - request.data = data - else: - request.add_data(data) - return request - - def encode(self, params, files, boundary=None, buffer=None): - if boundary is None: - # Per https://stackoverflow.com/a/27174474 - # use a random string as the boundary if none was provided -- - # use uuid since mimetools no longer exists in Python 3. - # We'll do this across both python 2/3 rather than add more branching. - boundary = uuid.uuid4() - if buffer is None: - buffer = BytesIO() - for key, value in params: - if not isinstance(value, str): - # If value is not a string (e.g. int) cast to text - value = str(value) - value = sgutils.ensure_text(value) - key = sgutils.ensure_text(key) - - buffer.write(sgutils.ensure_binary("--%s\r\n" % boundary)) - buffer.write( - sgutils.ensure_binary('Content-Disposition: form-data; name="%s"' % key) - ) - buffer.write(sgutils.ensure_binary("\r\n\r\n%s\r\n" % value)) - for key, fd in files: - # On Windows, it's possible that we were forced to open a file - # with non-ascii characters as unicode. In that case, we need to - # encode it as a utf-8 string to remove unicode from the equation. - # If we don't, the mix of unicode and strings going into the - # buffer can cause UnicodeEncodeErrors to be raised. - filename = fd.name - filename = sgutils.ensure_text(filename) - filename = filename.split("/")[-1] - key = sgutils.ensure_text(key) - content_type = mimetypes.guess_type(filename)[0] - content_type = content_type or "application/octet-stream" - file_size = os.fstat(fd.fileno())[stat.ST_SIZE] - buffer.write(sgutils.ensure_binary("--%s\r\n" % boundary)) - c_dis = 'Content-Disposition: form-data; name="%s"; filename="%s"%s' - content_disposition = c_dis % (key, filename, "\r\n") - buffer.write(sgutils.ensure_binary(content_disposition)) - buffer.write(sgutils.ensure_binary("Content-Type: %s\r\n" % content_type)) - buffer.write(sgutils.ensure_binary("Content-Length: %s\r\n" % file_size)) - - buffer.write(sgutils.ensure_binary("\r\n")) - fd.seek(0) - shutil.copyfileobj(fd, buffer) - buffer.write(sgutils.ensure_binary("\r\n")) - buffer.write(sgutils.ensure_binary("--%s--\r\n\r\n" % boundary)) - buffer = buffer.getvalue() - return boundary, buffer - - def https_request(self, request): - return self.http_request(request) - - -def _translate_filters(filters, filter_operator): - """ - Translate filters params into data structure expected by rpc call. - """ - wrapped_filters = {"filter_operator": filter_operator or "all", "filters": filters} - - return _translate_filters_dict(wrapped_filters) - - -def _translate_filters_dict(sg_filter): - new_filters = {} - filter_operator = sg_filter.get("filter_operator") - - if filter_operator == "all" or filter_operator == "and": - new_filters["logical_operator"] = "and" - elif filter_operator == "any" or filter_operator == "or": - new_filters["logical_operator"] = "or" - else: - raise ShotgunError("Invalid filter_operator %s" % filter_operator) - - if not isinstance(sg_filter["filters"], (list, tuple)): - raise ShotgunError( - "Invalid filters, expected a list or a tuple, got %s" % sg_filter["filters"] - ) - - new_filters["conditions"] = _translate_filters_list(sg_filter["filters"]) - - return new_filters - - -def _translate_filters_list(filters): - conditions = [] - - for sg_filter in filters: - if isinstance(sg_filter, (list, tuple)): - conditions.append(_translate_filters_simple(sg_filter)) - elif isinstance(sg_filter, dict): - conditions.append(_translate_filters_dict(sg_filter)) - else: - raise ShotgunError( - "Invalid filters, expected a list, tuple or dict, got %s" % sg_filter - ) - - return conditions - - -def _translate_filters_simple(sg_filter): - condition = {"path": sg_filter[0], "relation": sg_filter[1]} - - values = sg_filter[2:] - if len(values) == 1 and isinstance(values[0], (list, tuple)): - values = values[0] - - # Payload optimization: Do not send a full object - # just send the `type` and `id` when combining related queries - global SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION - if ( - not SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION - and condition["path"] != "id" - and condition["relation"] in ["is", "is_not", "in", "not_in"] - and isinstance(values[0], dict) - ): - values = [_get_type_and_id_from_value(v) for v in values] - - condition["values"] = values - - return condition - - -def _version_str(version): - """ - Convert a tuple of int's to a '.' separated str. - """ - return ".".join(map(str, version)) - - -def _get_type_and_id_from_value(value): - """ - For an entity dictionary, returns a new dictionary with only the type and id keys. - If any of these keys are not present, the original dictionary is returned. - """ - try: - if isinstance(value, dict): - return {"type": value["type"], "id": value["id"]} - elif isinstance(value, list): - return [{"type": v["type"], "id": v["id"]} for v in value] - except (KeyError, TypeError): - LOG.debug(f"Could not optimize entity value {value}") - - return value diff --git a/software_credits b/software_credits deleted file mode 100644 index 6fa0bf725..000000000 --- a/software_credits +++ /dev/null @@ -1,142 +0,0 @@ -The Flow Production Tracking Python API uses the following software. -Thanks to their creators, license information below. - -============================== PYTHON ============================== - -Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, -2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Python Software Foundation. All -rights reserved. - -Copyright (c) 2000 BeOpen.com. -All rights reserved. - -Copyright (c) 1995-2001 Corporation for National Research Initiatives. -All rights reserved. - -Copyright (c) 1991-1995 Stichting Mathematisch Centrum. -All rights reserved. - -1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and - the Individual or Organization ("Licensee") accessing and otherwise using Python - 2.7.17 software in source or binary form and its associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF hereby - grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, - analyze, test, perform and/or display publicly, prepare derivative works, - distribute, and otherwise use Python 2.7.17 alone or in any derivative - version, provided, however, that PSF's License Agreement and PSF's notice of - copyright, i.e., "Copyright © 2001-2020 Python Software Foundation; All Rights - Reserved" are retained in Python 2.7.17 alone or in any derivative version - prepared by Licensee. - -3. In the event Licensee prepares a derivative work that is based on or - incorporates Python 2.7.17 or any part thereof, and wants to make the - derivative work available to others as provided herein, then Licensee hereby - agrees to include in any such work a brief summary of the changes made to Python - 2.7.17. - -4. PSF is making Python 2.7.17 available to Licensee on an "AS IS" basis. - PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF - EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR - WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE - USE OF PYTHON 2.7.17 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.7.17 - FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF - MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.7.17, OR ANY DERIVATIVE - THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material breach of - its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any relationship - of agency, partnership, or joint venture between PSF and Licensee. This License - Agreement does not grant permission to use PSF trademarks or trade name in a - trademark sense to endorse or promote products or services of Licensee, or any - third party. - -8. By copying, installing or otherwise using Python 2.7.17, Licensee agrees - to be bound by the terms and conditions of this License Agreement. - - -============================== Certifi ============================== - -Copyright © 2024 Contributors -This Autodesk software contains the unmodified python-certifi 2024.07.04 -package. The use and distribution terms for this software are covered by the -Mozilla Public License 2.0 (https://www.mozilla.org/en-US/MPL/2.0/ ). By using -this software in any fashion, you are agreeing to be bound by the terms of this -license. The source code for python-certifi is available from -https://github.com/certifi/python-certifi/releases/tag/2024.07.04 - - -============================== Httplib2 ============================== -Httplib2 Software License - -Copyright (c) 2006 by Joe Gregorio - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the "Software"), to deal in the Software without restriction, -including without limitation the rights to use, copy, modify, merge, -publish, distribute, sublicense, and/or sell copies of the Software, -and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS -BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -============================== pyparsing ============================== - -Copyright (c) 2003-2019 Paul T. McGuire - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -============================== SIX ============================== - -Copyright (c) 2010-2020 Benjamin Peterson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git "a/tests/No\303\253l\343\201\224.jpg" "b/tests/No\303\253l\343\201\224.jpg" deleted file mode 100644 index 7a8aaf967..000000000 Binary files "a/tests/No\303\253l\343\201\224.jpg" and /dev/null differ diff --git a/tests/__init__.py b/tests/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/base.py b/tests/base.py deleted file mode 100644 index 2820d495d..000000000 --- a/tests/base.py +++ /dev/null @@ -1,486 +0,0 @@ -"""Base class for Flow Production Tracking API tests.""" - -import contextlib -import os -import random -import re -import time -import unittest - -from . import mock - -import shotgun_api3 as api -from shotgun_api3.shotgun import json -from shotgun_api3.shotgun import ServerCapabilities -from shotgun_api3.lib import six -from shotgun_api3.lib.six.moves import urllib -from shotgun_api3.lib.six.moves.configparser import ConfigParser - -try: - # Attempt to import skip from unittest. Since this was added in Python 2.7 - # in the case that we're running on Python 2.6 we'll need a decorator to - # provide some equivalent functionality. - from unittest import skip -except ImportError: - # On Python 2.6 we'll just have to ignore tests that are skipped -- we won't - # mark them as skipped, but we will not fail on them. - def skip(f): - return lambda self: None - - -THUMBNAIL_MAX_ATTEMPTS = 30 -THUMBNAIL_RETRY_INTERVAL = 10 -TRANSIENT_IMAGE_PATH = "images/status/transient" - - -class TestBase(unittest.TestCase): - """Base class for tests. - - Sets up mocking and database test data.""" - - human_user = None - project = None - shot = None - asset = None - version = None - note = None - playlist = None - task = None - human_password = None - server_url = None - server_address = None - session_token = None - - def __init__(self, *args, **kws): - unittest.TestCase.__init__(self, *args, **kws) - self.connect = False - - @classmethod - def setUpClass(cls): - """ - Loads the configuration file from disk. - """ - # Since the file is read and never modified, we will only read - # it once in memory and be done. - cls.config = SgTestConfig() - cur_folder = os.path.dirname(os.path.abspath(__file__)) - config_path = os.path.join(cur_folder, "config") - cls.config.read_config(config_path) - if cls.config.jenkins: - cls.auth_args = dict( - login=cls.config.human_login, password=cls.config.human_password - ) - else: - cls.auth_args = dict( - script_name=cls.config.script_name, api_key=cls.config.api_key - ) - - def setUp(self, auth_mode="ApiUser"): - # When running the tests from a pull request from a client, the Shotgun - # site URL won't be set, so do not attempt to run the test. - if not self.config.server_url: - self.skipTest("Shotgun site URL is not set. Skipping this test.") - - self.human_login = self.config.human_login - self.human_password = self.config.human_password - self.server_url = self.config.server_url - self.script_name = self.config.script_name - self.api_key = self.config.api_key - self.http_proxy = self.config.http_proxy - self.session_uuid = self.config.session_uuid - - if auth_mode == "ApiUser": - self.sg = api.Shotgun( - self.config.server_url, - self.config.script_name, - self.config.api_key, - http_proxy=self.config.http_proxy, - connect=self.connect, - ) - elif auth_mode == "HumanUser": - self.sg = api.Shotgun( - self.config.server_url, - login=self.human_login, - password=self.human_password, - http_proxy=self.config.http_proxy, - connect=self.connect, - ) - elif auth_mode == "SessionToken": - # first make an instance based on script key/name so - # we can generate a session token - sg = api.Shotgun( - self.config.server_url, - http_proxy=self.config.http_proxy, - **self.auth_args, - ) - self.session_token = sg.get_session_token() - # now log in using session token - self.sg = api.Shotgun( - self.config.server_url, - session_token=self.session_token, - http_proxy=self.config.http_proxy, - connect=self.connect, - ) - else: - raise ValueError("Unknown value for auth_mode: %s" % auth_mode) - - if self.config.session_uuid: - self.sg.set_session_uuid(self.config.session_uuid) - - def tearDown(self): - self.sg = None - - -class MockTestBase(TestBase): - """Test base for tests mocking server interactions.""" - - def setUp(self): - super(MockTestBase, self).setUp() - # TODO see if there is another way to stop sg connecting - self._setup_mock() - self._setup_mock_data() - - def _setup_mock(self, s3_status_code_error=503): - """Setup mocking on the ShotgunClient to stop it calling a live server""" - # Replace the function used to make the final call to the server - # eaiser than mocking the http connection + response - self.sg._http_request = mock.Mock( - spec=api.Shotgun._http_request, return_value=((200, "OK"), {}, None) - ) - # Replace the function used to make the final call to the S3 server, and simulate - # the exception HTTPError raised with 503 status errors - self.sg._make_upload_request = mock.Mock( - spec=api.Shotgun._make_upload_request, - side_effect=urllib.error.HTTPError( - "url", - s3_status_code_error, - "The server is currently down or to busy to reply." - "Please try again later.", - {}, - None, - ), - ) - # also replace the function that is called to get the http connection - # to avoid calling the server. OK to return a mock as we will not use - # it - self.mock_conn = mock.Mock(spec=api.lib.httplib2.Http) - # The Http objects connection property is a dict of connections - # it is holding - self.mock_conn.connections = dict() - self.sg._connection = self.mock_conn - self.sg._get_connection = mock.Mock(return_value=self.mock_conn) - - # create the server caps directly to say we have the correct version - self.sg._server_caps = ServerCapabilities( - self.sg.config.server, {"version": [2, 4, 0]} - ) - # prevent waiting for backoff - self.sg.BACKOFF = 0 - - def _mock_http(self, data, headers=None, status=None): - """Setup a mock response from the PTR server. - - Only has an affect if the server has been mocked. - """ - # test for a mock object rather than config.mock as some tests - # force the mock to be created - if not isinstance(self.sg._http_request, mock.Mock): - return - - if not isinstance(data, str): - if six.PY2: - data = json.dumps(data, ensure_ascii=False, encoding="utf-8") - else: - data = json.dumps( - data, - ensure_ascii=False, - ) - - resp_headers = { - "cache-control": "no-cache", - "connection": "close", - "content-length": (data and str(len(data))) or 0, - "content-type": "application/json; charset=utf-8", - "date": "Wed, 13 Apr 2011 04:18:58 GMT", - "server": "Apache/2.2.3 (CentOS)", - "status": "200 OK", - } - if headers: - resp_headers.update(headers) - - if not status: - status = (200, "OK") - # create a new mock to reset call list etc. - self._setup_mock() - self.sg._http_request.return_value = (status, resp_headers, data) - - def _assert_http_method(self, method, params, check_auth=True): - """Asserts _http_request is called with the method and params.""" - args, _ = self.sg._http_request.call_args - arg_body = args[2] - assert isinstance(arg_body, bytes) - arg_body = json.loads(arg_body) - - arg_params = arg_body.get("params") - - self.assertEqual(method, arg_body["method_name"]) - if check_auth: - auth = arg_params[0] - self.assertEqual(self.script_name, auth["script_name"]) - self.assertEqual(self.api_key, auth["script_key"]) - - if params: - rpc_args = arg_params[len(arg_params) - 1] - self.assertEqual(params, rpc_args) - - def _setup_mock_data(self): - self.human_user = { - "id": 1, - "login": self.config.human_login, - "type": "HumanUser", - } - self.project = {"id": 2, "name": self.config.project_name, "type": "Project"} - self.shot = {"id": 3, "code": self.config.shot_code, "type": "Shot"} - self.asset = {"id": 4, "code": self.config.asset_code, "type": "Asset"} - self.version = {"id": 5, "code": self.config.version_code, "type": "Version"} - self.playlist = {"id": 7, "code": self.config.playlist_code, "type": "Playlist"} - - -class LiveTestBase(TestBase): - """Test base for tests relying on connection to server.""" - - def setUp(self, auth_mode=None): - if not auth_mode: - auth_mode = "HumanUser" if self.config.jenkins else "ApiUser" - super(LiveTestBase, self).setUp(auth_mode) - if ( - self.sg.server_caps.version - and self.sg.server_caps.version >= (3, 3, 0) - and ( - self.sg.server_caps.host.startswith("0.0.0.0") - or self.sg.server_caps.host.startswith("127.0.0.1") - ) - ): - self.server_address = re.sub( - "^0.0.0.0|127.0.0.1", "localhost", self.sg.server_caps.host - ) - else: - self.server_address = self.sg.server_caps.host - - @classmethod - def setUpClass(cls): - """ - Sets up common and recurring operations for all tests. - """ - # The code below simply retrieves entities from Shotgun, or creates - # them the very first time the test suite is run againt the site. - # As such, since the operation is read-only, there's no sense - # reloading stuff from Shotgun over and over again during each test. - # As such, we are using setUpClass to load them once during the - # entire duration of the tests. - super(LiveTestBase, cls).setUpClass() - - # When running the tests from a pull request from a client, the Shotgun - # site URL won't be set, so do not attempt to connect to Shotgun. - if cls.config.server_url: - sg = api.Shotgun( - cls.config.server_url, - **cls.auth_args, - ) - cls.sg_version = tuple(sg.info()["version"][:3]) - cls._setup_db(cls.config, sg) - - @classmethod - def _setup_db(cls, config, sg): - data = {"name": cls.config.project_name} - cls.project = _find_or_create_entity(sg, "Project", data) - - data = { - "name": cls.config.human_name, - "login": cls.config.human_login, - "password_proxy": cls.config.human_password, - } - if cls.sg_version >= (3, 0, 0): - data["locked_until"] = None - - cls.human_user = _find_or_create_entity(sg, "HumanUser", data) - - data = {"code": cls.config.asset_code, "project": cls.project} - keys = ["code"] - cls.asset = _find_or_create_entity(sg, "Asset", data, keys) - - data = { - "project": cls.project, - "code": cls.config.version_code, - "entity": cls.asset, - "user": cls.human_user, - "sg_frames_aspect_ratio": 13.3, - "frame_count": 33, - } - keys = ["code", "project"] - cls.version = _find_or_create_entity(sg, "Version", data, keys) - - keys = ["code", "project"] - data = {"code": cls.config.shot_code, "project": cls.project} - cls.shot = _find_or_create_entity(sg, "Shot", data, keys) - - keys = ["project", "user"] - data = {"project": cls.project, "user": cls.human_user, "content": "anything"} - cls.note = _find_or_create_entity(sg, "Note", data, keys) - - keys = ["code", "project"] - data = {"project": cls.project, "code": cls.config.playlist_code} - cls.playlist = _find_or_create_entity(sg, "Playlist", data, keys) - - keys = ["code", "entity_type"] - data = {"code": "wrapper test step", "entity_type": "Shot"} - cls.step = _find_or_create_entity(sg, "Step", data, keys) - - keys = ["project", "entity", "content"] - data = { - "project": cls.project, - "entity": cls.asset, - "content": cls.config.task_content, - "color": "Black", - "due_date": "1968-10-13", - "task_assignees": [cls.human_user], - "sg_status_list": "ip", - } - cls.task = _find_or_create_entity(sg, "Task", data, keys) - - keys = ["code"] - data = { - "code": "api wrapper test storage", - "mac_path": "nowhere", - "windows_path": "nowhere", - "linux_path": "nowhere", - } - cls.local_storage = _find_or_create_entity(sg, "LocalStorage", data, keys) - - @contextlib.contextmanager - def gen_entity(self, entity_type, **kwargs): - # Helper creator - if entity_type == "HumanUser": - if "login" not in kwargs: - kwargs["login"] = "test-python-api-{rnd}" - - if "sg_status_list" not in kwargs: - kwargs["sg_status_list"] = "dis" - - if "password_proxy" not in kwargs: - kwargs["password_proxy"] = self.config.human_password - - item_rnd = random.randrange(100, 999) - for k in kwargs: - if isinstance(kwargs[k], str): - kwargs[k] = kwargs[k].format(rnd=item_rnd) - - entity = self.sg.create(entity_type, kwargs, return_fields=list(kwargs.keys())) - try: - yield entity - finally: - rv = self.sg.delete(entity_type, entity["id"]) - assert rv == True - - def find_one_await_thumbnail( - self, - entity_type, - filters, - fields=["image"], - thumbnail_field_name="image", - **kwargs - ): - attempts = 0 - while attempts < THUMBNAIL_MAX_ATTEMPTS: - result = self.sg.find_one(entity_type, filters, fields=fields, **kwargs) - if TRANSIENT_IMAGE_PATH in result.get(thumbnail_field_name, ""): - return result - - time.sleep(THUMBNAIL_RETRY_INTERVAL) - attempts += 1 - else: - if self.config.jenkins: - self.skipTest("Jenkins test timed out waiting for thumbnail") - - -class HumanUserAuthLiveTestBase(LiveTestBase): - """ - Test base for relying on a Shotgun connection authenticate through the - configured login/password pair. - """ - - def setUp(self): - super(HumanUserAuthLiveTestBase, self).setUp("HumanUser") - - -class SessionTokenAuthLiveTestBase(LiveTestBase): - """ - Test base for relying on a Shotgun connection authenticate through the - configured session_token parameter. - """ - - def setUp(self): - super(SessionTokenAuthLiveTestBase, self).setUp("SessionToken") - - -class SgTestConfig(object): - """Reads test config and holds values""" - - def __init__(self): - for key in self.config_keys(): - # Look for any environment variables that match our test - # configuration naming of "SG_{KEY}". Default is None. - value = os.environ.get("SG_%s" % (str(key).upper())) - if key in ["mock"]: - value = (value is None) or (str(value).lower() in ["true", "1"]) - setattr(self, key, value) - - def config_keys(self): - return [ - "api_key", - "asset_code", - "http_proxy", - "human_login", - "human_name", - "human_password", - "mock", - "project_name", - "script_name", - "server_url", - "session_uuid", - "shot_code", - "task_content", - "version_code", - "playlist_code", - "jenkins", - ] - - def read_config(self, config_path): - config_parser = ConfigParser() - config_parser.read(config_path) - for section in config_parser.sections(): - for option in config_parser.options(section): - # We only care about the configuration file if an environment - # variable has not already been set - if not getattr(self, option, None): - value = config_parser.get(section, option) - setattr(self, option, value) - - -def _find_or_create_entity(sg, entity_type, data, identifyiers=None): - """Finds or creates entities. - @params: - sg - shogun_json.Shotgun instance - entity_type - entity type - data - dictionary of data for the entity - identifyiers -list of subset of keys from data which should be used to - uniquely identity the entity - @returns dicitonary of the entity values - """ - identifyiers = identifyiers or ["name"] - fields = list(data.keys()) - filters = [[key, "is", data[key]] for key in identifyiers] - entity = sg.find_one(entity_type, filters, fields=fields) - entity = entity or sg.create(entity_type, data, return_fields=fields) - assert entity - return entity diff --git a/tests/ci_requirements.txt b/tests/ci_requirements.txt deleted file mode 100644 index 5c2074965..000000000 --- a/tests/ci_requirements.txt +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -coverage -coveralls==1.1 -# Don't restrict flake8 version, since we install this in CI against Python 2.6, -# where flake8 has discontinued support for newer releases. On Python 2.7 and -# Python 3.7, linting has been performed with flake8 3.7.8 -flake8 -nose==1.3.7 -nose-exclude==0.5.0 -pytest -pytest-azurepipelines -pytest-coverage diff --git a/tests/empty.txt b/tests/empty.txt deleted file mode 100644 index e69de29bb..000000000 diff --git a/tests/example_config b/tests/example_config deleted file mode 100644 index cb04aefab..000000000 --- a/tests/example_config +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -# Example server and login information to use for tests which require a live server. -# This file should be renamed to config and the appropriate values should be added. - -[SERVER_INFO] - -# Full url to the Flow Production Tracking server -# e.g. https://my-site.shotgrid.autodesk.com -# be careful to not end server_url with a "/", or some tests may fail -server_url : http://0.0.0.0:3000 -# script name as key as listed in admin panel for your server -script_name : test script name -api_key : test script api key -http_proxy : -session_uuid : - -[TEST_DATA] -project_name : PTR unittest project - -human_name : Sg unittest human -human_login : sgunittesthuman -human_password : human password - -asset_code : Sg unittest asset -version_code : Sg unittest version -shot_code : Sg unittest shot -task_content : Sg unittest task -playlist_code : Sg unittest playlist diff --git a/tests/mock.py b/tests/mock.py deleted file mode 100644 index 736571c64..000000000 --- a/tests/mock.py +++ /dev/null @@ -1,993 +0,0 @@ -# mock.py -# Test tools for mocking and patching. -# Copyright (C) 2007-2011 Michael Foord & the mock team -# E-mail: fuzzyman AT voidspace DOT org DOT uk - -# mock 0.7.0 -# http://www.voidspace.org.uk/python/mock/ - -# Released subject to the BSD License -# Please see http://www.voidspace.org.uk/python/license.shtml - -# Scripts maintained at http://www.voidspace.org.uk/python/index.shtml -# Comments, suggestions and bug reports welcome. - - -__all__ = ( - "Mock", - "MagicMock", - "mocksignature", - "patch", - "patch_object", - "sentinel", - "DEFAULT", -) - -__version__ = "0.7.0" - -__unittest = True - - -import sys -import warnings - -try: - import inspect -except ImportError: - # for alternative platforms that - # may not have inspect - inspect = None - -try: - from functools import wraps -except ImportError: - # Python 2.4 compatibility - def wraps(original): - def inner(f): - f.__name__ = original.__name__ - f.__doc__ = original.__doc__ - f.__module__ = original.__module__ - return f - - return inner - - -try: - unicode -except NameError: - # Python 3 - basestring = unicode = str - -try: - long -except NameError: - # Python 3 - long = int - -inPy3k = sys.version_info[0] == 3 - -if inPy3k: - self = "__self__" -else: - self = "im_self" - - -# getsignature and mocksignature heavily "inspired" by -# the decorator module: http://pypi.python.org/pypi/decorator/ -# by Michele Simionato - - -def _getsignature(func, skipfirst): - if inspect is None: - raise ImportError("inspect module not available") - - if inspect.isclass(func): - func = func.__init__ - # will have a self arg - skipfirst = True - elif not (inspect.ismethod(func) or inspect.isfunction(func)): - func = func.__call__ - - regargs, varargs, varkwargs, defaults = inspect.getargspec(func) - - # instance methods need to lose the self argument - if getattr(func, self, None) is not None: - regargs = regargs[1:] - - _msg = "_mock_ is a reserved argument name, can't mock signatures using _mock_" - assert "_mock_" not in regargs, _msg - if varargs is not None: - assert "_mock_" not in varargs, _msg - if varkwargs is not None: - assert "_mock_" not in varkwargs, _msg - if skipfirst: - regargs = regargs[1:] - signature = inspect.formatargspec( - regargs, varargs, varkwargs, defaults, formatvalue=lambda value: "" - ) - return signature[1:-1], func - - -def _copy_func_details(func, funcopy): - funcopy.__name__ = func.__name__ - funcopy.__doc__ = func.__doc__ - funcopy.__dict__.update(func.__dict__) - funcopy.__module__ = func.__module__ - if not inPy3k: - funcopy.func_defaults = func.func_defaults - else: - funcopy.__defaults__ = func.__defaults__ - funcopy.__kwdefaults__ = func.__kwdefaults__ - - -def mocksignature(func, mock=None, skipfirst=False): - """ - mocksignature(func, mock=None, skipfirst=False) - - Create a new function with the same signature as `func` that delegates - to `mock`. If `skipfirst` is True the first argument is skipped, useful - for methods where `self` needs to be omitted from the new function. - - If you don't pass in a `mock` then one will be created for you. - - The mock is set as the `mock` attribute of the returned function for easy - access. - - `mocksignature` can also be used with classes. It copies the signature of - the `__init__` method. - - When used with callable objects (instances) it copies the signature of the - `__call__` method. - """ - if mock is None: - mock = Mock() - signature, func = _getsignature(func, skipfirst) - src = "lambda %(signature)s: _mock_(%(signature)s)" % {"signature": signature} - - funcopy = eval(src, dict(_mock_=mock)) - _copy_func_details(func, funcopy) - funcopy.mock = mock - return funcopy - - -def _is_magic(name): - return "__%s__" % name[2:-2] == name - - -class SentinelObject(object): - "A unique, named, sentinel object." - - def __init__(self, name): - self.name = name - - def __repr__(self): - return '' % self.name - - -class Sentinel(object): - """Access attributes to return a named object, usable as a sentinel.""" - - def __init__(self): - self._sentinels = {} - - def __getattr__(self, name): - if name == "__bases__": - # Without this help(mock) raises an exception - raise AttributeError - return self._sentinels.setdefault(name, SentinelObject(name)) - - -sentinel = Sentinel() - -DEFAULT = sentinel.DEFAULT - - -class OldStyleClass: - pass - - -ClassType = type(OldStyleClass) - - -def _copy(value): - if type(value) in (dict, list, tuple, set): - return type(value)(value) - return value - - -if inPy3k: - class_types = type -else: - class_types = (type, ClassType) - - -class Mock(object): - """ - Create a new ``Mock`` object. ``Mock`` takes several optional arguments - that specify the behaviour of the Mock object: - - * ``spec``: This can be either a list of strings or an existing object (a - class or instance) that acts as the specification for the mock object. If - you pass in an object then a list of strings is formed by calling dir on - the object (excluding unsupported magic attributes and methods). Accessing - any attribute not in this list will raise an ``AttributeError``. - - If ``spec`` is an object (rather than a list of strings) then - `mock.__class__` returns the class of the spec object. This allows mocks - to pass `isinstance` tests. - - * ``spec_set``: A stricter variant of ``spec``. If used, attempting to *set* - or get an attribute on the mock that isn't on the object passed as - ``spec_set`` will raise an ``AttributeError``. - - * ``side_effect``: A function to be called whenever the Mock is called. See - the :attr:`Mock.side_effect` attribute. Useful for raising exceptions or - dynamically changing return values. The function is called with the same - arguments as the mock, and unless it returns :data:`DEFAULT`, the return - value of this function is used as the return value. - - Alternatively ``side_effect`` can be an exception class or instance. In - this case the exception will be raised when the mock is called. - - * ``return_value``: The value returned when the mock is called. By default - this is a new Mock (created on first access). See the - :attr:`Mock.return_value` attribute. - - * ``wraps``: Item for the mock object to wrap. If ``wraps`` is not None - then calling the Mock will pass the call through to the wrapped object - (returning the real result and ignoring ``return_value``). Attribute - access on the mock will return a Mock object that wraps the corresponding - attribute of the wrapped object (so attempting to access an attribute that - doesn't exist will raise an ``AttributeError``). - - If the mock has an explicit ``return_value`` set then calls are not passed - to the wrapped object and the ``return_value`` is returned instead. - - * ``name``: If the mock has a name then it will be used in the repr of the - mock. This can be useful for debugging. The name is propagated to child - mocks. - """ - - def __new__(cls, *args, **kw): - # every instance has its own class - # so we can create magic methods on the - # class without stomping on other mocks - new = type(cls.__name__, (cls,), {"__doc__": cls.__doc__}) - return object.__new__(new) - - def __init__( - self, - spec=None, - side_effect=None, - return_value=DEFAULT, - wraps=None, - name=None, - spec_set=None, - parent=None, - ): - self._parent = parent - self._name = name - _spec_class = None - if spec_set is not None: - spec = spec_set - spec_set = True - - if spec is not None and not isinstance(spec, list): - if isinstance(spec, class_types): - _spec_class = spec - else: - _spec_class = spec.__class__ - spec = dir(spec) - - self._spec_class = _spec_class - self._spec_set = spec_set - self._methods = spec - self._children = {} - self._return_value = return_value - self.side_effect = side_effect - self._wraps = wraps - - self.reset_mock() - - @property - def __class__(self): - if self._spec_class is None: - return type(self) - return self._spec_class - - def reset_mock(self): - "Restore the mock object to its initial state." - self.called = False - self.call_args = None - self.call_count = 0 - self.call_args_list = [] - self.method_calls = [] - for child in self._children.values(): - child.reset_mock() - if isinstance(self._return_value, Mock): - if not self._return_value is self: - self._return_value.reset_mock() - - def __get_return_value(self): - if self._return_value is DEFAULT: - self._return_value = self._get_child_mock() - return self._return_value - - def __set_return_value(self, value): - self._return_value = value - - __return_value_doc = "The value to be returned when the mock is called." - return_value = property(__get_return_value, __set_return_value, __return_value_doc) - - def __call__(self, *args, **kwargs): - self.called = True - self.call_count += 1 - self.call_args = callargs((args, kwargs)) - self.call_args_list.append(callargs((args, kwargs))) - - parent = self._parent - name = self._name - while parent is not None: - parent.method_calls.append(callargs((name, args, kwargs))) - if parent._parent is None: - break - name = parent._name + "." + name - parent = parent._parent - - ret_val = DEFAULT - if self.side_effect is not None: - if ( - isinstance(self.side_effect, BaseException) - or isinstance(self.side_effect, class_types) - and issubclass(self.side_effect, BaseException) - ): - raise self.side_effect - - ret_val = self.side_effect(*args, **kwargs) - if ret_val is DEFAULT: - ret_val = self.return_value - - if self._wraps is not None and self._return_value is DEFAULT: - return self._wraps(*args, **kwargs) - if ret_val is DEFAULT: - ret_val = self.return_value - return ret_val - - def __getattr__(self, name): - if name == "_methods": - raise AttributeError(name) - elif self._methods is not None: - if name not in self._methods or name in _all_magics: - raise AttributeError("Mock object has no attribute '%s'" % name) - elif _is_magic(name): - raise AttributeError(name) - - if name not in self._children: - wraps = None - if self._wraps is not None: - wraps = getattr(self._wraps, name) - self._children[name] = self._get_child_mock( - parent=self, name=name, wraps=wraps - ) - - return self._children[name] - - def __repr__(self): - if self._name is None and self._spec_class is None: - return object.__repr__(self) - - name_string = "" - spec_string = "" - if self._name is not None: - - def get_name(name): - if name is None: - return "mock" - return name - - parent = self._parent - name = self._name - while parent is not None: - name = get_name(parent._name) + "." + name - parent = parent._parent - name_string = " name=%r" % name - if self._spec_class is not None: - spec_string = " spec=%r" - if self._spec_set: - spec_string = " spec_set=%r" - spec_string = spec_string % self._spec_class.__name__ - return "<%s%s%s id='%s'>" % ( - type(self).__name__, - name_string, - spec_string, - id(self), - ) - - def __setattr__(self, name, value): - if not "method_calls" in self.__dict__: - # allow all attribute setting until initialisation is complete - return object.__setattr__(self, name, value) - if ( - self._spec_set - and self._methods is not None - and name not in self._methods - and name not in self.__dict__ - and name != "return_value" - ): - raise AttributeError("Mock object has no attribute '%s'" % name) - if name in _unsupported_magics: - msg = "Attempting to set unsupported magic method %r." % name - raise AttributeError(msg) - elif name in _all_magics: - if self._methods is not None and name not in self._methods: - raise AttributeError("Mock object has no attribute '%s'" % name) - - if not isinstance(value, Mock): - setattr(type(self), name, _get_method(name, value)) - original = value - real = lambda *args, **kw: original(self, *args, **kw) - value = mocksignature(value, real, skipfirst=True) - else: - setattr(type(self), name, value) - return object.__setattr__(self, name, value) - - def __delattr__(self, name): - if name in _all_magics and name in type(self).__dict__: - delattr(type(self), name) - return object.__delattr__(self, name) - - def assert_called_with(self, *args, **kwargs): - """ - assert that the mock was called with the specified arguments. - - Raises an AssertionError if the args and keyword args passed in are - different to the last call to the mock. - """ - if self.call_args is None: - raise AssertionError("Expected: %s\nNot called" % ((args, kwargs),)) - if not self.call_args == (args, kwargs): - raise AssertionError( - "Expected: %s\nCalled with: %s" % ((args, kwargs), self.call_args) - ) - - def assert_called_once_with(self, *args, **kwargs): - """ - assert that the mock was called exactly once and with the specified - arguments. - """ - if not self.call_count == 1: - msg = "Expected to be called once. Called %s times." % self.call_count - raise AssertionError(msg) - return self.assert_called_with(*args, **kwargs) - - def _get_child_mock(self, **kw): - klass = type(self).__mro__[1] - return klass(**kw) - - -class callargs(tuple): - """ - A tuple for holding the results of a call to a mock, either in the form - `(args, kwargs)` or `(name, args, kwargs)`. - - If args or kwargs are empty then a callargs tuple will compare equal to - a tuple without those values. This makes comparisons less verbose:: - - callargs('name', (), {}) == ('name',) - callargs('name', (1,), {}) == ('name', (1,)) - callargs((), {'a': 'b'}) == ({'a': 'b'},) - """ - - def __eq__(self, other): - if len(self) == 3: - if other[0] != self[0]: - return False - args_kwargs = self[1:] - other_args_kwargs = other[1:] - else: - args_kwargs = tuple(self) - other_args_kwargs = other - - if len(other_args_kwargs) == 0: - other_args, other_kwargs = (), {} - elif len(other_args_kwargs) == 1: - if isinstance(other_args_kwargs[0], tuple): - other_args = other_args_kwargs[0] - other_kwargs = {} - else: - other_args = () - other_kwargs = other_args_kwargs[0] - else: - other_args, other_kwargs = other_args_kwargs - - return tuple(args_kwargs) == (other_args, other_kwargs) - - -def _dot_lookup(thing, comp, import_path): - try: - return getattr(thing, comp) - except AttributeError: - __import__(import_path) - return getattr(thing, comp) - - -def _importer(target): - components = target.split(".") - import_path = components.pop(0) - thing = __import__(import_path) - - for comp in components: - import_path += ".%s" % comp - thing = _dot_lookup(thing, comp, import_path) - return thing - - -class _patch(object): - def __init__(self, target, attribute, new, spec, create, mocksignature, spec_set): - self.target = target - self.attribute = attribute - self.new = new - self.spec = spec - self.create = create - self.has_local = False - self.mocksignature = mocksignature - self.spec_set = spec_set - - def copy(self): - return _patch( - self.target, - self.attribute, - self.new, - self.spec, - self.create, - self.mocksignature, - self.spec_set, - ) - - def __call__(self, func): - if isinstance(func, class_types): - return self.decorate_class(func) - else: - return self.decorate_callable(func) - - def decorate_class(self, klass): - for attr in dir(klass): - attr_value = getattr(klass, attr) - if attr.startswith("test") and hasattr(attr_value, "__call__"): - setattr(klass, attr, self.copy()(attr_value)) - return klass - - def decorate_callable(self, func): - if hasattr(func, "patchings"): - func.patchings.append(self) - return func - - @wraps(func) - def patched(*args, **keywargs): - # don't use a with here (backwards compatability with 2.5) - extra_args = [] - for patching in patched.patchings: - arg = patching.__enter__() - if patching.new is DEFAULT: - extra_args.append(arg) - args += tuple(extra_args) - try: - return func(*args, **keywargs) - finally: - for patching in reversed(getattr(patched, "patchings", [])): - patching.__exit__() - - patched.patchings = [self] - if hasattr(func, "func_code"): - # not in Python 3 - patched.compat_co_firstlineno = getattr( - func, "compat_co_firstlineno", func.func_code.co_firstlineno - ) - return patched - - def get_original(self): - target = self.target - name = self.attribute - - original = DEFAULT - local = False - - try: - original = target.__dict__[name] - except (AttributeError, KeyError): - original = getattr(target, name, DEFAULT) - else: - local = True - - if not self.create and original is DEFAULT: - raise AttributeError("%s does not have the attribute %r" % (target, name)) - return original, local - - def __enter__(self): - """Perform the patch.""" - new, spec, spec_set = self.new, self.spec, self.spec_set - original, local = self.get_original() - if new is DEFAULT: - # XXXX what if original is DEFAULT - shouldn't use it as a spec - inherit = False - if spec_set == True: - spec_set = original - if isinstance(spec_set, class_types): - inherit = True - elif spec == True: - # set spec to the object we are replacing - spec = original - if isinstance(spec, class_types): - inherit = True - new = Mock(spec=spec, spec_set=spec_set) - if inherit: - new.return_value = Mock(spec=spec, spec_set=spec_set) - new_attr = new - if self.mocksignature: - new_attr = mocksignature(original, new) - - self.temp_original = original - self.is_local = local - setattr(self.target, self.attribute, new_attr) - return new - - def __exit__(self, *_): - """Undo the patch.""" - if self.is_local and self.temp_original is not DEFAULT: - setattr(self.target, self.attribute, self.temp_original) - else: - delattr(self.target, self.attribute) - if not self.create and not hasattr(self.target, self.attribute): - # needed for proxy objects like django settings - setattr(self.target, self.attribute, self.temp_original) - - del self.temp_original - del self.is_local - - start = __enter__ - stop = __exit__ - - -def _patch_object( - target, - attribute, - new=DEFAULT, - spec=None, - create=False, - mocksignature=False, - spec_set=None, -): - """ - patch.object(target, attribute, new=DEFAULT, spec=None, create=False, - mocksignature=False, spec_set=None) - - patch the named member (`attribute`) on an object (`target`) with a mock - object. - - Arguments new, spec, create, mocksignature and spec_set have the same - meaning as for patch. - """ - return _patch(target, attribute, new, spec, create, mocksignature, spec_set) - - -def patch_object(*args, **kwargs): - "A deprecated form of patch.object(...)" - warnings.warn(("Please use patch.object instead."), DeprecationWarning, 2) - return _patch_object(*args, **kwargs) - - -def patch( - target, new=DEFAULT, spec=None, create=False, mocksignature=False, spec_set=None -): - """ - ``patch`` acts as a function decorator, class decorator or a context - manager. Inside the body of the function or with statement, the ``target`` - (specified in the form `'PackageName.ModuleName.ClassName'`) is patched - with a ``new`` object. When the function/with statement exits the patch is - undone. - - The target is imported and the specified attribute patched with the new - object, so it must be importable from the environment you are calling the - decorator from. - - If ``new`` is omitted, then a new ``Mock`` is created and passed in as an - extra argument to the decorated function. - - The ``spec`` and ``spec_set`` keyword arguments are passed to the ``Mock`` - if patch is creating one for you. - - In addition you can pass ``spec=True`` or ``spec_set=True``, which causes - patch to pass in the object being mocked as the spec/spec_set object. - - If ``mocksignature`` is True then the patch will be done with a function - created by mocking the one being replaced. If the object being replaced is - a class then the signature of `__init__` will be copied. If the object - being replaced is a callable object then the signature of `__call__` will - be copied. - - By default ``patch`` will fail to replace attributes that don't exist. If - you pass in 'create=True' and the attribute doesn't exist, patch will - create the attribute for you when the patched function is called, and - delete it again afterwards. This is useful for writing tests against - attributes that your production code creates at runtime. It is off by by - default because it can be dangerous. With it switched on you can write - passing tests against APIs that don't actually exist! - - Patch can be used as a TestCase class decorator. It works by - decorating each test method in the class. This reduces the boilerplate - code when your test methods share a common patchings set. - - Patch can be used with the with statement, if this is available in your - version of Python. Here the patching applies to the indented block after - the with statement. If you use "as" then the patched object will be bound - to the name after the "as"; very useful if `patch` is creating a mock - object for you. - - `patch.dict(...)` and `patch.object(...)` are available for alternate - use-cases. - """ - try: - target, attribute = target.rsplit(".", 1) - except (TypeError, ValueError): - raise TypeError("Need a valid target to patch. You supplied: %r" % (target,)) - target = _importer(target) - return _patch(target, attribute, new, spec, create, mocksignature, spec_set) - - -class _patch_dict(object): - """ - Patch a dictionary and restore the dictionary to its original state after - the test. - - `in_dict` can be a dictionary or a mapping like container. If it is a - mapping then it must at least support getting, setting and deleting items - plus iterating over keys. - - `in_dict` can also be a string specifying the name of the dictionary, which - will then be fetched by importing it. - - `values` can be a dictionary of values to set in the dictionary. `values` - can also be an iterable of ``(key, value)`` pairs. - - If `clear` is True then the dictionary will be cleared before the new - values are set. - """ - - def __init__(self, in_dict, values=(), clear=False): - if isinstance(in_dict, basestring): - in_dict = _importer(in_dict) - self.in_dict = in_dict - # support any argument supported by dict(...) constructor - self.values = dict(values) - self.clear = clear - self._original = None - - def __call__(self, f): - if isinstance(f, class_types): - return self.decorate_class(f) - - @wraps(f) - def _inner(*args, **kw): - self._patch_dict() - try: - return f(*args, **kw) - finally: - self._unpatch_dict() - - return _inner - - def decorate_class(self, klass): - for attr in dir(klass): - attr_value = getattr(klass, attr) - if attr.startswith("test") and hasattr(attr_value, "__call__"): - decorator = _patch_dict(self.in_dict, self.values, self.clear) - decorated = decorator(attr_value) - setattr(klass, attr, decorated) - return klass - - def __enter__(self): - """Patch the dict.""" - self._patch_dict() - - def _patch_dict(self): - """Unpatch the dict.""" - values = self.values - in_dict = self.in_dict - clear = self.clear - - try: - original = in_dict.copy() - except AttributeError: - # dict like object with no copy method - # must support iteration over keys - original = {} - for key in in_dict: - original[key] = in_dict[key] - self._original = original - - if clear: - _clear_dict(in_dict) - - try: - in_dict.update(values) - except AttributeError: - # dict like object with no update method - for key in values: - in_dict[key] = values[key] - - def _unpatch_dict(self): - in_dict = self.in_dict - original = self._original - - _clear_dict(in_dict) - - try: - in_dict.update(original) - except AttributeError: - for key in original: - in_dict[key] = original[key] - - def __exit__(self, *args): - self._unpatch_dict() - return False - - start = __enter__ - stop = __exit__ - - -def _clear_dict(in_dict): - try: - in_dict.clear() - except AttributeError: - keys = list(in_dict) - for key in keys: - del in_dict[key] - - -patch.object = _patch_object -patch.dict = _patch_dict - - -magic_methods = ( - "lt le gt ge eq ne " - "getitem setitem delitem " - "len contains iter " - "hash str sizeof " - "enter exit " - "divmod neg pos abs invert " - "complex int float index " - "trunc floor ceil " -) - -numerics = "add sub mul div truediv floordiv mod lshift rshift and xor or pow " -inplace = " ".join("i%s" % n for n in numerics.split()) -right = " ".join("r%s" % n for n in numerics.split()) -extra = "" -if inPy3k: - extra = "bool next " -else: - extra = "unicode long nonzero oct hex " -# __truediv__ and __rtruediv__ not available in Python 3 either - -# not including __prepare__, __instancecheck__, __subclasscheck__ -# (as they are metaclass methods) -# __del__ is not supported at all as it causes problems if it exists - -_non_defaults = set( - "__%s__" % method - for method in [ - "cmp", - "getslice", - "setslice", - "coerce", - "subclasses", - "dir", - "format", - "get", - "set", - "delete", - "reversed", - "missing", - "reduce", - "reduce_ex", - "getinitargs", - "getnewargs", - "getstate", - "setstate", - "getformat", - "setformat", - "repr", - ] -) - - -def _get_method(name, func): - "Turns a callable object (like a mock) into a real function" - - def method(self, *args, **kw): - return func(self, *args, **kw) - - method.__name__ = name - return method - - -_magics = set( - "__%s__" % method - for method in " ".join([magic_methods, numerics, inplace, right, extra]).split() -) - -_all_magics = _magics | _non_defaults - -_unsupported_magics = set( - [ - "__getattr__", - "__setattr__", - "__init__", - "__new__", - "__prepare__" "__instancecheck__", - "__subclasscheck__", - "__del__", - ] -) - -_calculate_return_value = { - "__hash__": lambda self: object.__hash__(self), - "__str__": lambda self: object.__str__(self), - "__sizeof__": lambda self: object.__sizeof__(self), - "__unicode__": lambda self: unicode(object.__str__(self)), -} - -_return_values = { - "__int__": 1, - "__contains__": False, - "__len__": 0, - "__iter__": iter([]), - "__exit__": False, - "__complex__": 1j, - "__float__": 1.0, - "__bool__": True, - "__nonzero__": True, - "__oct__": "1", - "__hex__": "0x1", - "__long__": long(1), - "__index__": 1, -} - - -def _set_return_value(mock, method, name): - return_value = DEFAULT - if name in _return_values: - return_value = _return_values[name] - elif name in _calculate_return_value: - try: - return_value = _calculate_return_value[name](mock) - except AttributeError: - return_value = AttributeError(name) - if return_value is not DEFAULT: - method.return_value = return_value - - -class MagicMock(Mock): - """ - MagicMock is a subclass of :Mock with default implementations - of most of the magic methods. You can use MagicMock without having to - configure the magic methods yourself. - - If you use the ``spec`` or ``spec_set`` arguments then *only* magic - methods that exist in the spec will be created. - - Attributes and the return value of a `MagicMock` will also be `MagicMocks`. - """ - - def __init__(self, *args, **kw): - Mock.__init__(self, *args, **kw) - - these_magics = _magics - if self._methods is not None: - these_magics = _magics.intersection(self._methods) - - for entry in these_magics: - # could specify parent? - m = Mock() - setattr(self, entry, m) - _set_return_value(self, m, entry) diff --git a/tests/mockgun/schema.pickle b/tests/mockgun/schema.pickle deleted file mode 100644 index affaa8aba..000000000 --- a/tests/mockgun/schema.pickle +++ /dev/null @@ -1,98684 +0,0 @@ -(dp0 -S'Playlist' -p1 -(dp2 -S'open_notes_count' -p3 -(dp4 -S'mandatory' -p5 -(dp6 -S'editable' -p7 -I00 -sS'value' -p8 -I00 -ssS'name' -p9 -(dp10 -S'editable' -p11 -I01 -sS'value' -p12 -S'Open Notes Count' -p13 -ssS'data_type' -p14 -(dp15 -S'editable' -p16 -I00 -sS'value' -p17 -S'text' -p18 -ssS'entity_type' -p19 -(dp20 -S'editable' -p21 -I00 -sS'value' -p22 -S'Playlist' -p23 -ssS'editable' -p24 -(dp25 -S'editable' -p26 -I00 -sS'value' -p27 -I00 -ssS'unique' -p28 -(dp29 -S'editable' -p30 -I00 -sS'value' -p31 -I00 -ssS'properties' -p32 -(dp33 -S'default_value' -p34 -(dp35 -S'editable' -p36 -I00 -sS'value' -p37 -NssS'summary_default' -p38 -(dp39 -S'editable' -p40 -I01 -sS'value' -p41 -S'none' -p42 -sssS'description' -p43 -(dp44 -S'editable' -p45 -I01 -sS'value' -p46 -S'' -p47 -sssS'code' -p48 -(dp49 -S'mandatory' -p50 -(dp51 -S'editable' -p52 -I00 -sS'value' -p53 -I01 -ssS'name' -p54 -(dp55 -S'editable' -p56 -I01 -sS'value' -p57 -S'Playlist Name' -p58 -ssS'data_type' -p59 -(dp60 -S'editable' -p61 -I00 -sS'value' -p62 -S'text' -p63 -ssS'entity_type' -p64 -(dp65 -S'editable' -p66 -I00 -sS'value' -p67 -S'Playlist' -p68 -ssS'editable' -p69 -(dp70 -S'editable' -p71 -I00 -sS'value' -p72 -I01 -ssS'unique' -p73 -(dp74 -S'editable' -p75 -I00 -sS'value' -p76 -I00 -ssS'properties' -p77 -(dp78 -S'default_value' -p79 -(dp80 -S'editable' -p81 -I00 -sS'value' -p82 -NssS'summary_default' -p83 -(dp84 -S'editable' -p85 -I01 -sS'value' -p86 -S'none' -p87 -sssS'description' -p88 -(dp89 -S'editable' -p90 -I01 -sS'value' -p91 -g47 -sssS'open_notes' -p92 -(dp93 -S'mandatory' -p94 -(dp95 -S'editable' -p96 -I00 -sS'value' -p97 -I00 -ssS'name' -p98 -(dp99 -S'editable' -p100 -I01 -sS'value' -p101 -S'Open Notes' -p102 -ssS'data_type' -p103 -(dp104 -S'editable' -p105 -I00 -sS'value' -p106 -S'multi_entity' -p107 -ssS'entity_type' -p108 -(dp109 -S'editable' -p110 -I00 -sS'value' -p111 -S'Playlist' -p112 -ssS'editable' -p113 -(dp114 -S'editable' -p115 -I00 -sS'value' -p116 -I00 -ssS'unique' -p117 -(dp118 -S'editable' -p119 -I00 -sS'value' -p120 -I00 -ssS'properties' -p121 -(dp122 -S'default_value' -p123 -(dp124 -S'editable' -p125 -I00 -sS'value' -p126 -NssS'summary_default' -p127 -(dp128 -S'editable' -p129 -I01 -sS'value' -p130 -S'none' -p131 -ssS'valid_types' -p132 -(dp133 -S'editable' -p134 -I01 -sS'value' -p135 -(lp136 -S'Note' -p137 -asssS'description' -p138 -(dp139 -S'editable' -p140 -I01 -sS'value' -p141 -g47 -sssS'description' -p142 -(dp143 -S'mandatory' -p144 -(dp145 -S'editable' -p146 -I00 -sS'value' -p147 -I00 -ssS'name' -p148 -(dp149 -S'editable' -p150 -I01 -sS'value' -p151 -S'Description' -p152 -ssS'data_type' -p153 -(dp154 -S'editable' -p155 -I00 -sS'value' -p156 -S'text' -p157 -ssS'entity_type' -p158 -(dp159 -S'editable' -p160 -I00 -sS'value' -p161 -S'Playlist' -p162 -ssS'editable' -p163 -(dp164 -S'editable' -p165 -I00 -sS'value' -p166 -I01 -ssS'unique' -p167 -(dp168 -S'editable' -p169 -I00 -sS'value' -p170 -I00 -ssS'properties' -p171 -(dp172 -S'default_value' -p173 -(dp174 -S'editable' -p175 -I00 -sS'value' -p176 -NssS'summary_default' -p177 -(dp178 -S'editable' -p179 -I01 -sS'value' -p180 -S'none' -p181 -sssS'description' -p182 -(dp183 -S'editable' -p184 -I01 -sS'value' -p185 -g47 -sssS'versions' -p186 -(dp187 -S'mandatory' -p188 -(dp189 -S'editable' -p190 -I00 -sS'value' -p191 -I00 -ssS'name' -p192 -(dp193 -S'editable' -p194 -I01 -sS'value' -p195 -S'Versions' -p196 -ssS'data_type' -p197 -(dp198 -S'editable' -p199 -I00 -sS'value' -p200 -S'multi_entity' -p201 -ssS'entity_type' -p202 -(dp203 -S'editable' -p204 -I00 -sS'value' -p205 -S'Playlist' -p206 -ssS'editable' -p207 -(dp208 -S'editable' -p209 -I00 -sS'value' -p210 -I01 -ssS'unique' -p211 -(dp212 -S'editable' -p213 -I00 -sS'value' -p214 -I00 -ssS'properties' -p215 -(dp216 -S'default_value' -p217 -(dp218 -S'editable' -p219 -I00 -sS'value' -p220 -NssS'summary_default' -p221 -(dp222 -S'editable' -p223 -I01 -sS'value' -p224 -S'none' -p225 -ssS'valid_types' -p226 -(dp227 -S'editable' -p228 -I01 -sS'value' -p229 -(lp230 -S'Version' -p231 -asssS'description' -p232 -(dp233 -S'editable' -p234 -I01 -sS'value' -p235 -g47 -sssS'notes' -p236 -(dp237 -S'mandatory' -p238 -(dp239 -S'editable' -p240 -I00 -sS'value' -p241 -I00 -ssS'name' -p242 -(dp243 -S'editable' -p244 -I01 -sS'value' -p245 -S'Notes' -p246 -ssS'data_type' -p247 -(dp248 -S'editable' -p249 -I00 -sS'value' -p250 -S'multi_entity' -p251 -ssS'entity_type' -p252 -(dp253 -S'editable' -p254 -I00 -sS'value' -p255 -S'Playlist' -p256 -ssS'editable' -p257 -(dp258 -S'editable' -p259 -I00 -sS'value' -p260 -I01 -ssS'unique' -p261 -(dp262 -S'editable' -p263 -I00 -sS'value' -p264 -I00 -ssS'properties' -p265 -(dp266 -S'default_value' -p267 -(dp268 -S'editable' -p269 -I00 -sS'value' -p270 -NssS'summary_default' -p271 -(dp272 -S'editable' -p273 -I01 -sS'value' -p274 -S'none' -p275 -ssS'valid_types' -p276 -(dp277 -S'editable' -p278 -I01 -sS'value' -p279 -(lp280 -S'Note' -p281 -asssS'description' -p282 -(dp283 -S'editable' -p284 -I01 -sS'value' -p285 -g47 -sssS'media_center_viewed_by_current_user_at' -p286 -(dp287 -S'mandatory' -p288 -(dp289 -S'editable' -p290 -I00 -sS'value' -p291 -I00 -ssS'name' -p292 -(dp293 -S'editable' -p294 -I01 -sS'value' -p295 -S'Media Center Date Viewed' -p296 -ssS'data_type' -p297 -(dp298 -S'editable' -p299 -I00 -sS'value' -p300 -S'date_time' -p301 -ssS'entity_type' -p302 -(dp303 -S'editable' -p304 -I00 -sS'value' -p305 -S'Playlist' -p306 -ssS'editable' -p307 -(dp308 -S'editable' -p309 -I00 -sS'value' -p310 -I00 -ssS'unique' -p311 -(dp312 -S'editable' -p313 -I00 -sS'value' -p314 -I00 -ssS'properties' -p315 -(dp316 -S'default_value' -p317 -(dp318 -S'editable' -p319 -I00 -sS'value' -p320 -NssS'summary_default' -p321 -(dp322 -S'editable' -p323 -I00 -sS'value' -p324 -S'none' -p325 -sssS'description' -p326 -(dp327 -S'editable' -p328 -I01 -sS'value' -p329 -g47 -sssS'sg_status' -p330 -(dp331 -S'mandatory' -p332 -(dp333 -S'editable' -p334 -I00 -sS'value' -p335 -I00 -ssS'name' -p336 -(dp337 -S'editable' -p338 -I01 -sS'value' -p339 -S'Status' -p340 -ssS'data_type' -p341 -(dp342 -S'editable' -p343 -I00 -sS'value' -p344 -S'status_list' -p345 -ssS'entity_type' -p346 -(dp347 -S'editable' -p348 -I00 -sS'value' -p349 -S'Playlist' -p350 -ssS'editable' -p351 -(dp352 -S'editable' -p353 -I00 -sS'value' -p354 -I01 -ssS'unique' -p355 -(dp356 -S'editable' -p357 -I00 -sS'value' -p358 -I00 -ssS'properties' -p359 -(dp360 -S'default_value' -p361 -(dp362 -S'editable' -p363 -I01 -sS'value' -p364 -S'opn' -p365 -ssS'valid_values' -p366 -(dp367 -S'editable' -p368 -I01 -sS'value' -p369 -(lp370 -S'clsd' -p371 -aS'ip' -p372 -aS'opn' -p373 -assS'summary_default' -p374 -(dp375 -S'editable' -p376 -I01 -sS'value' -p377 -S'none' -p378 -sssS'description' -p379 -(dp380 -S'editable' -p381 -I01 -sS'value' -p382 -g47 -sssS'updated_at' -p383 -(dp384 -S'mandatory' -p385 -(dp386 -S'editable' -p387 -I00 -sS'value' -p388 -I00 -ssS'name' -p389 -(dp390 -S'editable' -p391 -I01 -sS'value' -p392 -S'Date Updated' -p393 -ssS'data_type' -p394 -(dp395 -S'editable' -p396 -I00 -sS'value' -p397 -S'date_time' -p398 -ssS'entity_type' -p399 -(dp400 -S'editable' -p401 -I00 -sS'value' -p402 -S'Playlist' -p403 -ssS'editable' -p404 -(dp405 -S'editable' -p406 -I00 -sS'value' -p407 -I00 -ssS'unique' -p408 -(dp409 -S'editable' -p410 -I00 -sS'value' -p411 -I00 -ssS'properties' -p412 -(dp413 -S'default_value' -p414 -(dp415 -S'editable' -p416 -I00 -sS'value' -p417 -NssS'summary_default' -p418 -(dp419 -S'editable' -p420 -I01 -sS'value' -p421 -S'none' -p422 -sssS'description' -p423 -(dp424 -S'editable' -p425 -I01 -sS'value' -p426 -g47 -sssS'created_by' -p427 -(dp428 -S'mandatory' -p429 -(dp430 -S'editable' -p431 -I00 -sS'value' -p432 -I00 -ssS'name' -p433 -(dp434 -S'editable' -p435 -I01 -sS'value' -p436 -S'Created by' -p437 -ssS'data_type' -p438 -(dp439 -S'editable' -p440 -I00 -sS'value' -p441 -S'entity' -p442 -ssS'entity_type' -p443 -(dp444 -S'editable' -p445 -I00 -sS'value' -p446 -S'Playlist' -p447 -ssS'editable' -p448 -(dp449 -S'editable' -p450 -I00 -sS'value' -p451 -I00 -ssS'unique' -p452 -(dp453 -S'editable' -p454 -I00 -sS'value' -p455 -I00 -ssS'properties' -p456 -(dp457 -S'default_value' -p458 -(dp459 -S'editable' -p460 -I00 -sS'value' -p461 -NssS'summary_default' -p462 -(dp463 -S'editable' -p464 -I01 -sS'value' -p465 -S'none' -p466 -ssS'valid_types' -p467 -(dp468 -S'editable' -p469 -I01 -sS'value' -p470 -(lp471 -S'HumanUser' -p472 -aS'ApiUser' -p473 -asssS'description' -p474 -(dp475 -S'editable' -p476 -I01 -sS'value' -p477 -g47 -sssS'id' -p478 -(dp479 -S'mandatory' -p480 -(dp481 -S'editable' -p482 -I00 -sS'value' -p483 -I00 -ssS'name' -p484 -(dp485 -S'editable' -p486 -I01 -sS'value' -p487 -S'Id' -p488 -ssS'data_type' -p489 -(dp490 -S'editable' -p491 -I00 -sS'value' -p492 -S'number' -p493 -ssS'entity_type' -p494 -(dp495 -S'editable' -p496 -I00 -sS'value' -p497 -S'Playlist' -p498 -ssS'editable' -p499 -(dp500 -S'editable' -p501 -I00 -sS'value' -p502 -I00 -ssS'unique' -p503 -(dp504 -S'editable' -p505 -I00 -sS'value' -p506 -I00 -ssS'properties' -p507 -(dp508 -S'default_value' -p509 -(dp510 -S'editable' -p511 -I00 -sS'value' -p512 -NssS'summary_default' -p513 -(dp514 -S'editable' -p515 -I01 -sS'value' -p516 -S'none' -p517 -sssS'description' -p518 -(dp519 -S'editable' -p520 -I01 -sS'value' -p521 -g47 -sssS'project' -p522 -(dp523 -S'mandatory' -p524 -(dp525 -S'editable' -p526 -I00 -sS'value' -p527 -I00 -ssS'name' -p528 -(dp529 -S'editable' -p530 -I01 -sS'value' -p531 -S'Project' -p532 -ssS'data_type' -p533 -(dp534 -S'editable' -p535 -I00 -sS'value' -p536 -S'entity' -p537 -ssS'entity_type' -p538 -(dp539 -S'editable' -p540 -I00 -sS'value' -p541 -S'Playlist' -p542 -ssS'editable' -p543 -(dp544 -S'editable' -p545 -I00 -sS'value' -p546 -I01 -ssS'unique' -p547 -(dp548 -S'editable' -p549 -I00 -sS'value' -p550 -I00 -ssS'properties' -p551 -(dp552 -S'default_value' -p553 -(dp554 -S'editable' -p555 -I00 -sS'value' -p556 -NssS'summary_default' -p557 -(dp558 -S'editable' -p559 -I01 -sS'value' -p560 -S'none' -p561 -ssS'valid_types' -p562 -(dp563 -S'editable' -p564 -I01 -sS'value' -p565 -(lp566 -S'Project' -p567 -asssS'description' -p568 -(dp569 -S'editable' -p570 -I01 -sS'value' -p571 -g47 -sssS'filmstrip_image' -p572 -(dp573 -S'mandatory' -p574 -(dp575 -S'editable' -p576 -I00 -sS'value' -p577 -I00 -ssS'name' -p578 -(dp579 -S'editable' -p580 -I01 -sS'value' -p581 -S'Filmstrip Thumbnail' -p582 -ssS'data_type' -p583 -(dp584 -S'editable' -p585 -I00 -sS'value' -p586 -S'image' -p587 -ssS'entity_type' -p588 -(dp589 -S'editable' -p590 -I00 -sS'value' -p591 -S'Playlist' -p592 -ssS'editable' -p593 -(dp594 -S'editable' -p595 -I00 -sS'value' -p596 -I01 -ssS'unique' -p597 -(dp598 -S'editable' -p599 -I00 -sS'value' -p600 -I00 -ssS'properties' -p601 -(dp602 -S'default_value' -p603 -(dp604 -S'editable' -p605 -I00 -sS'value' -p606 -NssS'summary_default' -p607 -(dp608 -S'editable' -p609 -I01 -sS'value' -p610 -S'none' -p611 -sssS'description' -p612 -(dp613 -S'editable' -p614 -I01 -sS'value' -p615 -g47 -sssS'sg_date_and_time' -p616 -(dp617 -S'mandatory' -p618 -(dp619 -S'editable' -p620 -I00 -sS'value' -p621 -I00 -ssS'name' -p622 -(dp623 -S'editable' -p624 -I01 -sS'value' -p625 -S'Date and Time' -p626 -ssS'data_type' -p627 -(dp628 -S'editable' -p629 -I00 -sS'value' -p630 -S'date_time' -p631 -ssS'entity_type' -p632 -(dp633 -S'editable' -p634 -I00 -sS'value' -p635 -S'Playlist' -p636 -ssS'editable' -p637 -(dp638 -S'editable' -p639 -I00 -sS'value' -p640 -I01 -ssS'unique' -p641 -(dp642 -S'editable' -p643 -I00 -sS'value' -p644 -I00 -ssS'properties' -p645 -(dp646 -S'default_value' -p647 -(dp648 -S'editable' -p649 -I00 -sS'value' -p650 -NssS'summary_default' -p651 -(dp652 -S'editable' -p653 -I01 -sS'value' -p654 -S'none' -p655 -sssS'description' -p656 -(dp657 -S'editable' -p658 -I01 -sS'value' -p659 -g47 -sssS'image' -p660 -(dp661 -S'mandatory' -p662 -(dp663 -S'editable' -p664 -I00 -sS'value' -p665 -I00 -ssS'name' -p666 -(dp667 -S'editable' -p668 -I01 -sS'value' -p669 -S'Thumbnail' -p670 -ssS'data_type' -p671 -(dp672 -S'editable' -p673 -I00 -sS'value' -p674 -S'image' -p675 -ssS'entity_type' -p676 -(dp677 -S'editable' -p678 -I00 -sS'value' -p679 -S'Playlist' -p680 -ssS'editable' -p681 -(dp682 -S'editable' -p683 -I00 -sS'value' -p684 -I01 -ssS'unique' -p685 -(dp686 -S'editable' -p687 -I00 -sS'value' -p688 -I00 -ssS'properties' -p689 -(dp690 -S'default_value' -p691 -(dp692 -S'editable' -p693 -I00 -sS'value' -p694 -NssS'summary_default' -p695 -(dp696 -S'editable' -p697 -I01 -sS'value' -p698 -S'none' -p699 -sssS'description' -p700 -(dp701 -S'editable' -p702 -I01 -sS'value' -p703 -g47 -sssS'current_user_favorite' -p704 -(dp705 -S'mandatory' -p706 -(dp707 -S'editable' -p708 -I00 -sS'value' -p709 -I00 -ssS'name' -p710 -(dp711 -S'editable' -p712 -I01 -sS'value' -p713 -S'Favorite' -p714 -ssS'data_type' -p715 -(dp716 -S'editable' -p717 -I00 -sS'value' -p718 -S'checkbox' -p719 -ssS'entity_type' -p720 -(dp721 -S'editable' -p722 -I00 -sS'value' -p723 -S'Playlist' -p724 -ssS'editable' -p725 -(dp726 -S'editable' -p727 -I00 -sS'value' -p728 -I01 -ssS'unique' -p729 -(dp730 -S'editable' -p731 -I00 -sS'value' -p732 -I00 -ssS'properties' -p733 -(dp734 -S'default_value' -p735 -(dp736 -S'editable' -p737 -I00 -sS'value' -p738 -NssS'summary_default' -p739 -(dp740 -S'editable' -p741 -I01 -sS'value' -p742 -S'none' -p743 -sssS'description' -p744 -(dp745 -S'editable' -p746 -I01 -sS'value' -p747 -g47 -sssS'cached_display_name' -p748 -(dp749 -S'mandatory' -p750 -(dp751 -S'editable' -p752 -I00 -sS'value' -p753 -I00 -ssS'name' -p754 -(dp755 -S'editable' -p756 -I01 -sS'value' -p757 -S'Cached Display Name' -p758 -ssS'data_type' -p759 -(dp760 -S'editable' -p761 -I00 -sS'value' -p762 -S'text' -p763 -ssS'entity_type' -p764 -(dp765 -S'editable' -p766 -I00 -sS'value' -p767 -S'Playlist' -p768 -ssS'editable' -p769 -(dp770 -S'editable' -p771 -I00 -sS'value' -p772 -I01 -ssS'unique' -p773 -(dp774 -S'editable' -p775 -I00 -sS'value' -p776 -I00 -ssS'properties' -p777 -(dp778 -S'default_value' -p779 -(dp780 -S'editable' -p781 -I00 -sS'value' -p782 -NssS'summary_default' -p783 -(dp784 -S'editable' -p785 -I00 -sS'value' -p786 -S'none' -p787 -sssS'description' -p788 -(dp789 -S'editable' -p790 -I01 -sS'value' -p791 -g47 -sssS'tag_list' -p792 -(dp793 -S'mandatory' -p794 -(dp795 -S'editable' -p796 -I00 -sS'value' -p797 -I00 -ssS'name' -p798 -(dp799 -S'editable' -p800 -I01 -sS'value' -p801 -S'Tags' -p802 -ssS'data_type' -p803 -(dp804 -S'editable' -p805 -I00 -sS'value' -p806 -S'tag_list' -p807 -ssS'entity_type' -p808 -(dp809 -S'editable' -p810 -I00 -sS'value' -p811 -S'Playlist' -p812 -ssS'editable' -p813 -(dp814 -S'editable' -p815 -I00 -sS'value' -p816 -I01 -ssS'unique' -p817 -(dp818 -S'editable' -p819 -I00 -sS'value' -p820 -I00 -ssS'properties' -p821 -(dp822 -S'default_value' -p823 -(dp824 -S'editable' -p825 -I00 -sS'value' -p826 -NssS'summary_default' -p827 -(dp828 -S'editable' -p829 -I01 -sS'value' -p830 -S'none' -p831 -ssS'valid_types' -p832 -(dp833 -S'editable' -p834 -I01 -sS'value' -p835 -(lp836 -S'Tag' -p837 -asssS'description' -p838 -(dp839 -S'editable' -p840 -I01 -sS'value' -p841 -g47 -sssS'media_center_viewed_by_current_user' -p842 -(dp843 -S'mandatory' -p844 -(dp845 -S'editable' -p846 -I00 -sS'value' -p847 -I00 -ssS'name' -p848 -(dp849 -S'editable' -p850 -I01 -sS'value' -p851 -S'Media Center Viewed/Unviewed' -p852 -ssS'data_type' -p853 -(dp854 -S'editable' -p855 -I00 -sS'value' -p856 -S'list' -p857 -ssS'entity_type' -p858 -(dp859 -S'editable' -p860 -I00 -sS'value' -p861 -S'Playlist' -p862 -ssS'editable' -p863 -(dp864 -S'editable' -p865 -I00 -sS'value' -p866 -I01 -ssS'unique' -p867 -(dp868 -S'editable' -p869 -I00 -sS'value' -p870 -I00 -ssS'properties' -p871 -(dp872 -S'default_value' -p873 -(dp874 -S'editable' -p875 -I00 -sS'value' -p876 -NssS'valid_values' -p877 -(dp878 -S'editable' -p879 -I00 -sS'value' -p880 -(lp881 -S'read' -p882 -aS'unread' -p883 -assS'summary_default' -p884 -(dp885 -S'editable' -p886 -I00 -sS'value' -p887 -S'none' -p888 -sssS'description' -p889 -(dp890 -S'editable' -p891 -I01 -sS'value' -p892 -g47 -sssS'created_at' -p893 -(dp894 -S'mandatory' -p895 -(dp896 -S'editable' -p897 -I00 -sS'value' -p898 -I00 -ssS'name' -p899 -(dp900 -S'editable' -p901 -I01 -sS'value' -p902 -S'Date Created' -p903 -ssS'data_type' -p904 -(dp905 -S'editable' -p906 -I00 -sS'value' -p907 -S'date_time' -p908 -ssS'entity_type' -p909 -(dp910 -S'editable' -p911 -I00 -sS'value' -p912 -S'Playlist' -p913 -ssS'editable' -p914 -(dp915 -S'editable' -p916 -I00 -sS'value' -p917 -I00 -ssS'unique' -p918 -(dp919 -S'editable' -p920 -I00 -sS'value' -p921 -I00 -ssS'properties' -p922 -(dp923 -S'default_value' -p924 -(dp925 -S'editable' -p926 -I00 -sS'value' -p927 -NssS'summary_default' -p928 -(dp929 -S'editable' -p930 -I01 -sS'value' -p931 -S'none' -p932 -sssS'description' -p933 -(dp934 -S'editable' -p935 -I01 -sS'value' -p936 -g47 -sssS'updated_by' -p937 -(dp938 -S'mandatory' -p939 -(dp940 -S'editable' -p941 -I00 -sS'value' -p942 -I00 -ssS'name' -p943 -(dp944 -S'editable' -p945 -I01 -sS'value' -p946 -S'Updated by' -p947 -ssS'data_type' -p948 -(dp949 -S'editable' -p950 -I00 -sS'value' -p951 -S'entity' -p952 -ssS'entity_type' -p953 -(dp954 -S'editable' -p955 -I00 -sS'value' -p956 -S'Playlist' -p957 -ssS'editable' -p958 -(dp959 -S'editable' -p960 -I00 -sS'value' -p961 -I00 -ssS'unique' -p962 -(dp963 -S'editable' -p964 -I00 -sS'value' -p965 -I00 -ssS'properties' -p966 -(dp967 -S'default_value' -p968 -(dp969 -S'editable' -p970 -I00 -sS'value' -p971 -NssS'summary_default' -p972 -(dp973 -S'editable' -p974 -I01 -sS'value' -p975 -S'none' -p976 -ssS'valid_types' -p977 -(dp978 -S'editable' -p979 -I01 -sS'value' -p980 -(lp981 -S'HumanUser' -p982 -aS'ApiUser' -p983 -asssS'description' -p984 -(dp985 -S'editable' -p986 -I01 -sS'value' -p987 -g47 -ssssS'AppWelcomeUserConnection' -p988 -(dp989 -S'cached_display_name' -p990 -(dp991 -S'mandatory' -p992 -(dp993 -S'editable' -p994 -I00 -sS'value' -p995 -I00 -ssS'name' -p996 -(dp997 -S'editable' -p998 -I01 -sS'value' -p999 -S'Cached Display Name' -p1000 -ssS'data_type' -p1001 -(dp1002 -S'editable' -p1003 -I00 -sS'value' -p1004 -S'text' -p1005 -ssS'entity_type' -p1006 -(dp1007 -S'editable' -p1008 -I00 -sS'value' -p1009 -S'AppWelcomeUserConnection' -p1010 -ssS'editable' -p1011 -(dp1012 -S'editable' -p1013 -I00 -sS'value' -p1014 -I01 -ssS'unique' -p1015 -(dp1016 -S'editable' -p1017 -I00 -sS'value' -p1018 -I00 -ssS'properties' -p1019 -(dp1020 -S'default_value' -p1021 -(dp1022 -S'editable' -p1023 -I00 -sS'value' -p1024 -NssS'summary_default' -p1025 -(dp1026 -S'editable' -p1027 -I00 -sS'value' -p1028 -S'none' -p1029 -sssS'description' -p1030 -(dp1031 -S'editable' -p1032 -I01 -sS'value' -p1033 -g47 -sssS'app_welcome' -p1034 -(dp1035 -S'mandatory' -p1036 -(dp1037 -S'editable' -p1038 -I00 -sS'value' -p1039 -I00 -ssS'name' -p1040 -(dp1041 -S'editable' -p1042 -I01 -sS'value' -p1043 -S'App Welcome' -p1044 -ssS'data_type' -p1045 -(dp1046 -S'editable' -p1047 -I00 -sS'value' -p1048 -S'entity' -p1049 -ssS'entity_type' -p1050 -(dp1051 -S'editable' -p1052 -I00 -sS'value' -p1053 -S'AppWelcomeUserConnection' -p1054 -ssS'editable' -p1055 -(dp1056 -S'editable' -p1057 -I00 -sS'value' -p1058 -I01 -ssS'unique' -p1059 -(dp1060 -S'editable' -p1061 -I00 -sS'value' -p1062 -I00 -ssS'properties' -p1063 -(dp1064 -S'default_value' -p1065 -(dp1066 -S'editable' -p1067 -I00 -sS'value' -p1068 -NssS'summary_default' -p1069 -(dp1070 -S'editable' -p1071 -I00 -sS'value' -p1072 -S'none' -p1073 -ssS'valid_types' -p1074 -(dp1075 -S'editable' -p1076 -I00 -sS'value' -p1077 -(lp1078 -S'AppWelcome' -p1079 -asssS'description' -p1080 -(dp1081 -S'editable' -p1082 -I01 -sS'value' -p1083 -g47 -sssS'id' -p1084 -(dp1085 -S'mandatory' -p1086 -(dp1087 -S'editable' -p1088 -I00 -sS'value' -p1089 -I00 -ssS'name' -p1090 -(dp1091 -S'editable' -p1092 -I01 -sS'value' -p1093 -S'Id' -p1094 -ssS'data_type' -p1095 -(dp1096 -S'editable' -p1097 -I00 -sS'value' -p1098 -S'number' -p1099 -ssS'entity_type' -p1100 -(dp1101 -S'editable' -p1102 -I00 -sS'value' -p1103 -S'AppWelcomeUserConnection' -p1104 -ssS'editable' -p1105 -(dp1106 -S'editable' -p1107 -I00 -sS'value' -p1108 -I00 -ssS'unique' -p1109 -(dp1110 -S'editable' -p1111 -I00 -sS'value' -p1112 -I00 -ssS'properties' -p1113 -(dp1114 -S'default_value' -p1115 -(dp1116 -S'editable' -p1117 -I00 -sS'value' -p1118 -NssS'summary_default' -p1119 -(dp1120 -S'editable' -p1121 -I00 -sS'value' -p1122 -S'none' -p1123 -sssS'description' -p1124 -(dp1125 -S'editable' -p1126 -I01 -sS'value' -p1127 -g47 -sssS'user' -p1128 -(dp1129 -S'mandatory' -p1130 -(dp1131 -S'editable' -p1132 -I00 -sS'value' -p1133 -I00 -ssS'name' -p1134 -(dp1135 -S'editable' -p1136 -I01 -sS'value' -p1137 -S'User' -p1138 -ssS'data_type' -p1139 -(dp1140 -S'editable' -p1141 -I00 -sS'value' -p1142 -S'entity' -p1143 -ssS'entity_type' -p1144 -(dp1145 -S'editable' -p1146 -I00 -sS'value' -p1147 -S'AppWelcomeUserConnection' -p1148 -ssS'editable' -p1149 -(dp1150 -S'editable' -p1151 -I00 -sS'value' -p1152 -I01 -ssS'unique' -p1153 -(dp1154 -S'editable' -p1155 -I00 -sS'value' -p1156 -I00 -ssS'properties' -p1157 -(dp1158 -S'default_value' -p1159 -(dp1160 -S'editable' -p1161 -I00 -sS'value' -p1162 -NssS'summary_default' -p1163 -(dp1164 -S'editable' -p1165 -I00 -sS'value' -p1166 -S'none' -p1167 -ssS'valid_types' -p1168 -(dp1169 -S'editable' -p1170 -I00 -sS'value' -p1171 -(lp1172 -S'HumanUser' -p1173 -asssS'description' -p1174 -(dp1175 -S'editable' -p1176 -I01 -sS'value' -p1177 -g47 -ssssS'Group' -p1178 -(dp1179 -S'open_notes_count' -p1180 -(dp1181 -S'mandatory' -p1182 -(dp1183 -S'editable' -p1184 -I00 -sS'value' -p1185 -I00 -ssS'name' -p1186 -(dp1187 -S'editable' -p1188 -I01 -sS'value' -p1189 -S'Open Notes Count' -p1190 -ssS'data_type' -p1191 -(dp1192 -S'editable' -p1193 -I00 -sS'value' -p1194 -S'text' -p1195 -ssS'entity_type' -p1196 -(dp1197 -S'editable' -p1198 -I00 -sS'value' -p1199 -S'Group' -p1200 -ssS'editable' -p1201 -(dp1202 -S'editable' -p1203 -I00 -sS'value' -p1204 -I00 -ssS'unique' -p1205 -(dp1206 -S'editable' -p1207 -I00 -sS'value' -p1208 -I00 -ssS'properties' -p1209 -(dp1210 -S'default_value' -p1211 -(dp1212 -S'editable' -p1213 -I00 -sS'value' -p1214 -NssS'summary_default' -p1215 -(dp1216 -S'editable' -p1217 -I01 -sS'value' -p1218 -S'none' -p1219 -sssS'description' -p1220 -(dp1221 -S'editable' -p1222 -I01 -sS'value' -p1223 -g47 -sssS'code' -p1224 -(dp1225 -S'mandatory' -p1226 -(dp1227 -S'editable' -p1228 -I00 -sS'value' -p1229 -I01 -ssS'name' -p1230 -(dp1231 -S'editable' -p1232 -I01 -sS'value' -p1233 -S'Group Name' -p1234 -ssS'data_type' -p1235 -(dp1236 -S'editable' -p1237 -I00 -sS'value' -p1238 -S'text' -p1239 -ssS'entity_type' -p1240 -(dp1241 -S'editable' -p1242 -I00 -sS'value' -p1243 -S'Group' -p1244 -ssS'editable' -p1245 -(dp1246 -S'editable' -p1247 -I00 -sS'value' -p1248 -I01 -ssS'unique' -p1249 -(dp1250 -S'editable' -p1251 -I00 -sS'value' -p1252 -I00 -ssS'properties' -p1253 -(dp1254 -S'default_value' -p1255 -(dp1256 -S'editable' -p1257 -I00 -sS'value' -p1258 -NssS'summary_default' -p1259 -(dp1260 -S'editable' -p1261 -I01 -sS'value' -p1262 -S'none' -p1263 -sssS'description' -p1264 -(dp1265 -S'editable' -p1266 -I01 -sS'value' -p1267 -g47 -sssS'open_notes' -p1268 -(dp1269 -S'mandatory' -p1270 -(dp1271 -S'editable' -p1272 -I00 -sS'value' -p1273 -I00 -ssS'name' -p1274 -(dp1275 -S'editable' -p1276 -I01 -sS'value' -p1277 -S'Open Notes' -p1278 -ssS'data_type' -p1279 -(dp1280 -S'editable' -p1281 -I00 -sS'value' -p1282 -S'multi_entity' -p1283 -ssS'entity_type' -p1284 -(dp1285 -S'editable' -p1286 -I00 -sS'value' -p1287 -S'Group' -p1288 -ssS'editable' -p1289 -(dp1290 -S'editable' -p1291 -I00 -sS'value' -p1292 -I00 -ssS'unique' -p1293 -(dp1294 -S'editable' -p1295 -I00 -sS'value' -p1296 -I00 -ssS'properties' -p1297 -(dp1298 -S'default_value' -p1299 -(dp1300 -S'editable' -p1301 -I00 -sS'value' -p1302 -NssS'summary_default' -p1303 -(dp1304 -S'editable' -p1305 -I01 -sS'value' -p1306 -S'none' -p1307 -ssS'valid_types' -p1308 -(dp1309 -S'editable' -p1310 -I01 -sS'value' -p1311 -(lp1312 -S'Note' -p1313 -asssS'description' -p1314 -(dp1315 -S'editable' -p1316 -I01 -sS'value' -p1317 -g47 -sssS'users' -p1318 -(dp1319 -S'mandatory' -p1320 -(dp1321 -S'editable' -p1322 -I00 -sS'value' -p1323 -I00 -ssS'name' -p1324 -(dp1325 -S'editable' -p1326 -I01 -sS'value' -p1327 -S'Users' -p1328 -ssS'data_type' -p1329 -(dp1330 -S'editable' -p1331 -I00 -sS'value' -p1332 -S'multi_entity' -p1333 -ssS'entity_type' -p1334 -(dp1335 -S'editable' -p1336 -I00 -sS'value' -p1337 -S'Group' -p1338 -ssS'editable' -p1339 -(dp1340 -S'editable' -p1341 -I00 -sS'value' -p1342 -I01 -ssS'unique' -p1343 -(dp1344 -S'editable' -p1345 -I00 -sS'value' -p1346 -I00 -ssS'properties' -p1347 -(dp1348 -S'default_value' -p1349 -(dp1350 -S'editable' -p1351 -I00 -sS'value' -p1352 -NssS'summary_default' -p1353 -(dp1354 -S'editable' -p1355 -I01 -sS'value' -p1356 -S'none' -p1357 -ssS'valid_types' -p1358 -(dp1359 -S'editable' -p1360 -I01 -sS'value' -p1361 -(lp1362 -S'HumanUser' -p1363 -asssS'description' -p1364 -(dp1365 -S'editable' -p1366 -I01 -sS'value' -p1367 -g47 -sssS'created_at' -p1368 -(dp1369 -S'mandatory' -p1370 -(dp1371 -S'editable' -p1372 -I00 -sS'value' -p1373 -I00 -ssS'name' -p1374 -(dp1375 -S'editable' -p1376 -I01 -sS'value' -p1377 -S'Date Created' -p1378 -ssS'data_type' -p1379 -(dp1380 -S'editable' -p1381 -I00 -sS'value' -p1382 -S'date_time' -p1383 -ssS'entity_type' -p1384 -(dp1385 -S'editable' -p1386 -I00 -sS'value' -p1387 -S'Group' -p1388 -ssS'editable' -p1389 -(dp1390 -S'editable' -p1391 -I00 -sS'value' -p1392 -I00 -ssS'unique' -p1393 -(dp1394 -S'editable' -p1395 -I00 -sS'value' -p1396 -I00 -ssS'properties' -p1397 -(dp1398 -S'default_value' -p1399 -(dp1400 -S'editable' -p1401 -I00 -sS'value' -p1402 -NssS'summary_default' -p1403 -(dp1404 -S'editable' -p1405 -I01 -sS'value' -p1406 -S'none' -p1407 -sssS'description' -p1408 -(dp1409 -S'editable' -p1410 -I01 -sS'value' -p1411 -g47 -sssS'updated_at' -p1412 -(dp1413 -S'mandatory' -p1414 -(dp1415 -S'editable' -p1416 -I00 -sS'value' -p1417 -I00 -ssS'name' -p1418 -(dp1419 -S'editable' -p1420 -I01 -sS'value' -p1421 -S'Date Updated' -p1422 -ssS'data_type' -p1423 -(dp1424 -S'editable' -p1425 -I00 -sS'value' -p1426 -S'date_time' -p1427 -ssS'entity_type' -p1428 -(dp1429 -S'editable' -p1430 -I00 -sS'value' -p1431 -S'Group' -p1432 -ssS'editable' -p1433 -(dp1434 -S'editable' -p1435 -I00 -sS'value' -p1436 -I00 -ssS'unique' -p1437 -(dp1438 -S'editable' -p1439 -I00 -sS'value' -p1440 -I00 -ssS'properties' -p1441 -(dp1442 -S'default_value' -p1443 -(dp1444 -S'editable' -p1445 -I00 -sS'value' -p1446 -NssS'summary_default' -p1447 -(dp1448 -S'editable' -p1449 -I01 -sS'value' -p1450 -S'none' -p1451 -sssS'description' -p1452 -(dp1453 -S'editable' -p1454 -I01 -sS'value' -p1455 -g47 -sssS'created_by' -p1456 -(dp1457 -S'mandatory' -p1458 -(dp1459 -S'editable' -p1460 -I00 -sS'value' -p1461 -I00 -ssS'name' -p1462 -(dp1463 -S'editable' -p1464 -I01 -sS'value' -p1465 -S'Created by' -p1466 -ssS'data_type' -p1467 -(dp1468 -S'editable' -p1469 -I00 -sS'value' -p1470 -S'entity' -p1471 -ssS'entity_type' -p1472 -(dp1473 -S'editable' -p1474 -I00 -sS'value' -p1475 -S'Group' -p1476 -ssS'editable' -p1477 -(dp1478 -S'editable' -p1479 -I00 -sS'value' -p1480 -I00 -ssS'unique' -p1481 -(dp1482 -S'editable' -p1483 -I00 -sS'value' -p1484 -I00 -ssS'properties' -p1485 -(dp1486 -S'default_value' -p1487 -(dp1488 -S'editable' -p1489 -I00 -sS'value' -p1490 -NssS'summary_default' -p1491 -(dp1492 -S'editable' -p1493 -I01 -sS'value' -p1494 -S'none' -p1495 -ssS'valid_types' -p1496 -(dp1497 -S'editable' -p1498 -I01 -sS'value' -p1499 -(lp1500 -S'HumanUser' -p1501 -aS'ApiUser' -p1502 -asssS'description' -p1503 -(dp1504 -S'editable' -p1505 -I01 -sS'value' -p1506 -g47 -sssS'id' -p1507 -(dp1508 -S'mandatory' -p1509 -(dp1510 -S'editable' -p1511 -I00 -sS'value' -p1512 -I00 -ssS'name' -p1513 -(dp1514 -S'editable' -p1515 -I01 -sS'value' -p1516 -S'Id' -p1517 -ssS'data_type' -p1518 -(dp1519 -S'editable' -p1520 -I00 -sS'value' -p1521 -S'number' -p1522 -ssS'entity_type' -p1523 -(dp1524 -S'editable' -p1525 -I00 -sS'value' -p1526 -S'Group' -p1527 -ssS'editable' -p1528 -(dp1529 -S'editable' -p1530 -I00 -sS'value' -p1531 -I00 -ssS'unique' -p1532 -(dp1533 -S'editable' -p1534 -I00 -sS'value' -p1535 -I00 -ssS'properties' -p1536 -(dp1537 -S'default_value' -p1538 -(dp1539 -S'editable' -p1540 -I00 -sS'value' -p1541 -NssS'summary_default' -p1542 -(dp1543 -S'editable' -p1544 -I01 -sS'value' -p1545 -S'none' -p1546 -sssS'description' -p1547 -(dp1548 -S'editable' -p1549 -I01 -sS'value' -p1550 -g47 -sssS'cached_display_name' -p1551 -(dp1552 -S'mandatory' -p1553 -(dp1554 -S'editable' -p1555 -I00 -sS'value' -p1556 -I00 -ssS'name' -p1557 -(dp1558 -S'editable' -p1559 -I01 -sS'value' -p1560 -S'Cached Display Name' -p1561 -ssS'data_type' -p1562 -(dp1563 -S'editable' -p1564 -I00 -sS'value' -p1565 -S'text' -p1566 -ssS'entity_type' -p1567 -(dp1568 -S'editable' -p1569 -I00 -sS'value' -p1570 -S'Group' -p1571 -ssS'editable' -p1572 -(dp1573 -S'editable' -p1574 -I00 -sS'value' -p1575 -I01 -ssS'unique' -p1576 -(dp1577 -S'editable' -p1578 -I00 -sS'value' -p1579 -I00 -ssS'properties' -p1580 -(dp1581 -S'default_value' -p1582 -(dp1583 -S'editable' -p1584 -I00 -sS'value' -p1585 -NssS'summary_default' -p1586 -(dp1587 -S'editable' -p1588 -I00 -sS'value' -p1589 -S'none' -p1590 -sssS'description' -p1591 -(dp1592 -S'editable' -p1593 -I01 -sS'value' -p1594 -g47 -sssS'tag_list' -p1595 -(dp1596 -S'mandatory' -p1597 -(dp1598 -S'editable' -p1599 -I00 -sS'value' -p1600 -I00 -ssS'name' -p1601 -(dp1602 -S'editable' -p1603 -I01 -sS'value' -p1604 -S'Tags' -p1605 -ssS'data_type' -p1606 -(dp1607 -S'editable' -p1608 -I00 -sS'value' -p1609 -S'tag_list' -p1610 -ssS'entity_type' -p1611 -(dp1612 -S'editable' -p1613 -I00 -sS'value' -p1614 -S'Group' -p1615 -ssS'editable' -p1616 -(dp1617 -S'editable' -p1618 -I00 -sS'value' -p1619 -I01 -ssS'unique' -p1620 -(dp1621 -S'editable' -p1622 -I00 -sS'value' -p1623 -I00 -ssS'properties' -p1624 -(dp1625 -S'default_value' -p1626 -(dp1627 -S'editable' -p1628 -I00 -sS'value' -p1629 -NssS'summary_default' -p1630 -(dp1631 -S'editable' -p1632 -I01 -sS'value' -p1633 -S'none' -p1634 -ssS'valid_types' -p1635 -(dp1636 -S'editable' -p1637 -I01 -sS'value' -p1638 -(lp1639 -S'Tag' -p1640 -asssS'description' -p1641 -(dp1642 -S'editable' -p1643 -I01 -sS'value' -p1644 -g47 -sssS'notes' -p1645 -(dp1646 -S'mandatory' -p1647 -(dp1648 -S'editable' -p1649 -I00 -sS'value' -p1650 -I00 -ssS'name' -p1651 -(dp1652 -S'editable' -p1653 -I01 -sS'value' -p1654 -S'Notes' -p1655 -ssS'data_type' -p1656 -(dp1657 -S'editable' -p1658 -I00 -sS'value' -p1659 -S'multi_entity' -p1660 -ssS'entity_type' -p1661 -(dp1662 -S'editable' -p1663 -I00 -sS'value' -p1664 -S'Group' -p1665 -ssS'editable' -p1666 -(dp1667 -S'editable' -p1668 -I00 -sS'value' -p1669 -I01 -ssS'unique' -p1670 -(dp1671 -S'editable' -p1672 -I00 -sS'value' -p1673 -I00 -ssS'properties' -p1674 -(dp1675 -S'default_value' -p1676 -(dp1677 -S'editable' -p1678 -I00 -sS'value' -p1679 -NssS'summary_default' -p1680 -(dp1681 -S'editable' -p1682 -I01 -sS'value' -p1683 -S'none' -p1684 -ssS'valid_types' -p1685 -(dp1686 -S'editable' -p1687 -I01 -sS'value' -p1688 -(lp1689 -S'Note' -p1690 -asssS'description' -p1691 -(dp1692 -S'editable' -p1693 -I01 -sS'value' -p1694 -g47 -sssS'updated_by' -p1695 -(dp1696 -S'mandatory' -p1697 -(dp1698 -S'editable' -p1699 -I00 -sS'value' -p1700 -I00 -ssS'name' -p1701 -(dp1702 -S'editable' -p1703 -I01 -sS'value' -p1704 -S'Updated by' -p1705 -ssS'data_type' -p1706 -(dp1707 -S'editable' -p1708 -I00 -sS'value' -p1709 -S'entity' -p1710 -ssS'entity_type' -p1711 -(dp1712 -S'editable' -p1713 -I00 -sS'value' -p1714 -S'Group' -p1715 -ssS'editable' -p1716 -(dp1717 -S'editable' -p1718 -I00 -sS'value' -p1719 -I00 -ssS'unique' -p1720 -(dp1721 -S'editable' -p1722 -I00 -sS'value' -p1723 -I00 -ssS'properties' -p1724 -(dp1725 -S'default_value' -p1726 -(dp1727 -S'editable' -p1728 -I00 -sS'value' -p1729 -NssS'summary_default' -p1730 -(dp1731 -S'editable' -p1732 -I01 -sS'value' -p1733 -S'none' -p1734 -ssS'valid_types' -p1735 -(dp1736 -S'editable' -p1737 -I01 -sS'value' -p1738 -(lp1739 -S'HumanUser' -p1740 -aS'ApiUser' -p1741 -asssS'description' -p1742 -(dp1743 -S'editable' -p1744 -I01 -sS'value' -p1745 -g47 -ssssS'PhysicalAssetMocapTakeConnection' -p1746 -(dp1747 -S'physical_asset' -p1748 -(dp1749 -S'mandatory' -p1750 -(dp1751 -S'editable' -p1752 -I00 -sS'value' -p1753 -I00 -ssS'name' -p1754 -(dp1755 -S'editable' -p1756 -I01 -sS'value' -p1757 -S'Physical Asset' -p1758 -ssS'data_type' -p1759 -(dp1760 -S'editable' -p1761 -I00 -sS'value' -p1762 -S'entity' -p1763 -ssS'entity_type' -p1764 -(dp1765 -S'editable' -p1766 -I00 -sS'value' -p1767 -S'PhysicalAssetMocapTakeConnection' -p1768 -ssS'editable' -p1769 -(dp1770 -S'editable' -p1771 -I00 -sS'value' -p1772 -I00 -ssS'unique' -p1773 -(dp1774 -S'editable' -p1775 -I00 -sS'value' -p1776 -I00 -ssS'properties' -p1777 -(dp1778 -S'default_value' -p1779 -(dp1780 -S'editable' -p1781 -I00 -sS'value' -p1782 -NssS'summary_default' -p1783 -(dp1784 -S'editable' -p1785 -I00 -sS'value' -p1786 -S'none' -p1787 -ssS'valid_types' -p1788 -(dp1789 -S'editable' -p1790 -I00 -sS'value' -p1791 -(lp1792 -S'PhysicalAsset' -p1793 -asssS'description' -p1794 -(dp1795 -S'editable' -p1796 -I01 -sS'value' -p1797 -g47 -sssS'mocap_take' -p1798 -(dp1799 -S'mandatory' -p1800 -(dp1801 -S'editable' -p1802 -I00 -sS'value' -p1803 -I00 -ssS'name' -p1804 -(dp1805 -S'editable' -p1806 -I01 -sS'value' -p1807 -S'Mocap Take' -p1808 -ssS'data_type' -p1809 -(dp1810 -S'editable' -p1811 -I00 -sS'value' -p1812 -S'entity' -p1813 -ssS'entity_type' -p1814 -(dp1815 -S'editable' -p1816 -I00 -sS'value' -p1817 -S'PhysicalAssetMocapTakeConnection' -p1818 -ssS'editable' -p1819 -(dp1820 -S'editable' -p1821 -I00 -sS'value' -p1822 -I00 -ssS'unique' -p1823 -(dp1824 -S'editable' -p1825 -I00 -sS'value' -p1826 -I00 -ssS'properties' -p1827 -(dp1828 -S'default_value' -p1829 -(dp1830 -S'editable' -p1831 -I00 -sS'value' -p1832 -NssS'summary_default' -p1833 -(dp1834 -S'editable' -p1835 -I00 -sS'value' -p1836 -S'none' -p1837 -ssS'valid_types' -p1838 -(dp1839 -S'editable' -p1840 -I00 -sS'value' -p1841 -(lp1842 -S'MocapTake' -p1843 -asssS'description' -p1844 -(dp1845 -S'editable' -p1846 -I01 -sS'value' -p1847 -g47 -sssS'cached_display_name' -p1848 -(dp1849 -S'mandatory' -p1850 -(dp1851 -S'editable' -p1852 -I00 -sS'value' -p1853 -I00 -ssS'name' -p1854 -(dp1855 -S'editable' -p1856 -I01 -sS'value' -p1857 -S'Cached Display Name' -p1858 -ssS'data_type' -p1859 -(dp1860 -S'editable' -p1861 -I00 -sS'value' -p1862 -S'text' -p1863 -ssS'entity_type' -p1864 -(dp1865 -S'editable' -p1866 -I00 -sS'value' -p1867 -S'PhysicalAssetMocapTakeConnection' -p1868 -ssS'editable' -p1869 -(dp1870 -S'editable' -p1871 -I00 -sS'value' -p1872 -I01 -ssS'unique' -p1873 -(dp1874 -S'editable' -p1875 -I00 -sS'value' -p1876 -I00 -ssS'properties' -p1877 -(dp1878 -S'default_value' -p1879 -(dp1880 -S'editable' -p1881 -I00 -sS'value' -p1882 -NssS'summary_default' -p1883 -(dp1884 -S'editable' -p1885 -I00 -sS'value' -p1886 -S'none' -p1887 -sssS'description' -p1888 -(dp1889 -S'editable' -p1890 -I01 -sS'value' -p1891 -g47 -sssS'id' -p1892 -(dp1893 -S'mandatory' -p1894 -(dp1895 -S'editable' -p1896 -I00 -sS'value' -p1897 -I01 -ssS'name' -p1898 -(dp1899 -S'editable' -p1900 -I01 -sS'value' -p1901 -S'Id' -p1902 -ssS'data_type' -p1903 -(dp1904 -S'editable' -p1905 -I00 -sS'value' -p1906 -S'number' -p1907 -ssS'entity_type' -p1908 -(dp1909 -S'editable' -p1910 -I00 -sS'value' -p1911 -S'PhysicalAssetMocapTakeConnection' -p1912 -ssS'editable' -p1913 -(dp1914 -S'editable' -p1915 -I00 -sS'value' -p1916 -I00 -ssS'unique' -p1917 -(dp1918 -S'editable' -p1919 -I00 -sS'value' -p1920 -I00 -ssS'properties' -p1921 -(dp1922 -S'default_value' -p1923 -(dp1924 -S'editable' -p1925 -I00 -sS'value' -p1926 -NssS'summary_default' -p1927 -(dp1928 -S'editable' -p1929 -I00 -sS'value' -p1930 -S'none' -p1931 -sssS'description' -p1932 -(dp1933 -S'editable' -p1934 -I01 -sS'value' -p1935 -g47 -ssssS'CustomEntity05' -p1936 -(dp1937 -S'open_notes_count' -p1938 -(dp1939 -S'mandatory' -p1940 -(dp1941 -S'editable' -p1942 -I00 -sS'value' -p1943 -I00 -ssS'name' -p1944 -(dp1945 -S'editable' -p1946 -I01 -sS'value' -p1947 -S'Open Notes Count' -p1948 -ssS'data_type' -p1949 -(dp1950 -S'editable' -p1951 -I00 -sS'value' -p1952 -S'text' -p1953 -ssS'entity_type' -p1954 -(dp1955 -S'editable' -p1956 -I00 -sS'value' -p1957 -S'CustomEntity05' -p1958 -ssS'editable' -p1959 -(dp1960 -S'editable' -p1961 -I00 -sS'value' -p1962 -I00 -ssS'unique' -p1963 -(dp1964 -S'editable' -p1965 -I00 -sS'value' -p1966 -I00 -ssS'properties' -p1967 -(dp1968 -S'default_value' -p1969 -(dp1970 -S'editable' -p1971 -I00 -sS'value' -p1972 -NssS'summary_default' -p1973 -(dp1974 -S'editable' -p1975 -I01 -sS'value' -p1976 -S'none' -p1977 -sssS'description' -p1978 -(dp1979 -S'editable' -p1980 -I01 -sS'value' -p1981 -g47 -sssS'code' -p1982 -(dp1983 -S'mandatory' -p1984 -(dp1985 -S'editable' -p1986 -I00 -sS'value' -p1987 -I01 -ssS'name' -p1988 -(dp1989 -S'editable' -p1990 -I01 -sS'value' -p1991 -S'Custom Entity05 Name' -p1992 -ssS'data_type' -p1993 -(dp1994 -S'editable' -p1995 -I00 -sS'value' -p1996 -S'text' -p1997 -ssS'entity_type' -p1998 -(dp1999 -S'editable' -p2000 -I00 -sS'value' -p2001 -S'CustomEntity05' -p2002 -ssS'editable' -p2003 -(dp2004 -S'editable' -p2005 -I00 -sS'value' -p2006 -I01 -ssS'unique' -p2007 -(dp2008 -S'editable' -p2009 -I00 -sS'value' -p2010 -I00 -ssS'properties' -p2011 -(dp2012 -S'default_value' -p2013 -(dp2014 -S'editable' -p2015 -I00 -sS'value' -p2016 -NssS'summary_default' -p2017 -(dp2018 -S'editable' -p2019 -I01 -sS'value' -p2020 -S'none' -p2021 -sssS'description' -p2022 -(dp2023 -S'editable' -p2024 -I01 -sS'value' -p2025 -g47 -sssS'open_notes' -p2026 -(dp2027 -S'mandatory' -p2028 -(dp2029 -S'editable' -p2030 -I00 -sS'value' -p2031 -I00 -ssS'name' -p2032 -(dp2033 -S'editable' -p2034 -I01 -sS'value' -p2035 -S'Open Notes' -p2036 -ssS'data_type' -p2037 -(dp2038 -S'editable' -p2039 -I00 -sS'value' -p2040 -S'multi_entity' -p2041 -ssS'entity_type' -p2042 -(dp2043 -S'editable' -p2044 -I00 -sS'value' -p2045 -S'CustomEntity05' -p2046 -ssS'editable' -p2047 -(dp2048 -S'editable' -p2049 -I00 -sS'value' -p2050 -I00 -ssS'unique' -p2051 -(dp2052 -S'editable' -p2053 -I00 -sS'value' -p2054 -I00 -ssS'properties' -p2055 -(dp2056 -S'default_value' -p2057 -(dp2058 -S'editable' -p2059 -I00 -sS'value' -p2060 -NssS'summary_default' -p2061 -(dp2062 -S'editable' -p2063 -I01 -sS'value' -p2064 -S'none' -p2065 -ssS'valid_types' -p2066 -(dp2067 -S'editable' -p2068 -I01 -sS'value' -p2069 -(lp2070 -S'Note' -p2071 -asssS'description' -p2072 -(dp2073 -S'editable' -p2074 -I01 -sS'value' -p2075 -g47 -sssS'description' -p2076 -(dp2077 -S'mandatory' -p2078 -(dp2079 -S'editable' -p2080 -I00 -sS'value' -p2081 -I00 -ssS'name' -p2082 -(dp2083 -S'editable' -p2084 -I01 -sS'value' -p2085 -S'Description' -p2086 -ssS'data_type' -p2087 -(dp2088 -S'editable' -p2089 -I00 -sS'value' -p2090 -S'text' -p2091 -ssS'entity_type' -p2092 -(dp2093 -S'editable' -p2094 -I00 -sS'value' -p2095 -S'CustomEntity05' -p2096 -ssS'editable' -p2097 -(dp2098 -S'editable' -p2099 -I00 -sS'value' -p2100 -I01 -ssS'unique' -p2101 -(dp2102 -S'editable' -p2103 -I00 -sS'value' -p2104 -I00 -ssS'properties' -p2105 -(dp2106 -S'default_value' -p2107 -(dp2108 -S'editable' -p2109 -I00 -sS'value' -p2110 -NssS'summary_default' -p2111 -(dp2112 -S'editable' -p2113 -I01 -sS'value' -p2114 -S'none' -p2115 -sssS'description' -p2116 -(dp2117 -S'editable' -p2118 -I01 -sS'value' -p2119 -g47 -sssS'created_at' -p2120 -(dp2121 -S'mandatory' -p2122 -(dp2123 -S'editable' -p2124 -I00 -sS'value' -p2125 -I00 -ssS'name' -p2126 -(dp2127 -S'editable' -p2128 -I01 -sS'value' -p2129 -S'Date Created' -p2130 -ssS'data_type' -p2131 -(dp2132 -S'editable' -p2133 -I00 -sS'value' -p2134 -S'date_time' -p2135 -ssS'entity_type' -p2136 -(dp2137 -S'editable' -p2138 -I00 -sS'value' -p2139 -S'CustomEntity05' -p2140 -ssS'editable' -p2141 -(dp2142 -S'editable' -p2143 -I00 -sS'value' -p2144 -I00 -ssS'unique' -p2145 -(dp2146 -S'editable' -p2147 -I00 -sS'value' -p2148 -I00 -ssS'properties' -p2149 -(dp2150 -S'default_value' -p2151 -(dp2152 -S'editable' -p2153 -I00 -sS'value' -p2154 -NssS'summary_default' -p2155 -(dp2156 -S'editable' -p2157 -I01 -sS'value' -p2158 -S'none' -p2159 -sssS'description' -p2160 -(dp2161 -S'editable' -p2162 -I01 -sS'value' -p2163 -g47 -sssS'updated_at' -p2164 -(dp2165 -S'mandatory' -p2166 -(dp2167 -S'editable' -p2168 -I00 -sS'value' -p2169 -I00 -ssS'name' -p2170 -(dp2171 -S'editable' -p2172 -I01 -sS'value' -p2173 -S'Date Updated' -p2174 -ssS'data_type' -p2175 -(dp2176 -S'editable' -p2177 -I00 -sS'value' -p2178 -S'date_time' -p2179 -ssS'entity_type' -p2180 -(dp2181 -S'editable' -p2182 -I00 -sS'value' -p2183 -S'CustomEntity05' -p2184 -ssS'editable' -p2185 -(dp2186 -S'editable' -p2187 -I00 -sS'value' -p2188 -I00 -ssS'unique' -p2189 -(dp2190 -S'editable' -p2191 -I00 -sS'value' -p2192 -I00 -ssS'properties' -p2193 -(dp2194 -S'default_value' -p2195 -(dp2196 -S'editable' -p2197 -I00 -sS'value' -p2198 -NssS'summary_default' -p2199 -(dp2200 -S'editable' -p2201 -I01 -sS'value' -p2202 -S'none' -p2203 -sssS'description' -p2204 -(dp2205 -S'editable' -p2206 -I01 -sS'value' -p2207 -g47 -sssS'created_by' -p2208 -(dp2209 -S'mandatory' -p2210 -(dp2211 -S'editable' -p2212 -I00 -sS'value' -p2213 -I00 -ssS'name' -p2214 -(dp2215 -S'editable' -p2216 -I01 -sS'value' -p2217 -S'Created by' -p2218 -ssS'data_type' -p2219 -(dp2220 -S'editable' -p2221 -I00 -sS'value' -p2222 -S'entity' -p2223 -ssS'entity_type' -p2224 -(dp2225 -S'editable' -p2226 -I00 -sS'value' -p2227 -S'CustomEntity05' -p2228 -ssS'editable' -p2229 -(dp2230 -S'editable' -p2231 -I00 -sS'value' -p2232 -I00 -ssS'unique' -p2233 -(dp2234 -S'editable' -p2235 -I00 -sS'value' -p2236 -I00 -ssS'properties' -p2237 -(dp2238 -S'default_value' -p2239 -(dp2240 -S'editable' -p2241 -I00 -sS'value' -p2242 -NssS'summary_default' -p2243 -(dp2244 -S'editable' -p2245 -I01 -sS'value' -p2246 -S'none' -p2247 -ssS'valid_types' -p2248 -(dp2249 -S'editable' -p2250 -I01 -sS'value' -p2251 -(lp2252 -S'HumanUser' -p2253 -aS'ApiUser' -p2254 -asssS'description' -p2255 -(dp2256 -S'editable' -p2257 -I01 -sS'value' -p2258 -g47 -sssS'project' -p2259 -(dp2260 -S'mandatory' -p2261 -(dp2262 -S'editable' -p2263 -I00 -sS'value' -p2264 -I00 -ssS'name' -p2265 -(dp2266 -S'editable' -p2267 -I01 -sS'value' -p2268 -S'Project' -p2269 -ssS'data_type' -p2270 -(dp2271 -S'editable' -p2272 -I00 -sS'value' -p2273 -S'entity' -p2274 -ssS'entity_type' -p2275 -(dp2276 -S'editable' -p2277 -I00 -sS'value' -p2278 -S'CustomEntity05' -p2279 -ssS'editable' -p2280 -(dp2281 -S'editable' -p2282 -I00 -sS'value' -p2283 -I01 -ssS'unique' -p2284 -(dp2285 -S'editable' -p2286 -I00 -sS'value' -p2287 -I00 -ssS'properties' -p2288 -(dp2289 -S'default_value' -p2290 -(dp2291 -S'editable' -p2292 -I00 -sS'value' -p2293 -NssS'summary_default' -p2294 -(dp2295 -S'editable' -p2296 -I01 -sS'value' -p2297 -S'none' -p2298 -ssS'valid_types' -p2299 -(dp2300 -S'editable' -p2301 -I01 -sS'value' -p2302 -(lp2303 -S'Project' -p2304 -asssS'description' -p2305 -(dp2306 -S'editable' -p2307 -I01 -sS'value' -p2308 -g47 -sssS'filmstrip_image' -p2309 -(dp2310 -S'mandatory' -p2311 -(dp2312 -S'editable' -p2313 -I00 -sS'value' -p2314 -I00 -ssS'name' -p2315 -(dp2316 -S'editable' -p2317 -I01 -sS'value' -p2318 -S'Filmstrip Thumbnail' -p2319 -ssS'data_type' -p2320 -(dp2321 -S'editable' -p2322 -I00 -sS'value' -p2323 -S'image' -p2324 -ssS'entity_type' -p2325 -(dp2326 -S'editable' -p2327 -I00 -sS'value' -p2328 -S'CustomEntity05' -p2329 -ssS'editable' -p2330 -(dp2331 -S'editable' -p2332 -I00 -sS'value' -p2333 -I01 -ssS'unique' -p2334 -(dp2335 -S'editable' -p2336 -I00 -sS'value' -p2337 -I00 -ssS'properties' -p2338 -(dp2339 -S'default_value' -p2340 -(dp2341 -S'editable' -p2342 -I00 -sS'value' -p2343 -NssS'summary_default' -p2344 -(dp2345 -S'editable' -p2346 -I01 -sS'value' -p2347 -S'none' -p2348 -sssS'description' -p2349 -(dp2350 -S'editable' -p2351 -I01 -sS'value' -p2352 -g47 -sssS'sg_status_list' -p2353 -(dp2354 -S'mandatory' -p2355 -(dp2356 -S'editable' -p2357 -I00 -sS'value' -p2358 -I00 -ssS'name' -p2359 -(dp2360 -S'editable' -p2361 -I01 -sS'value' -p2362 -S'Status' -p2363 -ssS'data_type' -p2364 -(dp2365 -S'editable' -p2366 -I00 -sS'value' -p2367 -S'status_list' -p2368 -ssS'entity_type' -p2369 -(dp2370 -S'editable' -p2371 -I00 -sS'value' -p2372 -S'CustomEntity05' -p2373 -ssS'editable' -p2374 -(dp2375 -S'editable' -p2376 -I00 -sS'value' -p2377 -I01 -ssS'unique' -p2378 -(dp2379 -S'editable' -p2380 -I00 -sS'value' -p2381 -I00 -ssS'properties' -p2382 -(dp2383 -S'default_value' -p2384 -(dp2385 -S'editable' -p2386 -I01 -sS'value' -p2387 -S'wtg' -p2388 -ssS'valid_values' -p2389 -(dp2390 -S'editable' -p2391 -I01 -sS'value' -p2392 -(lp2393 -S'cmpt' -p2394 -aS'ip' -p2395 -aS'wtg' -p2396 -assS'summary_default' -p2397 -(dp2398 -S'editable' -p2399 -I01 -sS'value' -p2400 -S'none' -p2401 -sssS'description' -p2402 -(dp2403 -S'editable' -p2404 -I01 -sS'value' -p2405 -g47 -sssS'notes' -p2406 -(dp2407 -S'mandatory' -p2408 -(dp2409 -S'editable' -p2410 -I00 -sS'value' -p2411 -I00 -ssS'name' -p2412 -(dp2413 -S'editable' -p2414 -I01 -sS'value' -p2415 -S'Notes' -p2416 -ssS'data_type' -p2417 -(dp2418 -S'editable' -p2419 -I00 -sS'value' -p2420 -S'multi_entity' -p2421 -ssS'entity_type' -p2422 -(dp2423 -S'editable' -p2424 -I00 -sS'value' -p2425 -S'CustomEntity05' -p2426 -ssS'editable' -p2427 -(dp2428 -S'editable' -p2429 -I00 -sS'value' -p2430 -I01 -ssS'unique' -p2431 -(dp2432 -S'editable' -p2433 -I00 -sS'value' -p2434 -I00 -ssS'properties' -p2435 -(dp2436 -S'default_value' -p2437 -(dp2438 -S'editable' -p2439 -I00 -sS'value' -p2440 -NssS'summary_default' -p2441 -(dp2442 -S'editable' -p2443 -I01 -sS'value' -p2444 -S'none' -p2445 -ssS'valid_types' -p2446 -(dp2447 -S'editable' -p2448 -I01 -sS'value' -p2449 -(lp2450 -S'Note' -p2451 -asssS'description' -p2452 -(dp2453 -S'editable' -p2454 -I01 -sS'value' -p2455 -g47 -sssS'image' -p2456 -(dp2457 -S'mandatory' -p2458 -(dp2459 -S'editable' -p2460 -I00 -sS'value' -p2461 -I00 -ssS'name' -p2462 -(dp2463 -S'editable' -p2464 -I01 -sS'value' -p2465 -S'Thumbnail' -p2466 -ssS'data_type' -p2467 -(dp2468 -S'editable' -p2469 -I00 -sS'value' -p2470 -S'image' -p2471 -ssS'entity_type' -p2472 -(dp2473 -S'editable' -p2474 -I00 -sS'value' -p2475 -S'CustomEntity05' -p2476 -ssS'editable' -p2477 -(dp2478 -S'editable' -p2479 -I00 -sS'value' -p2480 -I01 -ssS'unique' -p2481 -(dp2482 -S'editable' -p2483 -I00 -sS'value' -p2484 -I00 -ssS'properties' -p2485 -(dp2486 -S'default_value' -p2487 -(dp2488 -S'editable' -p2489 -I00 -sS'value' -p2490 -NssS'summary_default' -p2491 -(dp2492 -S'editable' -p2493 -I01 -sS'value' -p2494 -S'none' -p2495 -sssS'description' -p2496 -(dp2497 -S'editable' -p2498 -I01 -sS'value' -p2499 -g47 -sssS'cached_display_name' -p2500 -(dp2501 -S'mandatory' -p2502 -(dp2503 -S'editable' -p2504 -I00 -sS'value' -p2505 -I00 -ssS'name' -p2506 -(dp2507 -S'editable' -p2508 -I01 -sS'value' -p2509 -S'Cached Display Name' -p2510 -ssS'data_type' -p2511 -(dp2512 -S'editable' -p2513 -I00 -sS'value' -p2514 -S'text' -p2515 -ssS'entity_type' -p2516 -(dp2517 -S'editable' -p2518 -I00 -sS'value' -p2519 -S'CustomEntity05' -p2520 -ssS'editable' -p2521 -(dp2522 -S'editable' -p2523 -I00 -sS'value' -p2524 -I01 -ssS'unique' -p2525 -(dp2526 -S'editable' -p2527 -I00 -sS'value' -p2528 -I00 -ssS'properties' -p2529 -(dp2530 -S'default_value' -p2531 -(dp2532 -S'editable' -p2533 -I00 -sS'value' -p2534 -NssS'summary_default' -p2535 -(dp2536 -S'editable' -p2537 -I00 -sS'value' -p2538 -S'none' -p2539 -sssS'description' -p2540 -(dp2541 -S'editable' -p2542 -I01 -sS'value' -p2543 -g47 -sssS'tag_list' -p2544 -(dp2545 -S'mandatory' -p2546 -(dp2547 -S'editable' -p2548 -I00 -sS'value' -p2549 -I00 -ssS'name' -p2550 -(dp2551 -S'editable' -p2552 -I01 -sS'value' -p2553 -S'Tags' -p2554 -ssS'data_type' -p2555 -(dp2556 -S'editable' -p2557 -I00 -sS'value' -p2558 -S'tag_list' -p2559 -ssS'entity_type' -p2560 -(dp2561 -S'editable' -p2562 -I00 -sS'value' -p2563 -S'CustomEntity05' -p2564 -ssS'editable' -p2565 -(dp2566 -S'editable' -p2567 -I00 -sS'value' -p2568 -I01 -ssS'unique' -p2569 -(dp2570 -S'editable' -p2571 -I00 -sS'value' -p2572 -I00 -ssS'properties' -p2573 -(dp2574 -S'default_value' -p2575 -(dp2576 -S'editable' -p2577 -I00 -sS'value' -p2578 -NssS'summary_default' -p2579 -(dp2580 -S'editable' -p2581 -I01 -sS'value' -p2582 -S'none' -p2583 -ssS'valid_types' -p2584 -(dp2585 -S'editable' -p2586 -I01 -sS'value' -p2587 -(lp2588 -S'Tag' -p2589 -asssS'description' -p2590 -(dp2591 -S'editable' -p2592 -I01 -sS'value' -p2593 -g47 -sssS'id' -p2594 -(dp2595 -S'mandatory' -p2596 -(dp2597 -S'editable' -p2598 -I00 -sS'value' -p2599 -I00 -ssS'name' -p2600 -(dp2601 -S'editable' -p2602 -I01 -sS'value' -p2603 -S'Id' -p2604 -ssS'data_type' -p2605 -(dp2606 -S'editable' -p2607 -I00 -sS'value' -p2608 -S'number' -p2609 -ssS'entity_type' -p2610 -(dp2611 -S'editable' -p2612 -I00 -sS'value' -p2613 -S'CustomEntity05' -p2614 -ssS'editable' -p2615 -(dp2616 -S'editable' -p2617 -I00 -sS'value' -p2618 -I00 -ssS'unique' -p2619 -(dp2620 -S'editable' -p2621 -I00 -sS'value' -p2622 -I00 -ssS'properties' -p2623 -(dp2624 -S'default_value' -p2625 -(dp2626 -S'editable' -p2627 -I00 -sS'value' -p2628 -NssS'summary_default' -p2629 -(dp2630 -S'editable' -p2631 -I01 -sS'value' -p2632 -S'none' -p2633 -sssS'description' -p2634 -(dp2635 -S'editable' -p2636 -I01 -sS'value' -p2637 -g47 -sssS'updated_by' -p2638 -(dp2639 -S'mandatory' -p2640 -(dp2641 -S'editable' -p2642 -I00 -sS'value' -p2643 -I00 -ssS'name' -p2644 -(dp2645 -S'editable' -p2646 -I01 -sS'value' -p2647 -S'Updated by' -p2648 -ssS'data_type' -p2649 -(dp2650 -S'editable' -p2651 -I00 -sS'value' -p2652 -S'entity' -p2653 -ssS'entity_type' -p2654 -(dp2655 -S'editable' -p2656 -I00 -sS'value' -p2657 -S'CustomEntity05' -p2658 -ssS'editable' -p2659 -(dp2660 -S'editable' -p2661 -I00 -sS'value' -p2662 -I00 -ssS'unique' -p2663 -(dp2664 -S'editable' -p2665 -I00 -sS'value' -p2666 -I00 -ssS'properties' -p2667 -(dp2668 -S'default_value' -p2669 -(dp2670 -S'editable' -p2671 -I00 -sS'value' -p2672 -NssS'summary_default' -p2673 -(dp2674 -S'editable' -p2675 -I01 -sS'value' -p2676 -S'none' -p2677 -ssS'valid_types' -p2678 -(dp2679 -S'editable' -p2680 -I01 -sS'value' -p2681 -(lp2682 -S'HumanUser' -p2683 -aS'ApiUser' -p2684 -asssS'description' -p2685 -(dp2686 -S'editable' -p2687 -I01 -sS'value' -p2688 -g47 -ssssS'Note' -p2689 -(dp2690 -S'project' -p2691 -(dp2692 -S'mandatory' -p2693 -(dp2694 -S'editable' -p2695 -I00 -sS'value' -p2696 -I00 -ssS'name' -p2697 -(dp2698 -S'editable' -p2699 -I01 -sS'value' -p2700 -S'Project' -p2701 -ssS'data_type' -p2702 -(dp2703 -S'editable' -p2704 -I00 -sS'value' -p2705 -S'entity' -p2706 -ssS'entity_type' -p2707 -(dp2708 -S'editable' -p2709 -I00 -sS'value' -p2710 -S'Note' -p2711 -ssS'editable' -p2712 -(dp2713 -S'editable' -p2714 -I00 -sS'value' -p2715 -I01 -ssS'unique' -p2716 -(dp2717 -S'editable' -p2718 -I00 -sS'value' -p2719 -I00 -ssS'properties' -p2720 -(dp2721 -S'default_value' -p2722 -(dp2723 -S'editable' -p2724 -I00 -sS'value' -p2725 -NssS'summary_default' -p2726 -(dp2727 -S'editable' -p2728 -I01 -sS'value' -p2729 -S'none' -p2730 -ssS'valid_types' -p2731 -(dp2732 -S'editable' -p2733 -I01 -sS'value' -p2734 -(lp2735 -S'Project' -p2736 -asssS'description' -p2737 -(dp2738 -S'editable' -p2739 -I01 -sS'value' -p2740 -g47 -sssS'playlist' -p2741 -(dp2742 -S'mandatory' -p2743 -(dp2744 -S'editable' -p2745 -I00 -sS'value' -p2746 -I00 -ssS'name' -p2747 -(dp2748 -S'editable' -p2749 -I01 -sS'value' -p2750 -S'Playlist' -p2751 -ssS'data_type' -p2752 -(dp2753 -S'editable' -p2754 -I00 -sS'value' -p2755 -S'entity' -p2756 -ssS'entity_type' -p2757 -(dp2758 -S'editable' -p2759 -I00 -sS'value' -p2760 -S'Note' -p2761 -ssS'editable' -p2762 -(dp2763 -S'editable' -p2764 -I00 -sS'value' -p2765 -I01 -ssS'unique' -p2766 -(dp2767 -S'editable' -p2768 -I00 -sS'value' -p2769 -I00 -ssS'properties' -p2770 -(dp2771 -S'default_value' -p2772 -(dp2773 -S'editable' -p2774 -I00 -sS'value' -p2775 -NssS'summary_default' -p2776 -(dp2777 -S'editable' -p2778 -I00 -sS'value' -p2779 -S'none' -p2780 -ssS'valid_types' -p2781 -(dp2782 -S'editable' -p2783 -I00 -sS'value' -p2784 -(lp2785 -S'Playlist' -p2786 -asssS'description' -p2787 -(dp2788 -S'editable' -p2789 -I01 -sS'value' -p2790 -g47 -sssS'tasks' -p2791 -(dp2792 -S'mandatory' -p2793 -(dp2794 -S'editable' -p2795 -I00 -sS'value' -p2796 -I00 -ssS'name' -p2797 -(dp2798 -S'editable' -p2799 -I01 -sS'value' -p2800 -S'Tasks' -p2801 -ssS'data_type' -p2802 -(dp2803 -S'editable' -p2804 -I00 -sS'value' -p2805 -S'multi_entity' -p2806 -ssS'entity_type' -p2807 -(dp2808 -S'editable' -p2809 -I00 -sS'value' -p2810 -S'Note' -p2811 -ssS'editable' -p2812 -(dp2813 -S'editable' -p2814 -I00 -sS'value' -p2815 -I01 -ssS'unique' -p2816 -(dp2817 -S'editable' -p2818 -I00 -sS'value' -p2819 -I00 -ssS'properties' -p2820 -(dp2821 -S'default_value' -p2822 -(dp2823 -S'editable' -p2824 -I00 -sS'value' -p2825 -NssS'summary_default' -p2826 -(dp2827 -S'editable' -p2828 -I01 -sS'value' -p2829 -S'none' -p2830 -ssS'valid_types' -p2831 -(dp2832 -S'editable' -p2833 -I01 -sS'value' -p2834 -(lp2835 -S'Task' -p2836 -asssS'description' -p2837 -(dp2838 -S'editable' -p2839 -I01 -sS'value' -p2840 -g47 -sssS'note_links' -p2841 -(dp2842 -S'mandatory' -p2843 -(dp2844 -S'editable' -p2845 -I00 -sS'value' -p2846 -I00 -ssS'name' -p2847 -(dp2848 -S'editable' -p2849 -I01 -sS'value' -p2850 -S'Links' -p2851 -ssS'data_type' -p2852 -(dp2853 -S'editable' -p2854 -I00 -sS'value' -p2855 -S'multi_entity' -p2856 -ssS'entity_type' -p2857 -(dp2858 -S'editable' -p2859 -I00 -sS'value' -p2860 -S'Note' -p2861 -ssS'editable' -p2862 -(dp2863 -S'editable' -p2864 -I00 -sS'value' -p2865 -I01 -ssS'unique' -p2866 -(dp2867 -S'editable' -p2868 -I00 -sS'value' -p2869 -I00 -ssS'properties' -p2870 -(dp2871 -S'default_value' -p2872 -(dp2873 -S'editable' -p2874 -I00 -sS'value' -p2875 -NssS'summary_default' -p2876 -(dp2877 -S'editable' -p2878 -I01 -sS'value' -p2879 -S'none' -p2880 -ssS'valid_types' -p2881 -(dp2882 -S'editable' -p2883 -I01 -sS'value' -p2884 -(lp2885 -S'Asset' -p2886 -aS'Shot' -p2887 -aS'Version' -p2888 -aS'Group' -p2889 -aS'TaskTemplate' -p2890 -aS'Playlist' -p2891 -aS'Booking' -p2892 -aS'Department' -p2893 -aS'Phase' -p2894 -aS'Sequence' -p2895 -aS'PublishedFile' -p2896 -aS'TankPublishedFile' -p2897 -aS'CustomEntity01' -p2898 -aS'Scene' -p2899 -aS'CustomEntity02' -p2900 -aS'CustomEntity03' -p2901 -aS'CustomEntity04' -p2902 -aS'CustomEntity05' -p2903 -aS'CustomNonProjectEntity01' -p2904 -aS'CustomNonProjectEntity02' -p2905 -aS'CustomNonProjectEntity03' -p2906 -aS'Element' -p2907 -aS'AssetLibrary' -p2908 -asssS'description' -p2909 -(dp2910 -S'editable' -p2911 -I01 -sS'value' -p2912 -g47 -sssS'attachments' -p2913 -(dp2914 -S'mandatory' -p2915 -(dp2916 -S'editable' -p2917 -I00 -sS'value' -p2918 -I00 -ssS'name' -p2919 -(dp2920 -S'editable' -p2921 -I01 -sS'value' -p2922 -S'Attachments' -p2923 -ssS'data_type' -p2924 -(dp2925 -S'editable' -p2926 -I00 -sS'value' -p2927 -S'multi_entity' -p2928 -ssS'entity_type' -p2929 -(dp2930 -S'editable' -p2931 -I00 -sS'value' -p2932 -S'Note' -p2933 -ssS'editable' -p2934 -(dp2935 -S'editable' -p2936 -I00 -sS'value' -p2937 -I01 -ssS'unique' -p2938 -(dp2939 -S'editable' -p2940 -I00 -sS'value' -p2941 -I00 -ssS'properties' -p2942 -(dp2943 -S'default_value' -p2944 -(dp2945 -S'editable' -p2946 -I00 -sS'value' -p2947 -NssS'summary_default' -p2948 -(dp2949 -S'editable' -p2950 -I01 -sS'value' -p2951 -S'none' -p2952 -ssS'valid_types' -p2953 -(dp2954 -S'editable' -p2955 -I01 -sS'value' -p2956 -(lp2957 -S'Attachment' -p2958 -asssS'description' -p2959 -(dp2960 -S'editable' -p2961 -I01 -sS'value' -p2962 -g47 -sssS'addressings_cc' -p2963 -(dp2964 -S'mandatory' -p2965 -(dp2966 -S'editable' -p2967 -I00 -sS'value' -p2968 -I00 -ssS'name' -p2969 -(dp2970 -S'editable' -p2971 -I01 -sS'value' -p2972 -S'Cc' -p2973 -ssS'data_type' -p2974 -(dp2975 -S'editable' -p2976 -I00 -sS'value' -p2977 -S'multi_entity' -p2978 -ssS'entity_type' -p2979 -(dp2980 -S'editable' -p2981 -I00 -sS'value' -p2982 -S'Note' -p2983 -ssS'editable' -p2984 -(dp2985 -S'editable' -p2986 -I00 -sS'value' -p2987 -I01 -ssS'unique' -p2988 -(dp2989 -S'editable' -p2990 -I00 -sS'value' -p2991 -I00 -ssS'properties' -p2992 -(dp2993 -S'default_value' -p2994 -(dp2995 -S'editable' -p2996 -I00 -sS'value' -p2997 -NssS'summary_default' -p2998 -(dp2999 -S'editable' -p3000 -I01 -sS'value' -p3001 -S'none' -p3002 -ssS'valid_types' -p3003 -(dp3004 -S'editable' -p3005 -I01 -sS'value' -p3006 -(lp3007 -S'Group' -p3008 -aS'HumanUser' -p3009 -asssS'description' -p3010 -(dp3011 -S'editable' -p3012 -I01 -sS'value' -p3013 -g47 -sssS'tag_list' -p3014 -(dp3015 -S'mandatory' -p3016 -(dp3017 -S'editable' -p3018 -I00 -sS'value' -p3019 -I00 -ssS'name' -p3020 -(dp3021 -S'editable' -p3022 -I01 -sS'value' -p3023 -S'Tags' -p3024 -ssS'data_type' -p3025 -(dp3026 -S'editable' -p3027 -I00 -sS'value' -p3028 -S'tag_list' -p3029 -ssS'entity_type' -p3030 -(dp3031 -S'editable' -p3032 -I00 -sS'value' -p3033 -S'Note' -p3034 -ssS'editable' -p3035 -(dp3036 -S'editable' -p3037 -I00 -sS'value' -p3038 -I01 -ssS'unique' -p3039 -(dp3040 -S'editable' -p3041 -I00 -sS'value' -p3042 -I00 -ssS'properties' -p3043 -(dp3044 -S'default_value' -p3045 -(dp3046 -S'editable' -p3047 -I00 -sS'value' -p3048 -NssS'summary_default' -p3049 -(dp3050 -S'editable' -p3051 -I01 -sS'value' -p3052 -S'none' -p3053 -ssS'valid_types' -p3054 -(dp3055 -S'editable' -p3056 -I01 -sS'value' -p3057 -(lp3058 -S'Tag' -p3059 -asssS'description' -p3060 -(dp3061 -S'editable' -p3062 -I01 -sS'value' -p3063 -g47 -sssS'created_at' -p3064 -(dp3065 -S'mandatory' -p3066 -(dp3067 -S'editable' -p3068 -I00 -sS'value' -p3069 -I00 -ssS'name' -p3070 -(dp3071 -S'editable' -p3072 -I01 -sS'value' -p3073 -S'Date Created' -p3074 -ssS'data_type' -p3075 -(dp3076 -S'editable' -p3077 -I00 -sS'value' -p3078 -S'date_time' -p3079 -ssS'entity_type' -p3080 -(dp3081 -S'editable' -p3082 -I00 -sS'value' -p3083 -S'Note' -p3084 -ssS'editable' -p3085 -(dp3086 -S'editable' -p3087 -I00 -sS'value' -p3088 -I00 -ssS'unique' -p3089 -(dp3090 -S'editable' -p3091 -I00 -sS'value' -p3092 -I00 -ssS'properties' -p3093 -(dp3094 -S'default_value' -p3095 -(dp3096 -S'editable' -p3097 -I00 -sS'value' -p3098 -NssS'summary_default' -p3099 -(dp3100 -S'editable' -p3101 -I01 -sS'value' -p3102 -S'none' -p3103 -sssS'description' -p3104 -(dp3105 -S'editable' -p3106 -I01 -sS'value' -p3107 -g47 -sssS'addressings_to' -p3108 -(dp3109 -S'mandatory' -p3110 -(dp3111 -S'editable' -p3112 -I00 -sS'value' -p3113 -I00 -ssS'name' -p3114 -(dp3115 -S'editable' -p3116 -I01 -sS'value' -p3117 -S'To' -p3118 -ssS'data_type' -p3119 -(dp3120 -S'editable' -p3121 -I00 -sS'value' -p3122 -S'multi_entity' -p3123 -ssS'entity_type' -p3124 -(dp3125 -S'editable' -p3126 -I00 -sS'value' -p3127 -S'Note' -p3128 -ssS'editable' -p3129 -(dp3130 -S'editable' -p3131 -I00 -sS'value' -p3132 -I01 -ssS'unique' -p3133 -(dp3134 -S'editable' -p3135 -I00 -sS'value' -p3136 -I00 -ssS'properties' -p3137 -(dp3138 -S'default_value' -p3139 -(dp3140 -S'editable' -p3141 -I00 -sS'value' -p3142 -NssS'summary_default' -p3143 -(dp3144 -S'editable' -p3145 -I01 -sS'value' -p3146 -S'none' -p3147 -ssS'valid_types' -p3148 -(dp3149 -S'editable' -p3150 -I01 -sS'value' -p3151 -(lp3152 -S'Group' -p3153 -aS'HumanUser' -p3154 -asssS'description' -p3155 -(dp3156 -S'editable' -p3157 -I01 -sS'value' -p3158 -g47 -sssS'updated_at' -p3159 -(dp3160 -S'mandatory' -p3161 -(dp3162 -S'editable' -p3163 -I00 -sS'value' -p3164 -I00 -ssS'name' -p3165 -(dp3166 -S'editable' -p3167 -I01 -sS'value' -p3168 -S'Date Updated' -p3169 -ssS'data_type' -p3170 -(dp3171 -S'editable' -p3172 -I00 -sS'value' -p3173 -S'date_time' -p3174 -ssS'entity_type' -p3175 -(dp3176 -S'editable' -p3177 -I00 -sS'value' -p3178 -S'Note' -p3179 -ssS'editable' -p3180 -(dp3181 -S'editable' -p3182 -I00 -sS'value' -p3183 -I00 -ssS'unique' -p3184 -(dp3185 -S'editable' -p3186 -I00 -sS'value' -p3187 -I00 -ssS'properties' -p3188 -(dp3189 -S'default_value' -p3190 -(dp3191 -S'editable' -p3192 -I00 -sS'value' -p3193 -NssS'summary_default' -p3194 -(dp3195 -S'editable' -p3196 -I01 -sS'value' -p3197 -S'none' -p3198 -sssS'description' -p3199 -(dp3200 -S'editable' -p3201 -I01 -sS'value' -p3202 -g47 -sssS'created_by' -p3203 -(dp3204 -S'mandatory' -p3205 -(dp3206 -S'editable' -p3207 -I00 -sS'value' -p3208 -I00 -ssS'name' -p3209 -(dp3210 -S'editable' -p3211 -I01 -sS'value' -p3212 -S'Created by' -p3213 -ssS'data_type' -p3214 -(dp3215 -S'editable' -p3216 -I00 -sS'value' -p3217 -S'entity' -p3218 -ssS'entity_type' -p3219 -(dp3220 -S'editable' -p3221 -I00 -sS'value' -p3222 -S'Note' -p3223 -ssS'editable' -p3224 -(dp3225 -S'editable' -p3226 -I00 -sS'value' -p3227 -I00 -ssS'unique' -p3228 -(dp3229 -S'editable' -p3230 -I00 -sS'value' -p3231 -I00 -ssS'properties' -p3232 -(dp3233 -S'default_value' -p3234 -(dp3235 -S'editable' -p3236 -I00 -sS'value' -p3237 -NssS'summary_default' -p3238 -(dp3239 -S'editable' -p3240 -I01 -sS'value' -p3241 -S'none' -p3242 -ssS'valid_types' -p3243 -(dp3244 -S'editable' -p3245 -I01 -sS'value' -p3246 -(lp3247 -S'HumanUser' -p3248 -aS'ApiUser' -p3249 -asssS'description' -p3250 -(dp3251 -S'editable' -p3252 -I01 -sS'value' -p3253 -g47 -sssS'content' -p3254 -(dp3255 -S'mandatory' -p3256 -(dp3257 -S'editable' -p3258 -I00 -sS'value' -p3259 -I00 -ssS'name' -p3260 -(dp3261 -S'editable' -p3262 -I01 -sS'value' -p3263 -S'Body' -p3264 -ssS'data_type' -p3265 -(dp3266 -S'editable' -p3267 -I00 -sS'value' -p3268 -S'text' -p3269 -ssS'entity_type' -p3270 -(dp3271 -S'editable' -p3272 -I00 -sS'value' -p3273 -S'Note' -p3274 -ssS'editable' -p3275 -(dp3276 -S'editable' -p3277 -I00 -sS'value' -p3278 -I01 -ssS'unique' -p3279 -(dp3280 -S'editable' -p3281 -I00 -sS'value' -p3282 -I00 -ssS'properties' -p3283 -(dp3284 -S'default_value' -p3285 -(dp3286 -S'editable' -p3287 -I00 -sS'value' -p3288 -NssS'summary_default' -p3289 -(dp3290 -S'editable' -p3291 -I01 -sS'value' -p3292 -S'none' -p3293 -sssS'description' -p3294 -(dp3295 -S'editable' -p3296 -I01 -sS'value' -p3297 -g47 -sssS'updated_by' -p3298 -(dp3299 -S'mandatory' -p3300 -(dp3301 -S'editable' -p3302 -I00 -sS'value' -p3303 -I00 -ssS'name' -p3304 -(dp3305 -S'editable' -p3306 -I01 -sS'value' -p3307 -S'Updated by' -p3308 -ssS'data_type' -p3309 -(dp3310 -S'editable' -p3311 -I00 -sS'value' -p3312 -S'entity' -p3313 -ssS'entity_type' -p3314 -(dp3315 -S'editable' -p3316 -I00 -sS'value' -p3317 -S'Note' -p3318 -ssS'editable' -p3319 -(dp3320 -S'editable' -p3321 -I00 -sS'value' -p3322 -I00 -ssS'unique' -p3323 -(dp3324 -S'editable' -p3325 -I00 -sS'value' -p3326 -I00 -ssS'properties' -p3327 -(dp3328 -S'default_value' -p3329 -(dp3330 -S'editable' -p3331 -I00 -sS'value' -p3332 -NssS'summary_default' -p3333 -(dp3334 -S'editable' -p3335 -I01 -sS'value' -p3336 -S'none' -p3337 -ssS'valid_types' -p3338 -(dp3339 -S'editable' -p3340 -I01 -sS'value' -p3341 -(lp3342 -S'HumanUser' -p3343 -aS'ApiUser' -p3344 -asssS'description' -p3345 -(dp3346 -S'editable' -p3347 -I01 -sS'value' -p3348 -g47 -sssS'sg_status_list' -p3349 -(dp3350 -S'mandatory' -p3351 -(dp3352 -S'editable' -p3353 -I00 -sS'value' -p3354 -I00 -ssS'name' -p3355 -(dp3356 -S'editable' -p3357 -I01 -sS'value' -p3358 -S'Status' -p3359 -ssS'data_type' -p3360 -(dp3361 -S'editable' -p3362 -I00 -sS'value' -p3363 -S'status_list' -p3364 -ssS'entity_type' -p3365 -(dp3366 -S'editable' -p3367 -I00 -sS'value' -p3368 -S'Note' -p3369 -ssS'editable' -p3370 -(dp3371 -S'editable' -p3372 -I00 -sS'value' -p3373 -I01 -ssS'unique' -p3374 -(dp3375 -S'editable' -p3376 -I00 -sS'value' -p3377 -I00 -ssS'properties' -p3378 -(dp3379 -S'default_value' -p3380 -(dp3381 -S'editable' -p3382 -I01 -sS'value' -p3383 -S'opn' -p3384 -ssS'valid_values' -p3385 -(dp3386 -S'editable' -p3387 -I01 -sS'value' -p3388 -(lp3389 -S'clsd' -p3390 -aS'ip' -p3391 -aS'opn' -p3392 -assS'summary_default' -p3393 -(dp3394 -S'editable' -p3395 -I01 -sS'value' -p3396 -S'none' -p3397 -sssS'description' -p3398 -(dp3399 -S'editable' -p3400 -I01 -sS'value' -p3401 -g47 -sssS'user' -p3402 -(dp3403 -S'mandatory' -p3404 -(dp3405 -S'editable' -p3406 -I00 -sS'value' -p3407 -I00 -ssS'name' -p3408 -(dp3409 -S'editable' -p3410 -I01 -sS'value' -p3411 -S'Author' -p3412 -ssS'data_type' -p3413 -(dp3414 -S'editable' -p3415 -I00 -sS'value' -p3416 -S'entity' -p3417 -ssS'entity_type' -p3418 -(dp3419 -S'editable' -p3420 -I00 -sS'value' -p3421 -S'Note' -p3422 -ssS'editable' -p3423 -(dp3424 -S'editable' -p3425 -I00 -sS'value' -p3426 -I01 -ssS'unique' -p3427 -(dp3428 -S'editable' -p3429 -I00 -sS'value' -p3430 -I00 -ssS'properties' -p3431 -(dp3432 -S'default_value' -p3433 -(dp3434 -S'editable' -p3435 -I00 -sS'value' -p3436 -NssS'summary_default' -p3437 -(dp3438 -S'editable' -p3439 -I01 -sS'value' -p3440 -S'none' -p3441 -ssS'valid_types' -p3442 -(dp3443 -S'editable' -p3444 -I01 -sS'value' -p3445 -(lp3446 -S'HumanUser' -p3447 -aS'ApiUser' -p3448 -asssS'description' -p3449 -(dp3450 -S'editable' -p3451 -I01 -sS'value' -p3452 -g47 -sssS'replies' -p3453 -(dp3454 -S'mandatory' -p3455 -(dp3456 -S'editable' -p3457 -I00 -sS'value' -p3458 -I00 -ssS'name' -p3459 -(dp3460 -S'editable' -p3461 -I01 -sS'value' -p3462 -S'Replies' -p3463 -ssS'data_type' -p3464 -(dp3465 -S'editable' -p3466 -I00 -sS'value' -p3467 -S'multi_entity' -p3468 -ssS'entity_type' -p3469 -(dp3470 -S'editable' -p3471 -I00 -sS'value' -p3472 -S'Note' -p3473 -ssS'editable' -p3474 -(dp3475 -S'editable' -p3476 -I00 -sS'value' -p3477 -I01 -ssS'unique' -p3478 -(dp3479 -S'editable' -p3480 -I00 -sS'value' -p3481 -I00 -ssS'properties' -p3482 -(dp3483 -S'default_value' -p3484 -(dp3485 -S'editable' -p3486 -I00 -sS'value' -p3487 -NssS'summary_default' -p3488 -(dp3489 -S'editable' -p3490 -I01 -sS'value' -p3491 -S'none' -p3492 -ssS'valid_types' -p3493 -(dp3494 -S'editable' -p3495 -I01 -sS'value' -p3496 -(lp3497 -S'Reply' -p3498 -asssS'description' -p3499 -(dp3500 -S'editable' -p3501 -I01 -sS'value' -p3502 -g47 -sssS'sg_note_type' -p3503 -(dp3504 -S'mandatory' -p3505 -(dp3506 -S'editable' -p3507 -I00 -sS'value' -p3508 -I00 -ssS'name' -p3509 -(dp3510 -S'editable' -p3511 -I01 -sS'value' -p3512 -S'Type' -p3513 -ssS'data_type' -p3514 -(dp3515 -S'editable' -p3516 -I00 -sS'value' -p3517 -S'list' -p3518 -ssS'entity_type' -p3519 -(dp3520 -S'editable' -p3521 -I00 -sS'value' -p3522 -S'Note' -p3523 -ssS'editable' -p3524 -(dp3525 -S'editable' -p3526 -I00 -sS'value' -p3527 -I01 -ssS'unique' -p3528 -(dp3529 -S'editable' -p3530 -I00 -sS'value' -p3531 -I00 -ssS'properties' -p3532 -(dp3533 -S'default_value' -p3534 -(dp3535 -S'editable' -p3536 -I00 -sS'value' -p3537 -NssS'valid_values' -p3538 -(dp3539 -S'editable' -p3540 -I01 -sS'value' -p3541 -(lp3542 -S'Internal' -p3543 -aS'Client' -p3544 -aS'this list can be edited...' -p3545 -assS'summary_default' -p3546 -(dp3547 -S'editable' -p3548 -I01 -sS'value' -p3549 -S'none' -p3550 -sssS'description' -p3551 -(dp3552 -S'editable' -p3553 -I01 -sS'value' -p3554 -g47 -sssS'cached_display_name' -p3555 -(dp3556 -S'mandatory' -p3557 -(dp3558 -S'editable' -p3559 -I00 -sS'value' -p3560 -I00 -ssS'name' -p3561 -(dp3562 -S'editable' -p3563 -I01 -sS'value' -p3564 -S'Cached Display Name' -p3565 -ssS'data_type' -p3566 -(dp3567 -S'editable' -p3568 -I00 -sS'value' -p3569 -S'text' -p3570 -ssS'entity_type' -p3571 -(dp3572 -S'editable' -p3573 -I00 -sS'value' -p3574 -S'Note' -p3575 -ssS'editable' -p3576 -(dp3577 -S'editable' -p3578 -I00 -sS'value' -p3579 -I01 -ssS'unique' -p3580 -(dp3581 -S'editable' -p3582 -I00 -sS'value' -p3583 -I00 -ssS'properties' -p3584 -(dp3585 -S'default_value' -p3586 -(dp3587 -S'editable' -p3588 -I00 -sS'value' -p3589 -NssS'summary_default' -p3590 -(dp3591 -S'editable' -p3592 -I00 -sS'value' -p3593 -S'none' -p3594 -sssS'description' -p3595 -(dp3596 -S'editable' -p3597 -I01 -sS'value' -p3598 -g47 -sssS'reply_content' -p3599 -(dp3600 -S'mandatory' -p3601 -(dp3602 -S'editable' -p3603 -I00 -sS'value' -p3604 -I00 -ssS'name' -p3605 -(dp3606 -S'editable' -p3607 -I01 -sS'value' -p3608 -S'Reply Content' -p3609 -ssS'data_type' -p3610 -(dp3611 -S'editable' -p3612 -I00 -sS'value' -p3613 -S'text' -p3614 -ssS'entity_type' -p3615 -(dp3616 -S'editable' -p3617 -I00 -sS'value' -p3618 -S'Note' -p3619 -ssS'editable' -p3620 -(dp3621 -S'editable' -p3622 -I00 -sS'value' -p3623 -I01 -ssS'unique' -p3624 -(dp3625 -S'editable' -p3626 -I00 -sS'value' -p3627 -I00 -ssS'properties' -p3628 -(dp3629 -S'default_value' -p3630 -(dp3631 -S'editable' -p3632 -I00 -sS'value' -p3633 -NssS'summary_default' -p3634 -(dp3635 -S'editable' -p3636 -I01 -sS'value' -p3637 -S'none' -p3638 -sssS'description' -p3639 -(dp3640 -S'editable' -p3641 -I01 -sS'value' -p3642 -g47 -sssS'id' -p3643 -(dp3644 -S'mandatory' -p3645 -(dp3646 -S'editable' -p3647 -I00 -sS'value' -p3648 -I00 -ssS'name' -p3649 -(dp3650 -S'editable' -p3651 -I01 -sS'value' -p3652 -S'Id' -p3653 -ssS'data_type' -p3654 -(dp3655 -S'editable' -p3656 -I00 -sS'value' -p3657 -S'number' -p3658 -ssS'entity_type' -p3659 -(dp3660 -S'editable' -p3661 -I00 -sS'value' -p3662 -S'Note' -p3663 -ssS'editable' -p3664 -(dp3665 -S'editable' -p3666 -I00 -sS'value' -p3667 -I00 -ssS'unique' -p3668 -(dp3669 -S'editable' -p3670 -I00 -sS'value' -p3671 -I00 -ssS'properties' -p3672 -(dp3673 -S'default_value' -p3674 -(dp3675 -S'editable' -p3676 -I00 -sS'value' -p3677 -NssS'summary_default' -p3678 -(dp3679 -S'editable' -p3680 -I01 -sS'value' -p3681 -S'none' -p3682 -sssS'description' -p3683 -(dp3684 -S'editable' -p3685 -I01 -sS'value' -p3686 -g47 -sssS'subject' -p3687 -(dp3688 -S'mandatory' -p3689 -(dp3690 -S'editable' -p3691 -I00 -sS'value' -p3692 -I01 -ssS'name' -p3693 -(dp3694 -S'editable' -p3695 -I01 -sS'value' -p3696 -S'Subject' -p3697 -ssS'data_type' -p3698 -(dp3699 -S'editable' -p3700 -I00 -sS'value' -p3701 -S'text' -p3702 -ssS'entity_type' -p3703 -(dp3704 -S'editable' -p3705 -I00 -sS'value' -p3706 -S'Note' -p3707 -ssS'editable' -p3708 -(dp3709 -S'editable' -p3710 -I00 -sS'value' -p3711 -I01 -ssS'unique' -p3712 -(dp3713 -S'editable' -p3714 -I00 -sS'value' -p3715 -I00 -ssS'properties' -p3716 -(dp3717 -S'default_value' -p3718 -(dp3719 -S'editable' -p3720 -I00 -sS'value' -p3721 -NssS'summary_default' -p3722 -(dp3723 -S'editable' -p3724 -I01 -sS'value' -p3725 -S'none' -p3726 -sssS'description' -p3727 -(dp3728 -S'editable' -p3729 -I01 -sS'value' -p3730 -g47 -ssssS'TaskDependency' -p3731 -(dp3732 -S'task' -p3733 -(dp3734 -S'mandatory' -p3735 -(dp3736 -S'editable' -p3737 -I00 -sS'value' -p3738 -I00 -ssS'name' -p3739 -(dp3740 -S'editable' -p3741 -I01 -sS'value' -p3742 -S'Task' -p3743 -ssS'data_type' -p3744 -(dp3745 -S'editable' -p3746 -I00 -sS'value' -p3747 -S'entity' -p3748 -ssS'entity_type' -p3749 -(dp3750 -S'editable' -p3751 -I00 -sS'value' -p3752 -S'TaskDependency' -p3753 -ssS'editable' -p3754 -(dp3755 -S'editable' -p3756 -I00 -sS'value' -p3757 -I01 -ssS'unique' -p3758 -(dp3759 -S'editable' -p3760 -I00 -sS'value' -p3761 -I00 -ssS'properties' -p3762 -(dp3763 -S'default_value' -p3764 -(dp3765 -S'editable' -p3766 -I00 -sS'value' -p3767 -NssS'summary_default' -p3768 -(dp3769 -S'editable' -p3770 -I00 -sS'value' -p3771 -S'none' -p3772 -ssS'valid_types' -p3773 -(dp3774 -S'editable' -p3775 -I00 -sS'value' -p3776 -(lp3777 -S'Task' -p3778 -asssS'description' -p3779 -(dp3780 -S'editable' -p3781 -I01 -sS'value' -p3782 -g47 -sssS'task_id' -p3783 -(dp3784 -S'mandatory' -p3785 -(dp3786 -S'editable' -p3787 -I00 -sS'value' -p3788 -I00 -ssS'name' -p3789 -(dp3790 -S'editable' -p3791 -I01 -sS'value' -p3792 -S'Task Id' -p3793 -ssS'data_type' -p3794 -(dp3795 -S'editable' -p3796 -I00 -sS'value' -p3797 -S'number' -p3798 -ssS'entity_type' -p3799 -(dp3800 -S'editable' -p3801 -I00 -sS'value' -p3802 -S'TaskDependency' -p3803 -ssS'editable' -p3804 -(dp3805 -S'editable' -p3806 -I00 -sS'value' -p3807 -I00 -ssS'unique' -p3808 -(dp3809 -S'editable' -p3810 -I00 -sS'value' -p3811 -I00 -ssS'properties' -p3812 -(dp3813 -S'default_value' -p3814 -(dp3815 -S'editable' -p3816 -I00 -sS'value' -p3817 -NssS'summary_default' -p3818 -(dp3819 -S'editable' -p3820 -I00 -sS'value' -p3821 -S'none' -p3822 -sssS'description' -p3823 -(dp3824 -S'editable' -p3825 -I01 -sS'value' -p3826 -g47 -sssS'dependent_task' -p3827 -(dp3828 -S'mandatory' -p3829 -(dp3830 -S'editable' -p3831 -I00 -sS'value' -p3832 -I00 -ssS'name' -p3833 -(dp3834 -S'editable' -p3835 -I01 -sS'value' -p3836 -S'Dependent Task' -p3837 -ssS'data_type' -p3838 -(dp3839 -S'editable' -p3840 -I00 -sS'value' -p3841 -S'entity' -p3842 -ssS'entity_type' -p3843 -(dp3844 -S'editable' -p3845 -I00 -sS'value' -p3846 -S'TaskDependency' -p3847 -ssS'editable' -p3848 -(dp3849 -S'editable' -p3850 -I00 -sS'value' -p3851 -I01 -ssS'unique' -p3852 -(dp3853 -S'editable' -p3854 -I00 -sS'value' -p3855 -I00 -ssS'properties' -p3856 -(dp3857 -S'default_value' -p3858 -(dp3859 -S'editable' -p3860 -I00 -sS'value' -p3861 -NssS'summary_default' -p3862 -(dp3863 -S'editable' -p3864 -I00 -sS'value' -p3865 -S'none' -p3866 -ssS'valid_types' -p3867 -(dp3868 -S'editable' -p3869 -I00 -sS'value' -p3870 -(lp3871 -S'Task' -p3872 -asssS'description' -p3873 -(dp3874 -S'editable' -p3875 -I01 -sS'value' -p3876 -g47 -sssS'offset_days' -p3877 -(dp3878 -S'mandatory' -p3879 -(dp3880 -S'editable' -p3881 -I00 -sS'value' -p3882 -I00 -ssS'name' -p3883 -(dp3884 -S'editable' -p3885 -I01 -sS'value' -p3886 -S'Offset Days' -p3887 -ssS'data_type' -p3888 -(dp3889 -S'editable' -p3890 -I00 -sS'value' -p3891 -S'number' -p3892 -ssS'entity_type' -p3893 -(dp3894 -S'editable' -p3895 -I00 -sS'value' -p3896 -S'TaskDependency' -p3897 -ssS'editable' -p3898 -(dp3899 -S'editable' -p3900 -I00 -sS'value' -p3901 -I01 -ssS'unique' -p3902 -(dp3903 -S'editable' -p3904 -I00 -sS'value' -p3905 -I00 -ssS'properties' -p3906 -(dp3907 -S'default_value' -p3908 -(dp3909 -S'editable' -p3910 -I00 -sS'value' -p3911 -NssS'summary_default' -p3912 -(dp3913 -S'editable' -p3914 -I00 -sS'value' -p3915 -S'none' -p3916 -sssS'description' -p3917 -(dp3918 -S'editable' -p3919 -I01 -sS'value' -p3920 -g47 -sssS'cached_display_name' -p3921 -(dp3922 -S'mandatory' -p3923 -(dp3924 -S'editable' -p3925 -I00 -sS'value' -p3926 -I00 -ssS'name' -p3927 -(dp3928 -S'editable' -p3929 -I01 -sS'value' -p3930 -S'Cached Display Name' -p3931 -ssS'data_type' -p3932 -(dp3933 -S'editable' -p3934 -I00 -sS'value' -p3935 -S'text' -p3936 -ssS'entity_type' -p3937 -(dp3938 -S'editable' -p3939 -I00 -sS'value' -p3940 -S'TaskDependency' -p3941 -ssS'editable' -p3942 -(dp3943 -S'editable' -p3944 -I00 -sS'value' -p3945 -I01 -ssS'unique' -p3946 -(dp3947 -S'editable' -p3948 -I00 -sS'value' -p3949 -I00 -ssS'properties' -p3950 -(dp3951 -S'default_value' -p3952 -(dp3953 -S'editable' -p3954 -I00 -sS'value' -p3955 -NssS'summary_default' -p3956 -(dp3957 -S'editable' -p3958 -I00 -sS'value' -p3959 -S'none' -p3960 -sssS'description' -p3961 -(dp3962 -S'editable' -p3963 -I01 -sS'value' -p3964 -g47 -sssS'dependent_task_id' -p3965 -(dp3966 -S'mandatory' -p3967 -(dp3968 -S'editable' -p3969 -I00 -sS'value' -p3970 -I00 -ssS'name' -p3971 -(dp3972 -S'editable' -p3973 -I01 -sS'value' -p3974 -S'Dependent Task Id' -p3975 -ssS'data_type' -p3976 -(dp3977 -S'editable' -p3978 -I00 -sS'value' -p3979 -S'number' -p3980 -ssS'entity_type' -p3981 -(dp3982 -S'editable' -p3983 -I00 -sS'value' -p3984 -S'TaskDependency' -p3985 -ssS'editable' -p3986 -(dp3987 -S'editable' -p3988 -I00 -sS'value' -p3989 -I00 -ssS'unique' -p3990 -(dp3991 -S'editable' -p3992 -I00 -sS'value' -p3993 -I00 -ssS'properties' -p3994 -(dp3995 -S'default_value' -p3996 -(dp3997 -S'editable' -p3998 -I00 -sS'value' -p3999 -NssS'summary_default' -p4000 -(dp4001 -S'editable' -p4002 -I00 -sS'value' -p4003 -S'none' -p4004 -sssS'description' -p4005 -(dp4006 -S'editable' -p4007 -I01 -sS'value' -p4008 -g47 -sssS'id' -p4009 -(dp4010 -S'mandatory' -p4011 -(dp4012 -S'editable' -p4013 -I00 -sS'value' -p4014 -I00 -ssS'name' -p4015 -(dp4016 -S'editable' -p4017 -I01 -sS'value' -p4018 -S'Id' -p4019 -ssS'data_type' -p4020 -(dp4021 -S'editable' -p4022 -I00 -sS'value' -p4023 -S'number' -p4024 -ssS'entity_type' -p4025 -(dp4026 -S'editable' -p4027 -I00 -sS'value' -p4028 -S'TaskDependency' -p4029 -ssS'editable' -p4030 -(dp4031 -S'editable' -p4032 -I00 -sS'value' -p4033 -I00 -ssS'unique' -p4034 -(dp4035 -S'editable' -p4036 -I00 -sS'value' -p4037 -I00 -ssS'properties' -p4038 -(dp4039 -S'default_value' -p4040 -(dp4041 -S'editable' -p4042 -I00 -sS'value' -p4043 -NssS'summary_default' -p4044 -(dp4045 -S'editable' -p4046 -I00 -sS'value' -p4047 -S'none' -p4048 -sssS'description' -p4049 -(dp4050 -S'editable' -p4051 -I01 -sS'value' -p4052 -g47 -ssssS'PageHit' -p4053 -(dp4054 -S'user' -p4055 -(dp4056 -S'mandatory' -p4057 -(dp4058 -S'editable' -p4059 -I00 -sS'value' -p4060 -I00 -ssS'name' -p4061 -(dp4062 -S'editable' -p4063 -I01 -sS'value' -p4064 -S'User' -p4065 -ssS'data_type' -p4066 -(dp4067 -S'editable' -p4068 -I00 -sS'value' -p4069 -S'entity' -p4070 -ssS'entity_type' -p4071 -(dp4072 -S'editable' -p4073 -I00 -sS'value' -p4074 -S'PageHit' -p4075 -ssS'editable' -p4076 -(dp4077 -S'editable' -p4078 -I00 -sS'value' -p4079 -I00 -ssS'unique' -p4080 -(dp4081 -S'editable' -p4082 -I00 -sS'value' -p4083 -I00 -ssS'properties' -p4084 -(dp4085 -S'default_value' -p4086 -(dp4087 -S'editable' -p4088 -I00 -sS'value' -p4089 -NssS'summary_default' -p4090 -(dp4091 -S'editable' -p4092 -I00 -sS'value' -p4093 -S'none' -p4094 -ssS'valid_types' -p4095 -(dp4096 -S'editable' -p4097 -I00 -sS'value' -p4098 -(lp4099 -S'HumanUser' -p4100 -asssS'description' -p4101 -(dp4102 -S'editable' -p4103 -I01 -sS'value' -p4104 -g47 -sssS'created_at' -p4105 -(dp4106 -S'mandatory' -p4107 -(dp4108 -S'editable' -p4109 -I00 -sS'value' -p4110 -I00 -ssS'name' -p4111 -(dp4112 -S'editable' -p4113 -I01 -sS'value' -p4114 -S'Date Created' -p4115 -ssS'data_type' -p4116 -(dp4117 -S'editable' -p4118 -I00 -sS'value' -p4119 -S'date_time' -p4120 -ssS'entity_type' -p4121 -(dp4122 -S'editable' -p4123 -I00 -sS'value' -p4124 -S'PageHit' -p4125 -ssS'editable' -p4126 -(dp4127 -S'editable' -p4128 -I00 -sS'value' -p4129 -I00 -ssS'unique' -p4130 -(dp4131 -S'editable' -p4132 -I00 -sS'value' -p4133 -I00 -ssS'properties' -p4134 -(dp4135 -S'default_value' -p4136 -(dp4137 -S'editable' -p4138 -I00 -sS'value' -p4139 -NssS'summary_default' -p4140 -(dp4141 -S'editable' -p4142 -I00 -sS'value' -p4143 -S'none' -p4144 -sssS'description' -p4145 -(dp4146 -S'editable' -p4147 -I01 -sS'value' -p4148 -g47 -sssS'id' -p4149 -(dp4150 -S'mandatory' -p4151 -(dp4152 -S'editable' -p4153 -I00 -sS'value' -p4154 -I01 -ssS'name' -p4155 -(dp4156 -S'editable' -p4157 -I01 -sS'value' -p4158 -S'Id' -p4159 -ssS'data_type' -p4160 -(dp4161 -S'editable' -p4162 -I00 -sS'value' -p4163 -S'number' -p4164 -ssS'entity_type' -p4165 -(dp4166 -S'editable' -p4167 -I00 -sS'value' -p4168 -S'PageHit' -p4169 -ssS'editable' -p4170 -(dp4171 -S'editable' -p4172 -I00 -sS'value' -p4173 -I00 -ssS'unique' -p4174 -(dp4175 -S'editable' -p4176 -I00 -sS'value' -p4177 -I00 -ssS'properties' -p4178 -(dp4179 -S'default_value' -p4180 -(dp4181 -S'editable' -p4182 -I00 -sS'value' -p4183 -NssS'summary_default' -p4184 -(dp4185 -S'editable' -p4186 -I00 -sS'value' -p4187 -S'none' -p4188 -sssS'description' -p4189 -(dp4190 -S'editable' -p4191 -I01 -sS'value' -p4192 -g47 -sssS'cached_display_name' -p4193 -(dp4194 -S'mandatory' -p4195 -(dp4196 -S'editable' -p4197 -I00 -sS'value' -p4198 -I00 -ssS'name' -p4199 -(dp4200 -S'editable' -p4201 -I01 -sS'value' -p4202 -S'Cached Display Name' -p4203 -ssS'data_type' -p4204 -(dp4205 -S'editable' -p4206 -I00 -sS'value' -p4207 -S'text' -p4208 -ssS'entity_type' -p4209 -(dp4210 -S'editable' -p4211 -I00 -sS'value' -p4212 -S'PageHit' -p4213 -ssS'editable' -p4214 -(dp4215 -S'editable' -p4216 -I00 -sS'value' -p4217 -I01 -ssS'unique' -p4218 -(dp4219 -S'editable' -p4220 -I00 -sS'value' -p4221 -I00 -ssS'properties' -p4222 -(dp4223 -S'default_value' -p4224 -(dp4225 -S'editable' -p4226 -I00 -sS'value' -p4227 -NssS'summary_default' -p4228 -(dp4229 -S'editable' -p4230 -I00 -sS'value' -p4231 -S'none' -p4232 -sssS'description' -p4233 -(dp4234 -S'editable' -p4235 -I01 -sS'value' -p4236 -g47 -sssS'page' -p4237 -(dp4238 -S'mandatory' -p4239 -(dp4240 -S'editable' -p4241 -I00 -sS'value' -p4242 -I00 -ssS'name' -p4243 -(dp4244 -S'editable' -p4245 -I01 -sS'value' -p4246 -S'Page' -p4247 -ssS'data_type' -p4248 -(dp4249 -S'editable' -p4250 -I00 -sS'value' -p4251 -S'entity' -p4252 -ssS'entity_type' -p4253 -(dp4254 -S'editable' -p4255 -I00 -sS'value' -p4256 -S'PageHit' -p4257 -ssS'editable' -p4258 -(dp4259 -S'editable' -p4260 -I00 -sS'value' -p4261 -I00 -ssS'unique' -p4262 -(dp4263 -S'editable' -p4264 -I00 -sS'value' -p4265 -I00 -ssS'properties' -p4266 -(dp4267 -S'default_value' -p4268 -(dp4269 -S'editable' -p4270 -I00 -sS'value' -p4271 -NssS'summary_default' -p4272 -(dp4273 -S'editable' -p4274 -I00 -sS'value' -p4275 -S'none' -p4276 -ssS'valid_types' -p4277 -(dp4278 -S'editable' -p4279 -I00 -sS'value' -p4280 -(lp4281 -S'Page' -p4282 -asssS'description' -p4283 -(dp4284 -S'editable' -p4285 -I01 -sS'value' -p4286 -g47 -ssssS'ActionMenuItem' -p4287 -(dp4288 -S'updated_by' -p4289 -(dp4290 -S'mandatory' -p4291 -(dp4292 -S'editable' -p4293 -I00 -sS'value' -p4294 -I00 -ssS'name' -p4295 -(dp4296 -S'editable' -p4297 -I01 -sS'value' -p4298 -S'Updated by' -p4299 -ssS'data_type' -p4300 -(dp4301 -S'editable' -p4302 -I00 -sS'value' -p4303 -S'entity' -p4304 -ssS'entity_type' -p4305 -(dp4306 -S'editable' -p4307 -I00 -sS'value' -p4308 -S'ActionMenuItem' -p4309 -ssS'editable' -p4310 -(dp4311 -S'editable' -p4312 -I00 -sS'value' -p4313 -I00 -ssS'unique' -p4314 -(dp4315 -S'editable' -p4316 -I00 -sS'value' -p4317 -I00 -ssS'properties' -p4318 -(dp4319 -S'default_value' -p4320 -(dp4321 -S'editable' -p4322 -I00 -sS'value' -p4323 -NssS'summary_default' -p4324 -(dp4325 -S'editable' -p4326 -I01 -sS'value' -p4327 -S'none' -p4328 -ssS'valid_types' -p4329 -(dp4330 -S'editable' -p4331 -I01 -sS'value' -p4332 -(lp4333 -S'HumanUser' -p4334 -aS'ApiUser' -p4335 -asssS'description' -p4336 -(dp4337 -S'editable' -p4338 -I01 -sS'value' -p4339 -g47 -sssS'list_order' -p4340 -(dp4341 -S'mandatory' -p4342 -(dp4343 -S'editable' -p4344 -I00 -sS'value' -p4345 -I00 -ssS'name' -p4346 -(dp4347 -S'editable' -p4348 -I01 -sS'value' -p4349 -S'Order' -p4350 -ssS'data_type' -p4351 -(dp4352 -S'editable' -p4353 -I00 -sS'value' -p4354 -S'number' -p4355 -ssS'entity_type' -p4356 -(dp4357 -S'editable' -p4358 -I00 -sS'value' -p4359 -S'ActionMenuItem' -p4360 -ssS'editable' -p4361 -(dp4362 -S'editable' -p4363 -I00 -sS'value' -p4364 -I01 -ssS'unique' -p4365 -(dp4366 -S'editable' -p4367 -I00 -sS'value' -p4368 -I00 -ssS'properties' -p4369 -(dp4370 -S'default_value' -p4371 -(dp4372 -S'editable' -p4373 -I00 -sS'value' -p4374 -NssS'summary_default' -p4375 -(dp4376 -S'editable' -p4377 -I00 -sS'value' -p4378 -S'none' -p4379 -sssS'description' -p4380 -(dp4381 -S'editable' -p4382 -I01 -sS'value' -p4383 -g47 -sssS'url' -p4384 -(dp4385 -S'mandatory' -p4386 -(dp4387 -S'editable' -p4388 -I00 -sS'value' -p4389 -I00 -ssS'name' -p4390 -(dp4391 -S'editable' -p4392 -I01 -sS'value' -p4393 -S'URL' -p4394 -ssS'data_type' -p4395 -(dp4396 -S'editable' -p4397 -I00 -sS'value' -p4398 -S'text' -p4399 -ssS'entity_type' -p4400 -(dp4401 -S'editable' -p4402 -I00 -sS'value' -p4403 -S'ActionMenuItem' -p4404 -ssS'editable' -p4405 -(dp4406 -S'editable' -p4407 -I00 -sS'value' -p4408 -I01 -ssS'unique' -p4409 -(dp4410 -S'editable' -p4411 -I00 -sS'value' -p4412 -I00 -ssS'properties' -p4413 -(dp4414 -S'default_value' -p4415 -(dp4416 -S'editable' -p4417 -I00 -sS'value' -p4418 -NssS'summary_default' -p4419 -(dp4420 -S'editable' -p4421 -I00 -sS'value' -p4422 -S'none' -p4423 -sssS'description' -p4424 -(dp4425 -S'editable' -p4426 -I01 -sS'value' -p4427 -g47 -sssS'created_at' -p4428 -(dp4429 -S'mandatory' -p4430 -(dp4431 -S'editable' -p4432 -I00 -sS'value' -p4433 -I00 -ssS'name' -p4434 -(dp4435 -S'editable' -p4436 -I01 -sS'value' -p4437 -S'Date Created' -p4438 -ssS'data_type' -p4439 -(dp4440 -S'editable' -p4441 -I00 -sS'value' -p4442 -S'date_time' -p4443 -ssS'entity_type' -p4444 -(dp4445 -S'editable' -p4446 -I00 -sS'value' -p4447 -S'ActionMenuItem' -p4448 -ssS'editable' -p4449 -(dp4450 -S'editable' -p4451 -I00 -sS'value' -p4452 -I00 -ssS'unique' -p4453 -(dp4454 -S'editable' -p4455 -I00 -sS'value' -p4456 -I00 -ssS'properties' -p4457 -(dp4458 -S'default_value' -p4459 -(dp4460 -S'editable' -p4461 -I00 -sS'value' -p4462 -NssS'summary_default' -p4463 -(dp4464 -S'editable' -p4465 -I01 -sS'value' -p4466 -S'none' -p4467 -sssS'description' -p4468 -(dp4469 -S'editable' -p4470 -I01 -sS'value' -p4471 -g47 -sssS'title' -p4472 -(dp4473 -S'mandatory' -p4474 -(dp4475 -S'editable' -p4476 -I00 -sS'value' -p4477 -I01 -ssS'name' -p4478 -(dp4479 -S'editable' -p4480 -I01 -sS'value' -p4481 -S'Title' -p4482 -ssS'data_type' -p4483 -(dp4484 -S'editable' -p4485 -I00 -sS'value' -p4486 -S'text' -p4487 -ssS'entity_type' -p4488 -(dp4489 -S'editable' -p4490 -I00 -sS'value' -p4491 -S'ActionMenuItem' -p4492 -ssS'editable' -p4493 -(dp4494 -S'editable' -p4495 -I00 -sS'value' -p4496 -I01 -ssS'unique' -p4497 -(dp4498 -S'editable' -p4499 -I00 -sS'value' -p4500 -I00 -ssS'properties' -p4501 -(dp4502 -S'default_value' -p4503 -(dp4504 -S'editable' -p4505 -I00 -sS'value' -p4506 -NssS'summary_default' -p4507 -(dp4508 -S'editable' -p4509 -I00 -sS'value' -p4510 -S'none' -p4511 -sssS'description' -p4512 -(dp4513 -S'editable' -p4514 -I01 -sS'value' -p4515 -g47 -sssS'poll_for_data_updates' -p4516 -(dp4517 -S'mandatory' -p4518 -(dp4519 -S'editable' -p4520 -I00 -sS'value' -p4521 -I00 -ssS'name' -p4522 -(dp4523 -S'editable' -p4524 -I01 -sS'value' -p4525 -S'Poll For Data Updates' -p4526 -ssS'data_type' -p4527 -(dp4528 -S'editable' -p4529 -I00 -sS'value' -p4530 -S'checkbox' -p4531 -ssS'entity_type' -p4532 -(dp4533 -S'editable' -p4534 -I00 -sS'value' -p4535 -S'ActionMenuItem' -p4536 -ssS'editable' -p4537 -(dp4538 -S'editable' -p4539 -I00 -sS'value' -p4540 -I01 -ssS'unique' -p4541 -(dp4542 -S'editable' -p4543 -I00 -sS'value' -p4544 -I00 -ssS'properties' -p4545 -(dp4546 -S'default_value' -p4547 -(dp4548 -S'editable' -p4549 -I00 -sS'value' -p4550 -I00 -ssS'summary_default' -p4551 -(dp4552 -S'editable' -p4553 -I00 -sS'value' -p4554 -S'none' -p4555 -sssS'description' -p4556 -(dp4557 -S'editable' -p4558 -I01 -sS'value' -p4559 -g47 -sssS'updated_at' -p4560 -(dp4561 -S'mandatory' -p4562 -(dp4563 -S'editable' -p4564 -I00 -sS'value' -p4565 -I00 -ssS'name' -p4566 -(dp4567 -S'editable' -p4568 -I01 -sS'value' -p4569 -S'Date Updated' -p4570 -ssS'data_type' -p4571 -(dp4572 -S'editable' -p4573 -I00 -sS'value' -p4574 -S'date_time' -p4575 -ssS'entity_type' -p4576 -(dp4577 -S'editable' -p4578 -I00 -sS'value' -p4579 -S'ActionMenuItem' -p4580 -ssS'editable' -p4581 -(dp4582 -S'editable' -p4583 -I00 -sS'value' -p4584 -I00 -ssS'unique' -p4585 -(dp4586 -S'editable' -p4587 -I00 -sS'value' -p4588 -I00 -ssS'properties' -p4589 -(dp4590 -S'default_value' -p4591 -(dp4592 -S'editable' -p4593 -I00 -sS'value' -p4594 -NssS'summary_default' -p4595 -(dp4596 -S'editable' -p4597 -I01 -sS'value' -p4598 -S'none' -p4599 -sssS'description' -p4600 -(dp4601 -S'editable' -p4602 -I01 -sS'value' -p4603 -g47 -sssS'created_by' -p4604 -(dp4605 -S'mandatory' -p4606 -(dp4607 -S'editable' -p4608 -I00 -sS'value' -p4609 -I00 -ssS'name' -p4610 -(dp4611 -S'editable' -p4612 -I01 -sS'value' -p4613 -S'Created by' -p4614 -ssS'data_type' -p4615 -(dp4616 -S'editable' -p4617 -I00 -sS'value' -p4618 -S'entity' -p4619 -ssS'entity_type' -p4620 -(dp4621 -S'editable' -p4622 -I00 -sS'value' -p4623 -S'ActionMenuItem' -p4624 -ssS'editable' -p4625 -(dp4626 -S'editable' -p4627 -I00 -sS'value' -p4628 -I00 -ssS'unique' -p4629 -(dp4630 -S'editable' -p4631 -I00 -sS'value' -p4632 -I00 -ssS'properties' -p4633 -(dp4634 -S'default_value' -p4635 -(dp4636 -S'editable' -p4637 -I00 -sS'value' -p4638 -NssS'summary_default' -p4639 -(dp4640 -S'editable' -p4641 -I01 -sS'value' -p4642 -S'none' -p4643 -ssS'valid_types' -p4644 -(dp4645 -S'editable' -p4646 -I01 -sS'value' -p4647 -(lp4648 -S'HumanUser' -p4649 -aS'ApiUser' -p4650 -asssS'description' -p4651 -(dp4652 -S'editable' -p4653 -I01 -sS'value' -p4654 -g47 -sssS'permissions_groups' -p4655 -(dp4656 -S'mandatory' -p4657 -(dp4658 -S'editable' -p4659 -I00 -sS'value' -p4660 -I00 -ssS'name' -p4661 -(dp4662 -S'editable' -p4663 -I01 -sS'value' -p4664 -S'Restrict to Permission Groups' -p4665 -ssS'data_type' -p4666 -(dp4667 -S'editable' -p4668 -I00 -sS'value' -p4669 -S'multi_entity' -p4670 -ssS'entity_type' -p4671 -(dp4672 -S'editable' -p4673 -I00 -sS'value' -p4674 -S'ActionMenuItem' -p4675 -ssS'editable' -p4676 -(dp4677 -S'editable' -p4678 -I00 -sS'value' -p4679 -I01 -ssS'unique' -p4680 -(dp4681 -S'editable' -p4682 -I00 -sS'value' -p4683 -I00 -ssS'properties' -p4684 -(dp4685 -S'default_value' -p4686 -(dp4687 -S'editable' -p4688 -I00 -sS'value' -p4689 -NssS'summary_default' -p4690 -(dp4691 -S'editable' -p4692 -I01 -sS'value' -p4693 -S'none' -p4694 -ssS'valid_types' -p4695 -(dp4696 -S'editable' -p4697 -I01 -sS'value' -p4698 -(lp4699 -S'PermissionRuleSet' -p4700 -asssS'description' -p4701 -(dp4702 -S'editable' -p4703 -I01 -sS'value' -p4704 -g47 -sssS'entity_type' -p4705 -(dp4706 -S'mandatory' -p4707 -(dp4708 -S'editable' -p4709 -I00 -sS'value' -p4710 -I00 -ssS'name' -p4711 -(dp4712 -S'editable' -p4713 -I01 -sS'value' -p4714 -S'Entity Type' -p4715 -ssS'data_type' -p4716 -(dp4717 -S'editable' -p4718 -I00 -sS'value' -p4719 -S'entity_type' -p4720 -ssS'entity_type' -p4721 -(dp4722 -S'editable' -p4723 -I00 -sS'value' -p4724 -S'ActionMenuItem' -p4725 -ssS'editable' -p4726 -(dp4727 -S'editable' -p4728 -I00 -sS'value' -p4729 -I01 -ssS'unique' -p4730 -(dp4731 -S'editable' -p4732 -I00 -sS'value' -p4733 -I00 -ssS'properties' -p4734 -(dp4735 -S'default_value' -p4736 -(dp4737 -S'editable' -p4738 -I00 -sS'value' -p4739 -NssS'summary_default' -p4740 -(dp4741 -S'editable' -p4742 -I00 -sS'value' -p4743 -S'none' -p4744 -sssS'description' -p4745 -(dp4746 -S'editable' -p4747 -I01 -sS'value' -p4748 -g47 -sssS'selection_required' -p4749 -(dp4750 -S'mandatory' -p4751 -(dp4752 -S'editable' -p4753 -I00 -sS'value' -p4754 -I00 -ssS'name' -p4755 -(dp4756 -S'editable' -p4757 -I01 -sS'value' -p4758 -S'Selection Required' -p4759 -ssS'data_type' -p4760 -(dp4761 -S'editable' -p4762 -I00 -sS'value' -p4763 -S'checkbox' -p4764 -ssS'entity_type' -p4765 -(dp4766 -S'editable' -p4767 -I00 -sS'value' -p4768 -S'ActionMenuItem' -p4769 -ssS'editable' -p4770 -(dp4771 -S'editable' -p4772 -I00 -sS'value' -p4773 -I01 -ssS'unique' -p4774 -(dp4775 -S'editable' -p4776 -I00 -sS'value' -p4777 -I00 -ssS'properties' -p4778 -(dp4779 -S'default_value' -p4780 -(dp4781 -S'editable' -p4782 -I00 -sS'value' -p4783 -I00 -ssS'summary_default' -p4784 -(dp4785 -S'editable' -p4786 -I00 -sS'value' -p4787 -S'none' -p4788 -sssS'description' -p4789 -(dp4790 -S'editable' -p4791 -I01 -sS'value' -p4792 -g47 -sssS'folder' -p4793 -(dp4794 -S'mandatory' -p4795 -(dp4796 -S'editable' -p4797 -I00 -sS'value' -p4798 -I00 -ssS'name' -p4799 -(dp4800 -S'editable' -p4801 -I01 -sS'value' -p4802 -S'Folder' -p4803 -ssS'data_type' -p4804 -(dp4805 -S'editable' -p4806 -I00 -sS'value' -p4807 -S'text' -p4808 -ssS'entity_type' -p4809 -(dp4810 -S'editable' -p4811 -I00 -sS'value' -p4812 -S'ActionMenuItem' -p4813 -ssS'editable' -p4814 -(dp4815 -S'editable' -p4816 -I00 -sS'value' -p4817 -I01 -ssS'unique' -p4818 -(dp4819 -S'editable' -p4820 -I00 -sS'value' -p4821 -I00 -ssS'properties' -p4822 -(dp4823 -S'default_value' -p4824 -(dp4825 -S'editable' -p4826 -I00 -sS'value' -p4827 -NssS'summary_default' -p4828 -(dp4829 -S'editable' -p4830 -I00 -sS'value' -p4831 -S'none' -p4832 -sssS'description' -p4833 -(dp4834 -S'editable' -p4835 -I01 -sS'value' -p4836 -g47 -sssS'id' -p4837 -(dp4838 -S'mandatory' -p4839 -(dp4840 -S'editable' -p4841 -I00 -sS'value' -p4842 -I00 -ssS'name' -p4843 -(dp4844 -S'editable' -p4845 -I01 -sS'value' -p4846 -S'Id' -p4847 -ssS'data_type' -p4848 -(dp4849 -S'editable' -p4850 -I00 -sS'value' -p4851 -S'number' -p4852 -ssS'entity_type' -p4853 -(dp4854 -S'editable' -p4855 -I00 -sS'value' -p4856 -S'ActionMenuItem' -p4857 -ssS'editable' -p4858 -(dp4859 -S'editable' -p4860 -I00 -sS'value' -p4861 -I00 -ssS'unique' -p4862 -(dp4863 -S'editable' -p4864 -I00 -sS'value' -p4865 -I00 -ssS'properties' -p4866 -(dp4867 -S'default_value' -p4868 -(dp4869 -S'editable' -p4870 -I00 -sS'value' -p4871 -NssS'summary_default' -p4872 -(dp4873 -S'editable' -p4874 -I00 -sS'value' -p4875 -S'none' -p4876 -sssS'description' -p4877 -(dp4878 -S'editable' -p4879 -I01 -sS'value' -p4880 -g47 -sssS'projects' -p4881 -(dp4882 -S'mandatory' -p4883 -(dp4884 -S'editable' -p4885 -I00 -sS'value' -p4886 -I00 -ssS'name' -p4887 -(dp4888 -S'editable' -p4889 -I01 -sS'value' -p4890 -S'Restrict to Projects' -p4891 -ssS'data_type' -p4892 -(dp4893 -S'editable' -p4894 -I00 -sS'value' -p4895 -S'multi_entity' -p4896 -ssS'entity_type' -p4897 -(dp4898 -S'editable' -p4899 -I00 -sS'value' -p4900 -S'ActionMenuItem' -p4901 -ssS'editable' -p4902 -(dp4903 -S'editable' -p4904 -I00 -sS'value' -p4905 -I01 -ssS'unique' -p4906 -(dp4907 -S'editable' -p4908 -I00 -sS'value' -p4909 -I00 -ssS'properties' -p4910 -(dp4911 -S'default_value' -p4912 -(dp4913 -S'editable' -p4914 -I00 -sS'value' -p4915 -NssS'summary_default' -p4916 -(dp4917 -S'editable' -p4918 -I01 -sS'value' -p4919 -S'none' -p4920 -ssS'valid_types' -p4921 -(dp4922 -S'editable' -p4923 -I01 -sS'value' -p4924 -(lp4925 -S'Project' -p4926 -asssS'description' -p4927 -(dp4928 -S'editable' -p4929 -I01 -sS'value' -p4930 -g47 -sssS'cached_display_name' -p4931 -(dp4932 -S'mandatory' -p4933 -(dp4934 -S'editable' -p4935 -I00 -sS'value' -p4936 -I00 -ssS'name' -p4937 -(dp4938 -S'editable' -p4939 -I01 -sS'value' -p4940 -S'Cached Display Name' -p4941 -ssS'data_type' -p4942 -(dp4943 -S'editable' -p4944 -I00 -sS'value' -p4945 -S'text' -p4946 -ssS'entity_type' -p4947 -(dp4948 -S'editable' -p4949 -I00 -sS'value' -p4950 -S'ActionMenuItem' -p4951 -ssS'editable' -p4952 -(dp4953 -S'editable' -p4954 -I00 -sS'value' -p4955 -I01 -ssS'unique' -p4956 -(dp4957 -S'editable' -p4958 -I00 -sS'value' -p4959 -I00 -ssS'properties' -p4960 -(dp4961 -S'default_value' -p4962 -(dp4963 -S'editable' -p4964 -I00 -sS'value' -p4965 -NssS'summary_default' -p4966 -(dp4967 -S'editable' -p4968 -I00 -sS'value' -p4969 -S'none' -p4970 -sssS'description' -p4971 -(dp4972 -S'editable' -p4973 -I01 -sS'value' -p4974 -g47 -ssssS'Attachment' -p4975 -(dp4976 -S'open_notes_count' -p4977 -(dp4978 -S'mandatory' -p4979 -(dp4980 -S'editable' -p4981 -I00 -sS'value' -p4982 -I00 -ssS'name' -p4983 -(dp4984 -S'editable' -p4985 -I01 -sS'value' -p4986 -S'Open Notes Count' -p4987 -ssS'data_type' -p4988 -(dp4989 -S'editable' -p4990 -I00 -sS'value' -p4991 -S'text' -p4992 -ssS'entity_type' -p4993 -(dp4994 -S'editable' -p4995 -I00 -sS'value' -p4996 -S'Attachment' -p4997 -ssS'editable' -p4998 -(dp4999 -S'editable' -p5000 -I00 -sS'value' -p5001 -I00 -ssS'unique' -p5002 -(dp5003 -S'editable' -p5004 -I00 -sS'value' -p5005 -I00 -ssS'properties' -p5006 -(dp5007 -S'default_value' -p5008 -(dp5009 -S'editable' -p5010 -I00 -sS'value' -p5011 -NssS'summary_default' -p5012 -(dp5013 -S'editable' -p5014 -I01 -sS'value' -p5015 -S'none' -p5016 -sssS'description' -p5017 -(dp5018 -S'editable' -p5019 -I01 -sS'value' -p5020 -g47 -sssS'tasks' -p5021 -(dp5022 -S'mandatory' -p5023 -(dp5024 -S'editable' -p5025 -I00 -sS'value' -p5026 -I00 -ssS'name' -p5027 -(dp5028 -S'editable' -p5029 -I01 -sS'value' -p5030 -S'Tasks' -p5031 -ssS'data_type' -p5032 -(dp5033 -S'editable' -p5034 -I00 -sS'value' -p5035 -S'multi_entity' -p5036 -ssS'entity_type' -p5037 -(dp5038 -S'editable' -p5039 -I00 -sS'value' -p5040 -S'Attachment' -p5041 -ssS'editable' -p5042 -(dp5043 -S'editable' -p5044 -I00 -sS'value' -p5045 -I01 -ssS'unique' -p5046 -(dp5047 -S'editable' -p5048 -I00 -sS'value' -p5049 -I00 -ssS'properties' -p5050 -(dp5051 -S'default_value' -p5052 -(dp5053 -S'editable' -p5054 -I00 -sS'value' -p5055 -NssS'summary_default' -p5056 -(dp5057 -S'editable' -p5058 -I01 -sS'value' -p5059 -S'none' -p5060 -ssS'valid_types' -p5061 -(dp5062 -S'editable' -p5063 -I01 -sS'value' -p5064 -(lp5065 -S'Task' -p5066 -asssS'description' -p5067 -(dp5068 -S'editable' -p5069 -I01 -sS'value' -p5070 -g47 -sssS'file_extension' -p5071 -(dp5072 -S'mandatory' -p5073 -(dp5074 -S'editable' -p5075 -I00 -sS'value' -p5076 -I00 -ssS'name' -p5077 -(dp5078 -S'editable' -p5079 -I01 -sS'value' -p5080 -S'File Type' -p5081 -ssS'data_type' -p5082 -(dp5083 -S'editable' -p5084 -I00 -sS'value' -p5085 -S'text' -p5086 -ssS'entity_type' -p5087 -(dp5088 -S'editable' -p5089 -I00 -sS'value' -p5090 -S'Attachment' -p5091 -ssS'editable' -p5092 -(dp5093 -S'editable' -p5094 -I00 -sS'value' -p5095 -I00 -ssS'unique' -p5096 -(dp5097 -S'editable' -p5098 -I00 -sS'value' -p5099 -I00 -ssS'properties' -p5100 -(dp5101 -S'default_value' -p5102 -(dp5103 -S'editable' -p5104 -I00 -sS'value' -p5105 -NssS'summary_default' -p5106 -(dp5107 -S'editable' -p5108 -I01 -sS'value' -p5109 -S'none' -p5110 -sssS'description' -p5111 -(dp5112 -S'editable' -p5113 -I01 -sS'value' -p5114 -g47 -sssS'updated_at' -p5115 -(dp5116 -S'mandatory' -p5117 -(dp5118 -S'editable' -p5119 -I00 -sS'value' -p5120 -I00 -ssS'name' -p5121 -(dp5122 -S'editable' -p5123 -I01 -sS'value' -p5124 -S'Date Updated' -p5125 -ssS'data_type' -p5126 -(dp5127 -S'editable' -p5128 -I00 -sS'value' -p5129 -S'date_time' -p5130 -ssS'entity_type' -p5131 -(dp5132 -S'editable' -p5133 -I00 -sS'value' -p5134 -S'Attachment' -p5135 -ssS'editable' -p5136 -(dp5137 -S'editable' -p5138 -I00 -sS'value' -p5139 -I00 -ssS'unique' -p5140 -(dp5141 -S'editable' -p5142 -I00 -sS'value' -p5143 -I00 -ssS'properties' -p5144 -(dp5145 -S'default_value' -p5146 -(dp5147 -S'editable' -p5148 -I00 -sS'value' -p5149 -NssS'summary_default' -p5150 -(dp5151 -S'editable' -p5152 -I01 -sS'value' -p5153 -S'none' -p5154 -sssS'description' -p5155 -(dp5156 -S'editable' -p5157 -I01 -sS'value' -p5158 -g47 -sssS'attachment_reference_links' -p5159 -(dp5160 -S'mandatory' -p5161 -(dp5162 -S'editable' -p5163 -I00 -sS'value' -p5164 -I00 -ssS'name' -p5165 -(dp5166 -S'editable' -p5167 -I01 -sS'value' -p5168 -S'Reference For' -p5169 -ssS'data_type' -p5170 -(dp5171 -S'editable' -p5172 -I00 -sS'value' -p5173 -S'multi_entity' -p5174 -ssS'entity_type' -p5175 -(dp5176 -S'editable' -p5177 -I00 -sS'value' -p5178 -S'Attachment' -p5179 -ssS'editable' -p5180 -(dp5181 -S'editable' -p5182 -I00 -sS'value' -p5183 -I01 -ssS'unique' -p5184 -(dp5185 -S'editable' -p5186 -I00 -sS'value' -p5187 -I00 -ssS'properties' -p5188 -(dp5189 -S'default_value' -p5190 -(dp5191 -S'editable' -p5192 -I00 -sS'value' -p5193 -NssS'summary_default' -p5194 -(dp5195 -S'editable' -p5196 -I01 -sS'value' -p5197 -S'none' -p5198 -ssS'valid_types' -p5199 -(dp5200 -S'editable' -p5201 -I00 -sS'value' -p5202 -(lp5203 -S'Asset' -p5204 -aS'Scene' -p5205 -aS'Sequence' -p5206 -aS'Shot' -p5207 -aS'Version' -p5208 -asssS'description' -p5209 -(dp5210 -S'editable' -p5211 -I01 -sS'value' -p5212 -g47 -sssS'file_size' -p5213 -(dp5214 -S'mandatory' -p5215 -(dp5216 -S'editable' -p5217 -I00 -sS'value' -p5218 -I00 -ssS'name' -p5219 -(dp5220 -S'editable' -p5221 -I01 -sS'value' -p5222 -S'File Size' -p5223 -ssS'data_type' -p5224 -(dp5225 -S'editable' -p5226 -I00 -sS'value' -p5227 -S'number' -p5228 -ssS'entity_type' -p5229 -(dp5230 -S'editable' -p5231 -I00 -sS'value' -p5232 -S'Attachment' -p5233 -ssS'editable' -p5234 -(dp5235 -S'editable' -p5236 -I00 -sS'value' -p5237 -I00 -ssS'unique' -p5238 -(dp5239 -S'editable' -p5240 -I00 -sS'value' -p5241 -I00 -ssS'properties' -p5242 -(dp5243 -S'default_value' -p5244 -(dp5245 -S'editable' -p5246 -I00 -sS'value' -p5247 -NssS'summary_default' -p5248 -(dp5249 -S'editable' -p5250 -I01 -sS'value' -p5251 -S'none' -p5252 -sssS'description' -p5253 -(dp5254 -S'editable' -p5255 -I01 -sS'value' -p5256 -g47 -sssS'cached_display_name' -p5257 -(dp5258 -S'mandatory' -p5259 -(dp5260 -S'editable' -p5261 -I00 -sS'value' -p5262 -I00 -ssS'name' -p5263 -(dp5264 -S'editable' -p5265 -I01 -sS'value' -p5266 -S'Cached Display Name' -p5267 -ssS'data_type' -p5268 -(dp5269 -S'editable' -p5270 -I00 -sS'value' -p5271 -S'text' -p5272 -ssS'entity_type' -p5273 -(dp5274 -S'editable' -p5275 -I00 -sS'value' -p5276 -S'Attachment' -p5277 -ssS'editable' -p5278 -(dp5279 -S'editable' -p5280 -I00 -sS'value' -p5281 -I01 -ssS'unique' -p5282 -(dp5283 -S'editable' -p5284 -I00 -sS'value' -p5285 -I00 -ssS'properties' -p5286 -(dp5287 -S'default_value' -p5288 -(dp5289 -S'editable' -p5290 -I00 -sS'value' -p5291 -NssS'summary_default' -p5292 -(dp5293 -S'editable' -p5294 -I00 -sS'value' -p5295 -S'none' -p5296 -sssS'description' -p5297 -(dp5298 -S'editable' -p5299 -I01 -sS'value' -p5300 -g47 -sssS'id' -p5301 -(dp5302 -S'mandatory' -p5303 -(dp5304 -S'editable' -p5305 -I00 -sS'value' -p5306 -I00 -ssS'name' -p5307 -(dp5308 -S'editable' -p5309 -I01 -sS'value' -p5310 -S'Id' -p5311 -ssS'data_type' -p5312 -(dp5313 -S'editable' -p5314 -I00 -sS'value' -p5315 -S'number' -p5316 -ssS'entity_type' -p5317 -(dp5318 -S'editable' -p5319 -I00 -sS'value' -p5320 -S'Attachment' -p5321 -ssS'editable' -p5322 -(dp5323 -S'editable' -p5324 -I00 -sS'value' -p5325 -I00 -ssS'unique' -p5326 -(dp5327 -S'editable' -p5328 -I00 -sS'value' -p5329 -I00 -ssS'properties' -p5330 -(dp5331 -S'default_value' -p5332 -(dp5333 -S'editable' -p5334 -I00 -sS'value' -p5335 -NssS'summary_default' -p5336 -(dp5337 -S'editable' -p5338 -I01 -sS'value' -p5339 -S'none' -p5340 -sssS'description' -p5341 -(dp5342 -S'editable' -p5343 -I01 -sS'value' -p5344 -g47 -sssS'updated_by' -p5345 -(dp5346 -S'mandatory' -p5347 -(dp5348 -S'editable' -p5349 -I00 -sS'value' -p5350 -I00 -ssS'name' -p5351 -(dp5352 -S'editable' -p5353 -I01 -sS'value' -p5354 -S'Updated by' -p5355 -ssS'data_type' -p5356 -(dp5357 -S'editable' -p5358 -I00 -sS'value' -p5359 -S'entity' -p5360 -ssS'entity_type' -p5361 -(dp5362 -S'editable' -p5363 -I00 -sS'value' -p5364 -S'Attachment' -p5365 -ssS'editable' -p5366 -(dp5367 -S'editable' -p5368 -I00 -sS'value' -p5369 -I00 -ssS'unique' -p5370 -(dp5371 -S'editable' -p5372 -I00 -sS'value' -p5373 -I00 -ssS'properties' -p5374 -(dp5375 -S'default_value' -p5376 -(dp5377 -S'editable' -p5378 -I00 -sS'value' -p5379 -NssS'summary_default' -p5380 -(dp5381 -S'editable' -p5382 -I01 -sS'value' -p5383 -S'none' -p5384 -ssS'valid_types' -p5385 -(dp5386 -S'editable' -p5387 -I01 -sS'value' -p5388 -(lp5389 -S'HumanUser' -p5390 -aS'ApiUser' -p5391 -asssS'description' -p5392 -(dp5393 -S'editable' -p5394 -I01 -sS'value' -p5395 -g47 -sssS'queue_for_s3_upload' -p5396 -(dp5397 -S'mandatory' -p5398 -(dp5399 -S'editable' -p5400 -I00 -sS'value' -p5401 -I00 -ssS'name' -p5402 -(dp5403 -S'editable' -p5404 -I01 -sS'value' -p5405 -S'Queue for S3 Upload' -p5406 -ssS'data_type' -p5407 -(dp5408 -S'editable' -p5409 -I00 -sS'value' -p5410 -S'checkbox' -p5411 -ssS'entity_type' -p5412 -(dp5413 -S'editable' -p5414 -I00 -sS'value' -p5415 -S'Attachment' -p5416 -ssS'editable' -p5417 -(dp5418 -S'editable' -p5419 -I00 -sS'value' -p5420 -I00 -ssS'unique' -p5421 -(dp5422 -S'editable' -p5423 -I00 -sS'value' -p5424 -I00 -ssS'properties' -p5425 -(dp5426 -S'default_value' -p5427 -(dp5428 -S'editable' -p5429 -I00 -sS'value' -p5430 -I0 -ssS'summary_default' -p5431 -(dp5432 -S'editable' -p5433 -I01 -sS'value' -p5434 -S'none' -p5435 -sssS'description' -p5436 -(dp5437 -S'editable' -p5438 -I01 -sS'value' -p5439 -g47 -sssS'display_name' -p5440 -(dp5441 -S'mandatory' -p5442 -(dp5443 -S'editable' -p5444 -I00 -sS'value' -p5445 -I00 -ssS'name' -p5446 -(dp5447 -S'editable' -p5448 -I01 -sS'value' -p5449 -S'File Display Name' -p5450 -ssS'data_type' -p5451 -(dp5452 -S'editable' -p5453 -I00 -sS'value' -p5454 -S'text' -p5455 -ssS'entity_type' -p5456 -(dp5457 -S'editable' -p5458 -I00 -sS'value' -p5459 -S'Attachment' -p5460 -ssS'editable' -p5461 -(dp5462 -S'editable' -p5463 -I00 -sS'value' -p5464 -I01 -ssS'unique' -p5465 -(dp5466 -S'editable' -p5467 -I00 -sS'value' -p5468 -I00 -ssS'properties' -p5469 -(dp5470 -S'default_value' -p5471 -(dp5472 -S'editable' -p5473 -I00 -sS'value' -p5474 -NssS'summary_default' -p5475 -(dp5476 -S'editable' -p5477 -I01 -sS'value' -p5478 -S'none' -p5479 -sssS'description' -p5480 -(dp5481 -S'editable' -p5482 -I01 -sS'value' -p5483 -g47 -sssS'image' -p5484 -(dp5485 -S'mandatory' -p5486 -(dp5487 -S'editable' -p5488 -I00 -sS'value' -p5489 -I00 -ssS'name' -p5490 -(dp5491 -S'editable' -p5492 -I01 -sS'value' -p5493 -S'Thumbnail' -p5494 -ssS'data_type' -p5495 -(dp5496 -S'editable' -p5497 -I00 -sS'value' -p5498 -S'image' -p5499 -ssS'entity_type' -p5500 -(dp5501 -S'editable' -p5502 -I00 -sS'value' -p5503 -S'Attachment' -p5504 -ssS'editable' -p5505 -(dp5506 -S'editable' -p5507 -I00 -sS'value' -p5508 -I01 -ssS'unique' -p5509 -(dp5510 -S'editable' -p5511 -I00 -sS'value' -p5512 -I00 -ssS'properties' -p5513 -(dp5514 -S'default_value' -p5515 -(dp5516 -S'editable' -p5517 -I00 -sS'value' -p5518 -NssS'summary_default' -p5519 -(dp5520 -S'editable' -p5521 -I01 -sS'value' -p5522 -S'none' -p5523 -sssS'description' -p5524 -(dp5525 -S'editable' -p5526 -I01 -sS'value' -p5527 -g47 -sssS'task_template' -p5528 -(dp5529 -S'mandatory' -p5530 -(dp5531 -S'editable' -p5532 -I00 -sS'value' -p5533 -I00 -ssS'name' -p5534 -(dp5535 -S'editable' -p5536 -I01 -sS'value' -p5537 -S'Task Template' -p5538 -ssS'data_type' -p5539 -(dp5540 -S'editable' -p5541 -I00 -sS'value' -p5542 -S'entity' -p5543 -ssS'entity_type' -p5544 -(dp5545 -S'editable' -p5546 -I00 -sS'value' -p5547 -S'Attachment' -p5548 -ssS'editable' -p5549 -(dp5550 -S'editable' -p5551 -I00 -sS'value' -p5552 -I01 -ssS'unique' -p5553 -(dp5554 -S'editable' -p5555 -I00 -sS'value' -p5556 -I00 -ssS'properties' -p5557 -(dp5558 -S'default_value' -p5559 -(dp5560 -S'editable' -p5561 -I00 -sS'value' -p5562 -NssS'summary_default' -p5563 -(dp5564 -S'editable' -p5565 -I01 -sS'value' -p5566 -S'none' -p5567 -ssS'valid_types' -p5568 -(dp5569 -S'editable' -p5570 -I01 -sS'value' -p5571 -(lp5572 -S'TaskTemplate' -p5573 -asssS'description' -p5574 -(dp5575 -S'editable' -p5576 -I01 -sS'value' -p5577 -g47 -sssS'created_by' -p5578 -(dp5579 -S'mandatory' -p5580 -(dp5581 -S'editable' -p5582 -I00 -sS'value' -p5583 -I00 -ssS'name' -p5584 -(dp5585 -S'editable' -p5586 -I01 -sS'value' -p5587 -S'Created by' -p5588 -ssS'data_type' -p5589 -(dp5590 -S'editable' -p5591 -I00 -sS'value' -p5592 -S'entity' -p5593 -ssS'entity_type' -p5594 -(dp5595 -S'editable' -p5596 -I00 -sS'value' -p5597 -S'Attachment' -p5598 -ssS'editable' -p5599 -(dp5600 -S'editable' -p5601 -I00 -sS'value' -p5602 -I00 -ssS'unique' -p5603 -(dp5604 -S'editable' -p5605 -I00 -sS'value' -p5606 -I00 -ssS'properties' -p5607 -(dp5608 -S'default_value' -p5609 -(dp5610 -S'editable' -p5611 -I00 -sS'value' -p5612 -NssS'summary_default' -p5613 -(dp5614 -S'editable' -p5615 -I01 -sS'value' -p5616 -S'none' -p5617 -ssS'valid_types' -p5618 -(dp5619 -S'editable' -p5620 -I01 -sS'value' -p5621 -(lp5622 -S'HumanUser' -p5623 -aS'ApiUser' -p5624 -asssS'description' -p5625 -(dp5626 -S'editable' -p5627 -I01 -sS'value' -p5628 -g47 -sssS'filename' -p5629 -(dp5630 -S'mandatory' -p5631 -(dp5632 -S'editable' -p5633 -I00 -sS'value' -p5634 -I00 -ssS'name' -p5635 -(dp5636 -S'editable' -p5637 -I01 -sS'value' -p5638 -S'File Name' -p5639 -ssS'data_type' -p5640 -(dp5641 -S'editable' -p5642 -I00 -sS'value' -p5643 -S'text' -p5644 -ssS'entity_type' -p5645 -(dp5646 -S'editable' -p5647 -I00 -sS'value' -p5648 -S'Attachment' -p5649 -ssS'editable' -p5650 -(dp5651 -S'editable' -p5652 -I00 -sS'value' -p5653 -I00 -ssS'unique' -p5654 -(dp5655 -S'editable' -p5656 -I00 -sS'value' -p5657 -I00 -ssS'properties' -p5658 -(dp5659 -S'default_value' -p5660 -(dp5661 -S'editable' -p5662 -I00 -sS'value' -p5663 -NssS'summary_default' -p5664 -(dp5665 -S'editable' -p5666 -I01 -sS'value' -p5667 -S'none' -p5668 -sssS'description' -p5669 -(dp5670 -S'editable' -p5671 -I01 -sS'value' -p5672 -g47 -sssS'sg_status_list' -p5673 -(dp5674 -S'mandatory' -p5675 -(dp5676 -S'editable' -p5677 -I00 -sS'value' -p5678 -I00 -ssS'name' -p5679 -(dp5680 -S'editable' -p5681 -I01 -sS'value' -p5682 -S'Status' -p5683 -ssS'data_type' -p5684 -(dp5685 -S'editable' -p5686 -I00 -sS'value' -p5687 -S'status_list' -p5688 -ssS'entity_type' -p5689 -(dp5690 -S'editable' -p5691 -I00 -sS'value' -p5692 -S'Attachment' -p5693 -ssS'editable' -p5694 -(dp5695 -S'editable' -p5696 -I00 -sS'value' -p5697 -I01 -ssS'unique' -p5698 -(dp5699 -S'editable' -p5700 -I00 -sS'value' -p5701 -I00 -ssS'properties' -p5702 -(dp5703 -S'default_value' -p5704 -(dp5705 -S'editable' -p5706 -I01 -sS'value' -p5707 -S'na' -p5708 -ssS'valid_values' -p5709 -(dp5710 -S'editable' -p5711 -I01 -sS'value' -p5712 -(lp5713 -S'fin' -p5714 -aS'na' -p5715 -assS'summary_default' -p5716 -(dp5717 -S'editable' -p5718 -I01 -sS'value' -p5719 -S'status_list' -p5720 -sssS'description' -p5721 -(dp5722 -S'editable' -p5723 -I01 -sS'value' -p5724 -g47 -sssS'attachment_links' -p5725 -(dp5726 -S'mandatory' -p5727 -(dp5728 -S'editable' -p5729 -I00 -sS'value' -p5730 -I00 -ssS'name' -p5731 -(dp5732 -S'editable' -p5733 -I01 -sS'value' -p5734 -S'Links' -p5735 -ssS'data_type' -p5736 -(dp5737 -S'editable' -p5738 -I00 -sS'value' -p5739 -S'multi_entity' -p5740 -ssS'entity_type' -p5741 -(dp5742 -S'editable' -p5743 -I00 -sS'value' -p5744 -S'Attachment' -p5745 -ssS'editable' -p5746 -(dp5747 -S'editable' -p5748 -I00 -sS'value' -p5749 -I01 -ssS'unique' -p5750 -(dp5751 -S'editable' -p5752 -I00 -sS'value' -p5753 -I00 -ssS'properties' -p5754 -(dp5755 -S'default_value' -p5756 -(dp5757 -S'editable' -p5758 -I00 -sS'value' -p5759 -NssS'summary_default' -p5760 -(dp5761 -S'editable' -p5762 -I01 -sS'value' -p5763 -S'none' -p5764 -ssS'valid_types' -p5765 -(dp5766 -S'editable' -p5767 -I00 -sS'value' -p5768 -(lp5769 -S'Asset' -p5770 -aS'Scene' -p5771 -aS'Sequence' -p5772 -aS'Shot' -p5773 -aS'Version' -p5774 -asssS'description' -p5775 -(dp5776 -S'editable' -p5777 -I01 -sS'value' -p5778 -g47 -sssS'description' -p5779 -(dp5780 -S'mandatory' -p5781 -(dp5782 -S'editable' -p5783 -I00 -sS'value' -p5784 -I00 -ssS'name' -p5785 -(dp5786 -S'editable' -p5787 -I01 -sS'value' -p5788 -S'Description' -p5789 -ssS'data_type' -p5790 -(dp5791 -S'editable' -p5792 -I00 -sS'value' -p5793 -S'text' -p5794 -ssS'entity_type' -p5795 -(dp5796 -S'editable' -p5797 -I00 -sS'value' -p5798 -S'Attachment' -p5799 -ssS'editable' -p5800 -(dp5801 -S'editable' -p5802 -I00 -sS'value' -p5803 -I01 -ssS'unique' -p5804 -(dp5805 -S'editable' -p5806 -I00 -sS'value' -p5807 -I00 -ssS'properties' -p5808 -(dp5809 -S'default_value' -p5810 -(dp5811 -S'editable' -p5812 -I00 -sS'value' -p5813 -NssS'summary_default' -p5814 -(dp5815 -S'editable' -p5816 -I01 -sS'value' -p5817 -S'none' -p5818 -sssS'description' -p5819 -(dp5820 -S'editable' -p5821 -I01 -sS'value' -p5822 -g47 -sssS'local_storage' -p5823 -(dp5824 -S'mandatory' -p5825 -(dp5826 -S'editable' -p5827 -I00 -sS'value' -p5828 -I00 -ssS'name' -p5829 -(dp5830 -S'editable' -p5831 -I01 -sS'value' -p5832 -S'Local File Storage' -p5833 -ssS'data_type' -p5834 -(dp5835 -S'editable' -p5836 -I00 -sS'value' -p5837 -S'entity' -p5838 -ssS'entity_type' -p5839 -(dp5840 -S'editable' -p5841 -I00 -sS'value' -p5842 -S'Attachment' -p5843 -ssS'editable' -p5844 -(dp5845 -S'editable' -p5846 -I00 -sS'value' -p5847 -I00 -ssS'unique' -p5848 -(dp5849 -S'editable' -p5850 -I00 -sS'value' -p5851 -I00 -ssS'properties' -p5852 -(dp5853 -S'default_value' -p5854 -(dp5855 -S'editable' -p5856 -I00 -sS'value' -p5857 -NssS'summary_default' -p5858 -(dp5859 -S'editable' -p5860 -I00 -sS'value' -p5861 -S'none' -p5862 -ssS'valid_types' -p5863 -(dp5864 -S'editable' -p5865 -I00 -sS'value' -p5866 -(lp5867 -S'LocalStorage' -p5868 -asssS'description' -p5869 -(dp5870 -S'editable' -p5871 -I01 -sS'value' -p5872 -g47 -sssS'open_notes' -p5873 -(dp5874 -S'mandatory' -p5875 -(dp5876 -S'editable' -p5877 -I00 -sS'value' -p5878 -I00 -ssS'name' -p5879 -(dp5880 -S'editable' -p5881 -I01 -sS'value' -p5882 -S'Open Notes' -p5883 -ssS'data_type' -p5884 -(dp5885 -S'editable' -p5886 -I00 -sS'value' -p5887 -S'multi_entity' -p5888 -ssS'entity_type' -p5889 -(dp5890 -S'editable' -p5891 -I00 -sS'value' -p5892 -S'Attachment' -p5893 -ssS'editable' -p5894 -(dp5895 -S'editable' -p5896 -I00 -sS'value' -p5897 -I00 -ssS'unique' -p5898 -(dp5899 -S'editable' -p5900 -I00 -sS'value' -p5901 -I00 -ssS'properties' -p5902 -(dp5903 -S'default_value' -p5904 -(dp5905 -S'editable' -p5906 -I00 -sS'value' -p5907 -NssS'summary_default' -p5908 -(dp5909 -S'editable' -p5910 -I01 -sS'value' -p5911 -S'none' -p5912 -ssS'valid_types' -p5913 -(dp5914 -S'editable' -p5915 -I01 -sS'value' -p5916 -(lp5917 -S'Note' -p5918 -asssS'description' -p5919 -(dp5920 -S'editable' -p5921 -I01 -sS'value' -p5922 -g47 -sssS'step_0' -p5923 -(dp5924 -S'mandatory' -p5925 -(dp5926 -S'editable' -p5927 -I00 -sS'value' -p5928 -I00 -ssS'name' -p5929 -(dp5930 -S'editable' -p5931 -I01 -sS'value' -p5932 -S'ALL TASKS' -p5933 -ssS'data_type' -p5934 -(dp5935 -S'editable' -p5936 -I00 -sS'value' -p5937 -S'pivot_column' -p5938 -ssS'entity_type' -p5939 -(dp5940 -S'editable' -p5941 -I00 -sS'value' -p5942 -S'Attachment' -p5943 -ssS'editable' -p5944 -(dp5945 -S'editable' -p5946 -I00 -sS'value' -p5947 -I00 -ssS'unique' -p5948 -(dp5949 -S'editable' -p5950 -I00 -sS'value' -p5951 -I00 -ssS'properties' -p5952 -(dp5953 -S'default_value' -p5954 -(dp5955 -S'editable' -p5956 -I00 -sS'value' -p5957 -NssS'summary_default' -p5958 -(dp5959 -S'editable' -p5960 -I00 -sS'value' -p5961 -S'none' -p5962 -sssS'description' -p5963 -(dp5964 -S'editable' -p5965 -I01 -sS'value' -p5966 -g47 -sssS'created_at' -p5967 -(dp5968 -S'mandatory' -p5969 -(dp5970 -S'editable' -p5971 -I00 -sS'value' -p5972 -I00 -ssS'name' -p5973 -(dp5974 -S'editable' -p5975 -I01 -sS'value' -p5976 -S'Date Created' -p5977 -ssS'data_type' -p5978 -(dp5979 -S'editable' -p5980 -I00 -sS'value' -p5981 -S'date_time' -p5982 -ssS'entity_type' -p5983 -(dp5984 -S'editable' -p5985 -I00 -sS'value' -p5986 -S'Attachment' -p5987 -ssS'editable' -p5988 -(dp5989 -S'editable' -p5990 -I00 -sS'value' -p5991 -I00 -ssS'unique' -p5992 -(dp5993 -S'editable' -p5994 -I00 -sS'value' -p5995 -I00 -ssS'properties' -p5996 -(dp5997 -S'default_value' -p5998 -(dp5999 -S'editable' -p6000 -I00 -sS'value' -p6001 -NssS'summary_default' -p6002 -(dp6003 -S'editable' -p6004 -I01 -sS'value' -p6005 -S'none' -p6006 -sssS'description' -p6007 -(dp6008 -S'editable' -p6009 -I01 -sS'value' -p6010 -g47 -sssS'project' -p6011 -(dp6012 -S'mandatory' -p6013 -(dp6014 -S'editable' -p6015 -I00 -sS'value' -p6016 -I00 -ssS'name' -p6017 -(dp6018 -S'editable' -p6019 -I01 -sS'value' -p6020 -S'Project' -p6021 -ssS'data_type' -p6022 -(dp6023 -S'editable' -p6024 -I00 -sS'value' -p6025 -S'entity' -p6026 -ssS'entity_type' -p6027 -(dp6028 -S'editable' -p6029 -I00 -sS'value' -p6030 -S'Attachment' -p6031 -ssS'editable' -p6032 -(dp6033 -S'editable' -p6034 -I00 -sS'value' -p6035 -I01 -ssS'unique' -p6036 -(dp6037 -S'editable' -p6038 -I00 -sS'value' -p6039 -I00 -ssS'properties' -p6040 -(dp6041 -S'default_value' -p6042 -(dp6043 -S'editable' -p6044 -I00 -sS'value' -p6045 -NssS'summary_default' -p6046 -(dp6047 -S'editable' -p6048 -I01 -sS'value' -p6049 -S'none' -p6050 -ssS'valid_types' -p6051 -(dp6052 -S'editable' -p6053 -I01 -sS'value' -p6054 -(lp6055 -S'Project' -p6056 -asssS'description' -p6057 -(dp6058 -S'editable' -p6059 -I01 -sS'value' -p6060 -g47 -sssS'filmstrip_image' -p6061 -(dp6062 -S'mandatory' -p6063 -(dp6064 -S'editable' -p6065 -I00 -sS'value' -p6066 -I00 -ssS'name' -p6067 -(dp6068 -S'editable' -p6069 -I01 -sS'value' -p6070 -S'Filmstrip Thumbnail' -p6071 -ssS'data_type' -p6072 -(dp6073 -S'editable' -p6074 -I00 -sS'value' -p6075 -S'image' -p6076 -ssS'entity_type' -p6077 -(dp6078 -S'editable' -p6079 -I00 -sS'value' -p6080 -S'Attachment' -p6081 -ssS'editable' -p6082 -(dp6083 -S'editable' -p6084 -I00 -sS'value' -p6085 -I01 -ssS'unique' -p6086 -(dp6087 -S'editable' -p6088 -I00 -sS'value' -p6089 -I00 -ssS'properties' -p6090 -(dp6091 -S'default_value' -p6092 -(dp6093 -S'editable' -p6094 -I00 -sS'value' -p6095 -NssS'summary_default' -p6096 -(dp6097 -S'editable' -p6098 -I01 -sS'value' -p6099 -S'none' -p6100 -sssS'description' -p6101 -(dp6102 -S'editable' -p6103 -I01 -sS'value' -p6104 -g47 -sssS'this_file' -p6105 -(dp6106 -S'mandatory' -p6107 -(dp6108 -S'editable' -p6109 -I00 -sS'value' -p6110 -I01 -ssS'name' -p6111 -(dp6112 -S'editable' -p6113 -I01 -sS'value' -p6114 -S'File' -p6115 -ssS'data_type' -p6116 -(dp6117 -S'editable' -p6118 -I00 -sS'value' -p6119 -S'url' -p6120 -ssS'entity_type' -p6121 -(dp6122 -S'editable' -p6123 -I00 -sS'value' -p6124 -S'Attachment' -p6125 -ssS'editable' -p6126 -(dp6127 -S'editable' -p6128 -I00 -sS'value' -p6129 -I00 -ssS'unique' -p6130 -(dp6131 -S'editable' -p6132 -I00 -sS'value' -p6133 -I00 -ssS'properties' -p6134 -(dp6135 -S'default_value' -p6136 -(dp6137 -S'editable' -p6138 -I00 -sS'value' -p6139 -NssS'open_in_new_window' -p6140 -(dp6141 -S'editable' -p6142 -I01 -sS'value' -p6143 -I01 -ssS'summary_default' -p6144 -(dp6145 -S'editable' -p6146 -I01 -sS'value' -p6147 -S'none' -p6148 -sssS'description' -p6149 -(dp6150 -S'editable' -p6151 -I01 -sS'value' -p6152 -g47 -sssS'sg_type' -p6153 -(dp6154 -S'mandatory' -p6155 -(dp6156 -S'editable' -p6157 -I00 -sS'value' -p6158 -I00 -ssS'name' -p6159 -(dp6160 -S'editable' -p6161 -I01 -sS'value' -p6162 -S'Type' -p6163 -ssS'data_type' -p6164 -(dp6165 -S'editable' -p6166 -I00 -sS'value' -p6167 -S'text' -p6168 -ssS'entity_type' -p6169 -(dp6170 -S'editable' -p6171 -I00 -sS'value' -p6172 -S'Attachment' -p6173 -ssS'editable' -p6174 -(dp6175 -S'editable' -p6176 -I00 -sS'value' -p6177 -I01 -ssS'unique' -p6178 -(dp6179 -S'editable' -p6180 -I00 -sS'value' -p6181 -I00 -ssS'properties' -p6182 -(dp6183 -S'default_value' -p6184 -(dp6185 -S'editable' -p6186 -I00 -sS'value' -p6187 -NssS'summary_default' -p6188 -(dp6189 -S'editable' -p6190 -I01 -sS'value' -p6191 -S'none' -p6192 -sssS'description' -p6193 -(dp6194 -S'editable' -p6195 -I01 -sS'value' -p6196 -g47 -sssS'tag_list' -p6197 -(dp6198 -S'mandatory' -p6199 -(dp6200 -S'editable' -p6201 -I00 -sS'value' -p6202 -I00 -ssS'name' -p6203 -(dp6204 -S'editable' -p6205 -I01 -sS'value' -p6206 -S'Tags' -p6207 -ssS'data_type' -p6208 -(dp6209 -S'editable' -p6210 -I00 -sS'value' -p6211 -S'tag_list' -p6212 -ssS'entity_type' -p6213 -(dp6214 -S'editable' -p6215 -I00 -sS'value' -p6216 -S'Attachment' -p6217 -ssS'editable' -p6218 -(dp6219 -S'editable' -p6220 -I00 -sS'value' -p6221 -I01 -ssS'unique' -p6222 -(dp6223 -S'editable' -p6224 -I00 -sS'value' -p6225 -I00 -ssS'properties' -p6226 -(dp6227 -S'default_value' -p6228 -(dp6229 -S'editable' -p6230 -I00 -sS'value' -p6231 -NssS'summary_default' -p6232 -(dp6233 -S'editable' -p6234 -I01 -sS'value' -p6235 -S'none' -p6236 -ssS'valid_types' -p6237 -(dp6238 -S'editable' -p6239 -I01 -sS'value' -p6240 -(lp6241 -S'Tag' -p6242 -asssS'description' -p6243 -(dp6244 -S'editable' -p6245 -I01 -sS'value' -p6246 -g47 -sssS'notes' -p6247 -(dp6248 -S'mandatory' -p6249 -(dp6250 -S'editable' -p6251 -I00 -sS'value' -p6252 -I00 -ssS'name' -p6253 -(dp6254 -S'editable' -p6255 -I01 -sS'value' -p6256 -S'Notes' -p6257 -ssS'data_type' -p6258 -(dp6259 -S'editable' -p6260 -I00 -sS'value' -p6261 -S'multi_entity' -p6262 -ssS'entity_type' -p6263 -(dp6264 -S'editable' -p6265 -I00 -sS'value' -p6266 -S'Attachment' -p6267 -ssS'editable' -p6268 -(dp6269 -S'editable' -p6270 -I00 -sS'value' -p6271 -I01 -ssS'unique' -p6272 -(dp6273 -S'editable' -p6274 -I00 -sS'value' -p6275 -I00 -ssS'properties' -p6276 -(dp6277 -S'default_value' -p6278 -(dp6279 -S'editable' -p6280 -I00 -sS'value' -p6281 -NssS'summary_default' -p6282 -(dp6283 -S'editable' -p6284 -I01 -sS'value' -p6285 -S'none' -p6286 -ssS'valid_types' -p6287 -(dp6288 -S'editable' -p6289 -I01 -sS'value' -p6290 -(lp6291 -S'Note' -p6292 -asssS'description' -p6293 -(dp6294 -S'editable' -p6295 -I01 -sS'value' -p6296 -g47 -ssssS'AssetMocapTakeConnection' -p6297 -(dp6298 -S'mocap_take' -p6299 -(dp6300 -S'mandatory' -p6301 -(dp6302 -S'editable' -p6303 -I00 -sS'value' -p6304 -I00 -ssS'name' -p6305 -(dp6306 -S'editable' -p6307 -I01 -sS'value' -p6308 -S'Mocap Take' -p6309 -ssS'data_type' -p6310 -(dp6311 -S'editable' -p6312 -I00 -sS'value' -p6313 -S'entity' -p6314 -ssS'entity_type' -p6315 -(dp6316 -S'editable' -p6317 -I00 -sS'value' -p6318 -S'AssetMocapTakeConnection' -p6319 -ssS'editable' -p6320 -(dp6321 -S'editable' -p6322 -I00 -sS'value' -p6323 -I00 -ssS'unique' -p6324 -(dp6325 -S'editable' -p6326 -I00 -sS'value' -p6327 -I00 -ssS'properties' -p6328 -(dp6329 -S'default_value' -p6330 -(dp6331 -S'editable' -p6332 -I00 -sS'value' -p6333 -NssS'summary_default' -p6334 -(dp6335 -S'editable' -p6336 -I00 -sS'value' -p6337 -S'none' -p6338 -ssS'valid_types' -p6339 -(dp6340 -S'editable' -p6341 -I00 -sS'value' -p6342 -(lp6343 -S'MocapTake' -p6344 -asssS'description' -p6345 -(dp6346 -S'editable' -p6347 -I01 -sS'value' -p6348 -g47 -sssS'cached_display_name' -p6349 -(dp6350 -S'mandatory' -p6351 -(dp6352 -S'editable' -p6353 -I00 -sS'value' -p6354 -I00 -ssS'name' -p6355 -(dp6356 -S'editable' -p6357 -I01 -sS'value' -p6358 -S'Cached Display Name' -p6359 -ssS'data_type' -p6360 -(dp6361 -S'editable' -p6362 -I00 -sS'value' -p6363 -S'text' -p6364 -ssS'entity_type' -p6365 -(dp6366 -S'editable' -p6367 -I00 -sS'value' -p6368 -S'AssetMocapTakeConnection' -p6369 -ssS'editable' -p6370 -(dp6371 -S'editable' -p6372 -I00 -sS'value' -p6373 -I01 -ssS'unique' -p6374 -(dp6375 -S'editable' -p6376 -I00 -sS'value' -p6377 -I00 -ssS'properties' -p6378 -(dp6379 -S'default_value' -p6380 -(dp6381 -S'editable' -p6382 -I00 -sS'value' -p6383 -NssS'summary_default' -p6384 -(dp6385 -S'editable' -p6386 -I00 -sS'value' -p6387 -S'none' -p6388 -sssS'description' -p6389 -(dp6390 -S'editable' -p6391 -I01 -sS'value' -p6392 -g47 -sssS'asset' -p6393 -(dp6394 -S'mandatory' -p6395 -(dp6396 -S'editable' -p6397 -I00 -sS'value' -p6398 -I00 -ssS'name' -p6399 -(dp6400 -S'editable' -p6401 -I01 -sS'value' -p6402 -S'Asset' -p6403 -ssS'data_type' -p6404 -(dp6405 -S'editable' -p6406 -I00 -sS'value' -p6407 -S'entity' -p6408 -ssS'entity_type' -p6409 -(dp6410 -S'editable' -p6411 -I00 -sS'value' -p6412 -S'AssetMocapTakeConnection' -p6413 -ssS'editable' -p6414 -(dp6415 -S'editable' -p6416 -I00 -sS'value' -p6417 -I00 -ssS'unique' -p6418 -(dp6419 -S'editable' -p6420 -I00 -sS'value' -p6421 -I00 -ssS'properties' -p6422 -(dp6423 -S'default_value' -p6424 -(dp6425 -S'editable' -p6426 -I00 -sS'value' -p6427 -NssS'summary_default' -p6428 -(dp6429 -S'editable' -p6430 -I00 -sS'value' -p6431 -S'none' -p6432 -ssS'valid_types' -p6433 -(dp6434 -S'editable' -p6435 -I00 -sS'value' -p6436 -(lp6437 -S'Asset' -p6438 -asssS'description' -p6439 -(dp6440 -S'editable' -p6441 -I01 -sS'value' -p6442 -g47 -sssS'id' -p6443 -(dp6444 -S'mandatory' -p6445 -(dp6446 -S'editable' -p6447 -I00 -sS'value' -p6448 -I01 -ssS'name' -p6449 -(dp6450 -S'editable' -p6451 -I01 -sS'value' -p6452 -S'Id' -p6453 -ssS'data_type' -p6454 -(dp6455 -S'editable' -p6456 -I00 -sS'value' -p6457 -S'number' -p6458 -ssS'entity_type' -p6459 -(dp6460 -S'editable' -p6461 -I00 -sS'value' -p6462 -S'AssetMocapTakeConnection' -p6463 -ssS'editable' -p6464 -(dp6465 -S'editable' -p6466 -I00 -sS'value' -p6467 -I00 -ssS'unique' -p6468 -(dp6469 -S'editable' -p6470 -I00 -sS'value' -p6471 -I00 -ssS'properties' -p6472 -(dp6473 -S'default_value' -p6474 -(dp6475 -S'editable' -p6476 -I00 -sS'value' -p6477 -NssS'summary_default' -p6478 -(dp6479 -S'editable' -p6480 -I00 -sS'value' -p6481 -S'none' -p6482 -sssS'description' -p6483 -(dp6484 -S'editable' -p6485 -I01 -sS'value' -p6486 -g47 -ssssS'Department' -p6487 -(dp6488 -S'open_notes_count' -p6489 -(dp6490 -S'mandatory' -p6491 -(dp6492 -S'editable' -p6493 -I00 -sS'value' -p6494 -I00 -ssS'name' -p6495 -(dp6496 -S'editable' -p6497 -I01 -sS'value' -p6498 -S'Open Notes Count' -p6499 -ssS'data_type' -p6500 -(dp6501 -S'editable' -p6502 -I00 -sS'value' -p6503 -S'text' -p6504 -ssS'entity_type' -p6505 -(dp6506 -S'editable' -p6507 -I00 -sS'value' -p6508 -S'Department' -p6509 -ssS'editable' -p6510 -(dp6511 -S'editable' -p6512 -I00 -sS'value' -p6513 -I00 -ssS'unique' -p6514 -(dp6515 -S'editable' -p6516 -I00 -sS'value' -p6517 -I00 -ssS'properties' -p6518 -(dp6519 -S'default_value' -p6520 -(dp6521 -S'editable' -p6522 -I00 -sS'value' -p6523 -NssS'summary_default' -p6524 -(dp6525 -S'editable' -p6526 -I01 -sS'value' -p6527 -S'none' -p6528 -sssS'description' -p6529 -(dp6530 -S'editable' -p6531 -I01 -sS'value' -p6532 -g47 -sssS'code' -p6533 -(dp6534 -S'mandatory' -p6535 -(dp6536 -S'editable' -p6537 -I00 -sS'value' -p6538 -I00 -ssS'name' -p6539 -(dp6540 -S'editable' -p6541 -I01 -sS'value' -p6542 -S'Department Short Name' -p6543 -ssS'data_type' -p6544 -(dp6545 -S'editable' -p6546 -I00 -sS'value' -p6547 -S'text' -p6548 -ssS'entity_type' -p6549 -(dp6550 -S'editable' -p6551 -I00 -sS'value' -p6552 -S'Department' -p6553 -ssS'editable' -p6554 -(dp6555 -S'editable' -p6556 -I00 -sS'value' -p6557 -I01 -ssS'unique' -p6558 -(dp6559 -S'editable' -p6560 -I00 -sS'value' -p6561 -I00 -ssS'properties' -p6562 -(dp6563 -S'default_value' -p6564 -(dp6565 -S'editable' -p6566 -I00 -sS'value' -p6567 -NssS'summary_default' -p6568 -(dp6569 -S'editable' -p6570 -I01 -sS'value' -p6571 -S'none' -p6572 -sssS'description' -p6573 -(dp6574 -S'editable' -p6575 -I01 -sS'value' -p6576 -g47 -sssS'open_notes' -p6577 -(dp6578 -S'mandatory' -p6579 -(dp6580 -S'editable' -p6581 -I00 -sS'value' -p6582 -I00 -ssS'name' -p6583 -(dp6584 -S'editable' -p6585 -I01 -sS'value' -p6586 -S'Open Notes' -p6587 -ssS'data_type' -p6588 -(dp6589 -S'editable' -p6590 -I00 -sS'value' -p6591 -S'multi_entity' -p6592 -ssS'entity_type' -p6593 -(dp6594 -S'editable' -p6595 -I00 -sS'value' -p6596 -S'Department' -p6597 -ssS'editable' -p6598 -(dp6599 -S'editable' -p6600 -I00 -sS'value' -p6601 -I00 -ssS'unique' -p6602 -(dp6603 -S'editable' -p6604 -I00 -sS'value' -p6605 -I00 -ssS'properties' -p6606 -(dp6607 -S'default_value' -p6608 -(dp6609 -S'editable' -p6610 -I00 -sS'value' -p6611 -NssS'summary_default' -p6612 -(dp6613 -S'editable' -p6614 -I01 -sS'value' -p6615 -S'none' -p6616 -ssS'valid_types' -p6617 -(dp6618 -S'editable' -p6619 -I01 -sS'value' -p6620 -(lp6621 -S'Note' -p6622 -asssS'description' -p6623 -(dp6624 -S'editable' -p6625 -I01 -sS'value' -p6626 -g47 -sssS'users' -p6627 -(dp6628 -S'mandatory' -p6629 -(dp6630 -S'editable' -p6631 -I00 -sS'value' -p6632 -I00 -ssS'name' -p6633 -(dp6634 -S'editable' -p6635 -I01 -sS'value' -p6636 -S'People' -p6637 -ssS'data_type' -p6638 -(dp6639 -S'editable' -p6640 -I00 -sS'value' -p6641 -S'multi_entity' -p6642 -ssS'entity_type' -p6643 -(dp6644 -S'editable' -p6645 -I00 -sS'value' -p6646 -S'Department' -p6647 -ssS'editable' -p6648 -(dp6649 -S'editable' -p6650 -I00 -sS'value' -p6651 -I01 -ssS'unique' -p6652 -(dp6653 -S'editable' -p6654 -I00 -sS'value' -p6655 -I00 -ssS'properties' -p6656 -(dp6657 -S'default_value' -p6658 -(dp6659 -S'editable' -p6660 -I00 -sS'value' -p6661 -NssS'summary_default' -p6662 -(dp6663 -S'editable' -p6664 -I01 -sS'value' -p6665 -S'none' -p6666 -ssS'valid_types' -p6667 -(dp6668 -S'editable' -p6669 -I01 -sS'value' -p6670 -(lp6671 -S'HumanUser' -p6672 -asssS'description' -p6673 -(dp6674 -S'editable' -p6675 -I01 -sS'value' -p6676 -g47 -sssS'list_order' -p6677 -(dp6678 -S'mandatory' -p6679 -(dp6680 -S'editable' -p6681 -I00 -sS'value' -p6682 -I00 -ssS'name' -p6683 -(dp6684 -S'editable' -p6685 -I01 -sS'value' -p6686 -S'Order' -p6687 -ssS'data_type' -p6688 -(dp6689 -S'editable' -p6690 -I00 -sS'value' -p6691 -S'number' -p6692 -ssS'entity_type' -p6693 -(dp6694 -S'editable' -p6695 -I00 -sS'value' -p6696 -S'Department' -p6697 -ssS'editable' -p6698 -(dp6699 -S'editable' -p6700 -I00 -sS'value' -p6701 -I01 -ssS'unique' -p6702 -(dp6703 -S'editable' -p6704 -I00 -sS'value' -p6705 -I00 -ssS'properties' -p6706 -(dp6707 -S'default_value' -p6708 -(dp6709 -S'editable' -p6710 -I00 -sS'value' -p6711 -NssS'summary_default' -p6712 -(dp6713 -S'editable' -p6714 -I00 -sS'value' -p6715 -S'none' -p6716 -sssS'description' -p6717 -(dp6718 -S'editable' -p6719 -I01 -sS'value' -p6720 -g47 -sssS'color' -p6721 -(dp6722 -S'mandatory' -p6723 -(dp6724 -S'editable' -p6725 -I00 -sS'value' -p6726 -I00 -ssS'name' -p6727 -(dp6728 -S'editable' -p6729 -I01 -sS'value' -p6730 -S'Color' -p6731 -ssS'data_type' -p6732 -(dp6733 -S'editable' -p6734 -I00 -sS'value' -p6735 -S'color' -p6736 -ssS'entity_type' -p6737 -(dp6738 -S'editable' -p6739 -I00 -sS'value' -p6740 -S'Department' -p6741 -ssS'editable' -p6742 -(dp6743 -S'editable' -p6744 -I00 -sS'value' -p6745 -I01 -ssS'unique' -p6746 -(dp6747 -S'editable' -p6748 -I00 -sS'value' -p6749 -I00 -ssS'properties' -p6750 -(dp6751 -S'default_value' -p6752 -(dp6753 -S'editable' -p6754 -I00 -sS'value' -p6755 -NssS'summary_default' -p6756 -(dp6757 -S'editable' -p6758 -I01 -sS'value' -p6759 -S'none' -p6760 -sssS'description' -p6761 -(dp6762 -S'editable' -p6763 -I01 -sS'value' -p6764 -g47 -sssS'created_at' -p6765 -(dp6766 -S'mandatory' -p6767 -(dp6768 -S'editable' -p6769 -I00 -sS'value' -p6770 -I00 -ssS'name' -p6771 -(dp6772 -S'editable' -p6773 -I01 -sS'value' -p6774 -S'Date Created' -p6775 -ssS'data_type' -p6776 -(dp6777 -S'editable' -p6778 -I00 -sS'value' -p6779 -S'date_time' -p6780 -ssS'entity_type' -p6781 -(dp6782 -S'editable' -p6783 -I00 -sS'value' -p6784 -S'Department' -p6785 -ssS'editable' -p6786 -(dp6787 -S'editable' -p6788 -I00 -sS'value' -p6789 -I00 -ssS'unique' -p6790 -(dp6791 -S'editable' -p6792 -I00 -sS'value' -p6793 -I00 -ssS'properties' -p6794 -(dp6795 -S'default_value' -p6796 -(dp6797 -S'editable' -p6798 -I00 -sS'value' -p6799 -NssS'summary_default' -p6800 -(dp6801 -S'editable' -p6802 -I01 -sS'value' -p6803 -S'none' -p6804 -sssS'description' -p6805 -(dp6806 -S'editable' -p6807 -I01 -sS'value' -p6808 -g47 -sssS'updated_at' -p6809 -(dp6810 -S'mandatory' -p6811 -(dp6812 -S'editable' -p6813 -I00 -sS'value' -p6814 -I00 -ssS'name' -p6815 -(dp6816 -S'editable' -p6817 -I01 -sS'value' -p6818 -S'Date Updated' -p6819 -ssS'data_type' -p6820 -(dp6821 -S'editable' -p6822 -I00 -sS'value' -p6823 -S'date_time' -p6824 -ssS'entity_type' -p6825 -(dp6826 -S'editable' -p6827 -I00 -sS'value' -p6828 -S'Department' -p6829 -ssS'editable' -p6830 -(dp6831 -S'editable' -p6832 -I00 -sS'value' -p6833 -I00 -ssS'unique' -p6834 -(dp6835 -S'editable' -p6836 -I00 -sS'value' -p6837 -I00 -ssS'properties' -p6838 -(dp6839 -S'default_value' -p6840 -(dp6841 -S'editable' -p6842 -I00 -sS'value' -p6843 -NssS'summary_default' -p6844 -(dp6845 -S'editable' -p6846 -I01 -sS'value' -p6847 -S'none' -p6848 -sssS'description' -p6849 -(dp6850 -S'editable' -p6851 -I01 -sS'value' -p6852 -g47 -sssS'created_by' -p6853 -(dp6854 -S'mandatory' -p6855 -(dp6856 -S'editable' -p6857 -I00 -sS'value' -p6858 -I00 -ssS'name' -p6859 -(dp6860 -S'editable' -p6861 -I01 -sS'value' -p6862 -S'Created by' -p6863 -ssS'data_type' -p6864 -(dp6865 -S'editable' -p6866 -I00 -sS'value' -p6867 -S'entity' -p6868 -ssS'entity_type' -p6869 -(dp6870 -S'editable' -p6871 -I00 -sS'value' -p6872 -S'Department' -p6873 -ssS'editable' -p6874 -(dp6875 -S'editable' -p6876 -I00 -sS'value' -p6877 -I00 -ssS'unique' -p6878 -(dp6879 -S'editable' -p6880 -I00 -sS'value' -p6881 -I00 -ssS'properties' -p6882 -(dp6883 -S'default_value' -p6884 -(dp6885 -S'editable' -p6886 -I00 -sS'value' -p6887 -NssS'summary_default' -p6888 -(dp6889 -S'editable' -p6890 -I01 -sS'value' -p6891 -S'none' -p6892 -ssS'valid_types' -p6893 -(dp6894 -S'editable' -p6895 -I01 -sS'value' -p6896 -(lp6897 -S'HumanUser' -p6898 -aS'ApiUser' -p6899 -asssS'description' -p6900 -(dp6901 -S'editable' -p6902 -I01 -sS'value' -p6903 -g47 -sssS'sg_status_list' -p6904 -(dp6905 -S'mandatory' -p6906 -(dp6907 -S'editable' -p6908 -I00 -sS'value' -p6909 -I00 -ssS'name' -p6910 -(dp6911 -S'editable' -p6912 -I01 -sS'value' -p6913 -S'Status' -p6914 -ssS'data_type' -p6915 -(dp6916 -S'editable' -p6917 -I00 -sS'value' -p6918 -S'status_list' -p6919 -ssS'entity_type' -p6920 -(dp6921 -S'editable' -p6922 -I00 -sS'value' -p6923 -S'Department' -p6924 -ssS'editable' -p6925 -(dp6926 -S'editable' -p6927 -I00 -sS'value' -p6928 -I01 -ssS'unique' -p6929 -(dp6930 -S'editable' -p6931 -I00 -sS'value' -p6932 -I00 -ssS'properties' -p6933 -(dp6934 -S'default_value' -p6935 -(dp6936 -S'editable' -p6937 -I01 -sS'value' -p6938 -S'act' -p6939 -ssS'valid_values' -p6940 -(dp6941 -S'editable' -p6942 -I01 -sS'value' -p6943 -(lp6944 -S'act' -p6945 -aS'dis' -p6946 -assS'summary_default' -p6947 -(dp6948 -S'editable' -p6949 -I01 -sS'value' -p6950 -S'none' -p6951 -sssS'description' -p6952 -(dp6953 -S'editable' -p6954 -I01 -sS'value' -p6955 -g47 -sssS'department_type' -p6956 -(dp6957 -S'mandatory' -p6958 -(dp6959 -S'editable' -p6960 -I00 -sS'value' -p6961 -I00 -ssS'name' -p6962 -(dp6963 -S'editable' -p6964 -I01 -sS'value' -p6965 -S'Department Type' -p6966 -ssS'data_type' -p6967 -(dp6968 -S'editable' -p6969 -I00 -sS'value' -p6970 -S'list' -p6971 -ssS'entity_type' -p6972 -(dp6973 -S'editable' -p6974 -I00 -sS'value' -p6975 -S'Department' -p6976 -ssS'editable' -p6977 -(dp6978 -S'editable' -p6979 -I00 -sS'value' -p6980 -I01 -ssS'unique' -p6981 -(dp6982 -S'editable' -p6983 -I00 -sS'value' -p6984 -I00 -ssS'properties' -p6985 -(dp6986 -S'default_value' -p6987 -(dp6988 -S'editable' -p6989 -I00 -sS'value' -p6990 -NssS'valid_values' -p6991 -(dp6992 -S'editable' -p6993 -I01 -sS'value' -p6994 -(lp6995 -ssS'summary_default' -p6996 -(dp6997 -S'editable' -p6998 -I01 -sS'value' -p6999 -S'none' -p7000 -sssS'description' -p7001 -(dp7002 -S'editable' -p7003 -I01 -sS'value' -p7004 -g47 -sssS'image' -p7005 -(dp7006 -S'mandatory' -p7007 -(dp7008 -S'editable' -p7009 -I00 -sS'value' -p7010 -I00 -ssS'name' -p7011 -(dp7012 -S'editable' -p7013 -I01 -sS'value' -p7014 -S'Thumbnail' -p7015 -ssS'data_type' -p7016 -(dp7017 -S'editable' -p7018 -I00 -sS'value' -p7019 -S'image' -p7020 -ssS'entity_type' -p7021 -(dp7022 -S'editable' -p7023 -I00 -sS'value' -p7024 -S'Department' -p7025 -ssS'editable' -p7026 -(dp7027 -S'editable' -p7028 -I00 -sS'value' -p7029 -I01 -ssS'unique' -p7030 -(dp7031 -S'editable' -p7032 -I00 -sS'value' -p7033 -I00 -ssS'properties' -p7034 -(dp7035 -S'default_value' -p7036 -(dp7037 -S'editable' -p7038 -I00 -sS'value' -p7039 -NssS'summary_default' -p7040 -(dp7041 -S'editable' -p7042 -I01 -sS'value' -p7043 -S'none' -p7044 -sssS'description' -p7045 -(dp7046 -S'editable' -p7047 -I01 -sS'value' -p7048 -g47 -sssS'updated_by' -p7049 -(dp7050 -S'mandatory' -p7051 -(dp7052 -S'editable' -p7053 -I00 -sS'value' -p7054 -I00 -ssS'name' -p7055 -(dp7056 -S'editable' -p7057 -I01 -sS'value' -p7058 -S'Updated by' -p7059 -ssS'data_type' -p7060 -(dp7061 -S'editable' -p7062 -I00 -sS'value' -p7063 -S'entity' -p7064 -ssS'entity_type' -p7065 -(dp7066 -S'editable' -p7067 -I00 -sS'value' -p7068 -S'Department' -p7069 -ssS'editable' -p7070 -(dp7071 -S'editable' -p7072 -I00 -sS'value' -p7073 -I00 -ssS'unique' -p7074 -(dp7075 -S'editable' -p7076 -I00 -sS'value' -p7077 -I00 -ssS'properties' -p7078 -(dp7079 -S'default_value' -p7080 -(dp7081 -S'editable' -p7082 -I00 -sS'value' -p7083 -NssS'summary_default' -p7084 -(dp7085 -S'editable' -p7086 -I01 -sS'value' -p7087 -S'none' -p7088 -ssS'valid_types' -p7089 -(dp7090 -S'editable' -p7091 -I01 -sS'value' -p7092 -(lp7093 -S'HumanUser' -p7094 -aS'ApiUser' -p7095 -asssS'description' -p7096 -(dp7097 -S'editable' -p7098 -I01 -sS'value' -p7099 -g47 -sssS'notes' -p7100 -(dp7101 -S'mandatory' -p7102 -(dp7103 -S'editable' -p7104 -I00 -sS'value' -p7105 -I00 -ssS'name' -p7106 -(dp7107 -S'editable' -p7108 -I01 -sS'value' -p7109 -S'Notes' -p7110 -ssS'data_type' -p7111 -(dp7112 -S'editable' -p7113 -I00 -sS'value' -p7114 -S'multi_entity' -p7115 -ssS'entity_type' -p7116 -(dp7117 -S'editable' -p7118 -I00 -sS'value' -p7119 -S'Department' -p7120 -ssS'editable' -p7121 -(dp7122 -S'editable' -p7123 -I00 -sS'value' -p7124 -I01 -ssS'unique' -p7125 -(dp7126 -S'editable' -p7127 -I00 -sS'value' -p7128 -I00 -ssS'properties' -p7129 -(dp7130 -S'default_value' -p7131 -(dp7132 -S'editable' -p7133 -I00 -sS'value' -p7134 -NssS'summary_default' -p7135 -(dp7136 -S'editable' -p7137 -I01 -sS'value' -p7138 -S'none' -p7139 -ssS'valid_types' -p7140 -(dp7141 -S'editable' -p7142 -I01 -sS'value' -p7143 -(lp7144 -S'Note' -p7145 -asssS'description' -p7146 -(dp7147 -S'editable' -p7148 -I01 -sS'value' -p7149 -g47 -sssS'cached_display_name' -p7150 -(dp7151 -S'mandatory' -p7152 -(dp7153 -S'editable' -p7154 -I00 -sS'value' -p7155 -I00 -ssS'name' -p7156 -(dp7157 -S'editable' -p7158 -I01 -sS'value' -p7159 -S'Cached Display Name' -p7160 -ssS'data_type' -p7161 -(dp7162 -S'editable' -p7163 -I00 -sS'value' -p7164 -S'text' -p7165 -ssS'entity_type' -p7166 -(dp7167 -S'editable' -p7168 -I00 -sS'value' -p7169 -S'Department' -p7170 -ssS'editable' -p7171 -(dp7172 -S'editable' -p7173 -I00 -sS'value' -p7174 -I01 -ssS'unique' -p7175 -(dp7176 -S'editable' -p7177 -I00 -sS'value' -p7178 -I00 -ssS'properties' -p7179 -(dp7180 -S'default_value' -p7181 -(dp7182 -S'editable' -p7183 -I00 -sS'value' -p7184 -NssS'summary_default' -p7185 -(dp7186 -S'editable' -p7187 -I00 -sS'value' -p7188 -S'none' -p7189 -sssS'description' -p7190 -(dp7191 -S'editable' -p7192 -I01 -sS'value' -p7193 -g47 -sssS'tag_list' -p7194 -(dp7195 -S'mandatory' -p7196 -(dp7197 -S'editable' -p7198 -I00 -sS'value' -p7199 -I00 -ssS'name' -p7200 -(dp7201 -S'editable' -p7202 -I01 -sS'value' -p7203 -S'Tags' -p7204 -ssS'data_type' -p7205 -(dp7206 -S'editable' -p7207 -I00 -sS'value' -p7208 -S'tag_list' -p7209 -ssS'entity_type' -p7210 -(dp7211 -S'editable' -p7212 -I00 -sS'value' -p7213 -S'Department' -p7214 -ssS'editable' -p7215 -(dp7216 -S'editable' -p7217 -I00 -sS'value' -p7218 -I01 -ssS'unique' -p7219 -(dp7220 -S'editable' -p7221 -I00 -sS'value' -p7222 -I00 -ssS'properties' -p7223 -(dp7224 -S'default_value' -p7225 -(dp7226 -S'editable' -p7227 -I00 -sS'value' -p7228 -NssS'summary_default' -p7229 -(dp7230 -S'editable' -p7231 -I01 -sS'value' -p7232 -S'none' -p7233 -ssS'valid_types' -p7234 -(dp7235 -S'editable' -p7236 -I01 -sS'value' -p7237 -(lp7238 -S'Tag' -p7239 -asssS'description' -p7240 -(dp7241 -S'editable' -p7242 -I01 -sS'value' -p7243 -g47 -sssS'id' -p7244 -(dp7245 -S'mandatory' -p7246 -(dp7247 -S'editable' -p7248 -I00 -sS'value' -p7249 -I00 -ssS'name' -p7250 -(dp7251 -S'editable' -p7252 -I01 -sS'value' -p7253 -S'Id' -p7254 -ssS'data_type' -p7255 -(dp7256 -S'editable' -p7257 -I00 -sS'value' -p7258 -S'number' -p7259 -ssS'entity_type' -p7260 -(dp7261 -S'editable' -p7262 -I00 -sS'value' -p7263 -S'Department' -p7264 -ssS'editable' -p7265 -(dp7266 -S'editable' -p7267 -I00 -sS'value' -p7268 -I00 -ssS'unique' -p7269 -(dp7270 -S'editable' -p7271 -I00 -sS'value' -p7272 -I00 -ssS'properties' -p7273 -(dp7274 -S'default_value' -p7275 -(dp7276 -S'editable' -p7277 -I00 -sS'value' -p7278 -NssS'summary_default' -p7279 -(dp7280 -S'editable' -p7281 -I01 -sS'value' -p7282 -S'none' -p7283 -sssS'description' -p7284 -(dp7285 -S'editable' -p7286 -I01 -sS'value' -p7287 -g47 -sssS'name' -p7288 -(dp7289 -S'mandatory' -p7290 -(dp7291 -S'editable' -p7292 -I00 -sS'value' -p7293 -I01 -ssS'name' -p7294 -(dp7295 -S'editable' -p7296 -I01 -sS'value' -p7297 -S'Department Name' -p7298 -ssS'data_type' -p7299 -(dp7300 -S'editable' -p7301 -I00 -sS'value' -p7302 -S'text' -p7303 -ssS'entity_type' -p7304 -(dp7305 -S'editable' -p7306 -I00 -sS'value' -p7307 -S'Department' -p7308 -ssS'editable' -p7309 -(dp7310 -S'editable' -p7311 -I00 -sS'value' -p7312 -I01 -ssS'unique' -p7313 -(dp7314 -S'editable' -p7315 -I00 -sS'value' -p7316 -I00 -ssS'properties' -p7317 -(dp7318 -S'default_value' -p7319 -(dp7320 -S'editable' -p7321 -I00 -sS'value' -p7322 -NssS'summary_default' -p7323 -(dp7324 -S'editable' -p7325 -I01 -sS'value' -p7326 -S'none' -p7327 -sssS'description' -p7328 -(dp7329 -S'editable' -p7330 -I01 -sS'value' -p7331 -g47 -ssssS'AssetSceneConnection' -p7332 -(dp7333 -S'id' -p7334 -(dp7335 -S'mandatory' -p7336 -(dp7337 -S'editable' -p7338 -I00 -sS'value' -p7339 -I01 -ssS'name' -p7340 -(dp7341 -S'editable' -p7342 -I01 -sS'value' -p7343 -S'Id' -p7344 -ssS'data_type' -p7345 -(dp7346 -S'editable' -p7347 -I00 -sS'value' -p7348 -S'number' -p7349 -ssS'entity_type' -p7350 -(dp7351 -S'editable' -p7352 -I00 -sS'value' -p7353 -S'AssetSceneConnection' -p7354 -ssS'editable' -p7355 -(dp7356 -S'editable' -p7357 -I00 -sS'value' -p7358 -I00 -ssS'unique' -p7359 -(dp7360 -S'editable' -p7361 -I00 -sS'value' -p7362 -I00 -ssS'properties' -p7363 -(dp7364 -S'default_value' -p7365 -(dp7366 -S'editable' -p7367 -I00 -sS'value' -p7368 -NssS'summary_default' -p7369 -(dp7370 -S'editable' -p7371 -I00 -sS'value' -p7372 -S'none' -p7373 -sssS'description' -p7374 -(dp7375 -S'editable' -p7376 -I01 -sS'value' -p7377 -g47 -sssS'cached_display_name' -p7378 -(dp7379 -S'mandatory' -p7380 -(dp7381 -S'editable' -p7382 -I00 -sS'value' -p7383 -I00 -ssS'name' -p7384 -(dp7385 -S'editable' -p7386 -I01 -sS'value' -p7387 -S'Cached Display Name' -p7388 -ssS'data_type' -p7389 -(dp7390 -S'editable' -p7391 -I00 -sS'value' -p7392 -S'text' -p7393 -ssS'entity_type' -p7394 -(dp7395 -S'editable' -p7396 -I00 -sS'value' -p7397 -S'AssetSceneConnection' -p7398 -ssS'editable' -p7399 -(dp7400 -S'editable' -p7401 -I00 -sS'value' -p7402 -I01 -ssS'unique' -p7403 -(dp7404 -S'editable' -p7405 -I00 -sS'value' -p7406 -I00 -ssS'properties' -p7407 -(dp7408 -S'default_value' -p7409 -(dp7410 -S'editable' -p7411 -I00 -sS'value' -p7412 -NssS'summary_default' -p7413 -(dp7414 -S'editable' -p7415 -I00 -sS'value' -p7416 -S'none' -p7417 -sssS'description' -p7418 -(dp7419 -S'editable' -p7420 -I01 -sS'value' -p7421 -g47 -sssS'asset' -p7422 -(dp7423 -S'mandatory' -p7424 -(dp7425 -S'editable' -p7426 -I00 -sS'value' -p7427 -I00 -ssS'name' -p7428 -(dp7429 -S'editable' -p7430 -I01 -sS'value' -p7431 -S'Asset' -p7432 -ssS'data_type' -p7433 -(dp7434 -S'editable' -p7435 -I00 -sS'value' -p7436 -S'entity' -p7437 -ssS'entity_type' -p7438 -(dp7439 -S'editable' -p7440 -I00 -sS'value' -p7441 -S'AssetSceneConnection' -p7442 -ssS'editable' -p7443 -(dp7444 -S'editable' -p7445 -I00 -sS'value' -p7446 -I00 -ssS'unique' -p7447 -(dp7448 -S'editable' -p7449 -I00 -sS'value' -p7450 -I00 -ssS'properties' -p7451 -(dp7452 -S'default_value' -p7453 -(dp7454 -S'editable' -p7455 -I00 -sS'value' -p7456 -NssS'summary_default' -p7457 -(dp7458 -S'editable' -p7459 -I00 -sS'value' -p7460 -S'none' -p7461 -ssS'valid_types' -p7462 -(dp7463 -S'editable' -p7464 -I00 -sS'value' -p7465 -(lp7466 -S'Asset' -p7467 -asssS'description' -p7468 -(dp7469 -S'editable' -p7470 -I01 -sS'value' -p7471 -g47 -sssS'scene' -p7472 -(dp7473 -S'mandatory' -p7474 -(dp7475 -S'editable' -p7476 -I00 -sS'value' -p7477 -I00 -ssS'name' -p7478 -(dp7479 -S'editable' -p7480 -I01 -sS'value' -p7481 -S'Scene' -p7482 -ssS'data_type' -p7483 -(dp7484 -S'editable' -p7485 -I00 -sS'value' -p7486 -S'entity' -p7487 -ssS'entity_type' -p7488 -(dp7489 -S'editable' -p7490 -I00 -sS'value' -p7491 -S'AssetSceneConnection' -p7492 -ssS'editable' -p7493 -(dp7494 -S'editable' -p7495 -I00 -sS'value' -p7496 -I00 -ssS'unique' -p7497 -(dp7498 -S'editable' -p7499 -I00 -sS'value' -p7500 -I00 -ssS'properties' -p7501 -(dp7502 -S'default_value' -p7503 -(dp7504 -S'editable' -p7505 -I00 -sS'value' -p7506 -NssS'summary_default' -p7507 -(dp7508 -S'editable' -p7509 -I00 -sS'value' -p7510 -S'none' -p7511 -ssS'valid_types' -p7512 -(dp7513 -S'editable' -p7514 -I00 -sS'value' -p7515 -(lp7516 -S'Scene' -p7517 -asssS'description' -p7518 -(dp7519 -S'editable' -p7520 -I01 -sS'value' -p7521 -g47 -ssssS'CameraMocapTakeConnection' -p7522 -(dp7523 -S'mocap_take' -p7524 -(dp7525 -S'mandatory' -p7526 -(dp7527 -S'editable' -p7528 -I00 -sS'value' -p7529 -I00 -ssS'name' -p7530 -(dp7531 -S'editable' -p7532 -I01 -sS'value' -p7533 -S'Mocap Take' -p7534 -ssS'data_type' -p7535 -(dp7536 -S'editable' -p7537 -I00 -sS'value' -p7538 -S'entity' -p7539 -ssS'entity_type' -p7540 -(dp7541 -S'editable' -p7542 -I00 -sS'value' -p7543 -S'CameraMocapTakeConnection' -p7544 -ssS'editable' -p7545 -(dp7546 -S'editable' -p7547 -I00 -sS'value' -p7548 -I00 -ssS'unique' -p7549 -(dp7550 -S'editable' -p7551 -I00 -sS'value' -p7552 -I00 -ssS'properties' -p7553 -(dp7554 -S'default_value' -p7555 -(dp7556 -S'editable' -p7557 -I00 -sS'value' -p7558 -NssS'summary_default' -p7559 -(dp7560 -S'editable' -p7561 -I00 -sS'value' -p7562 -S'none' -p7563 -ssS'valid_types' -p7564 -(dp7565 -S'editable' -p7566 -I00 -sS'value' -p7567 -(lp7568 -S'MocapTake' -p7569 -asssS'description' -p7570 -(dp7571 -S'editable' -p7572 -I01 -sS'value' -p7573 -g47 -sssS'cached_display_name' -p7574 -(dp7575 -S'mandatory' -p7576 -(dp7577 -S'editable' -p7578 -I00 -sS'value' -p7579 -I00 -ssS'name' -p7580 -(dp7581 -S'editable' -p7582 -I01 -sS'value' -p7583 -S'Cached Display Name' -p7584 -ssS'data_type' -p7585 -(dp7586 -S'editable' -p7587 -I00 -sS'value' -p7588 -S'text' -p7589 -ssS'entity_type' -p7590 -(dp7591 -S'editable' -p7592 -I00 -sS'value' -p7593 -S'CameraMocapTakeConnection' -p7594 -ssS'editable' -p7595 -(dp7596 -S'editable' -p7597 -I00 -sS'value' -p7598 -I01 -ssS'unique' -p7599 -(dp7600 -S'editable' -p7601 -I00 -sS'value' -p7602 -I00 -ssS'properties' -p7603 -(dp7604 -S'default_value' -p7605 -(dp7606 -S'editable' -p7607 -I00 -sS'value' -p7608 -NssS'summary_default' -p7609 -(dp7610 -S'editable' -p7611 -I00 -sS'value' -p7612 -S'none' -p7613 -sssS'description' -p7614 -(dp7615 -S'editable' -p7616 -I01 -sS'value' -p7617 -g47 -sssS'camera' -p7618 -(dp7619 -S'mandatory' -p7620 -(dp7621 -S'editable' -p7622 -I00 -sS'value' -p7623 -I00 -ssS'name' -p7624 -(dp7625 -S'editable' -p7626 -I01 -sS'value' -p7627 -S'Camera' -p7628 -ssS'data_type' -p7629 -(dp7630 -S'editable' -p7631 -I00 -sS'value' -p7632 -S'entity' -p7633 -ssS'entity_type' -p7634 -(dp7635 -S'editable' -p7636 -I00 -sS'value' -p7637 -S'CameraMocapTakeConnection' -p7638 -ssS'editable' -p7639 -(dp7640 -S'editable' -p7641 -I00 -sS'value' -p7642 -I00 -ssS'unique' -p7643 -(dp7644 -S'editable' -p7645 -I00 -sS'value' -p7646 -I00 -ssS'properties' -p7647 -(dp7648 -S'default_value' -p7649 -(dp7650 -S'editable' -p7651 -I00 -sS'value' -p7652 -NssS'summary_default' -p7653 -(dp7654 -S'editable' -p7655 -I00 -sS'value' -p7656 -S'none' -p7657 -ssS'valid_types' -p7658 -(dp7659 -S'editable' -p7660 -I00 -sS'value' -p7661 -(lp7662 -S'Camera' -p7663 -asssS'description' -p7664 -(dp7665 -S'editable' -p7666 -I01 -sS'value' -p7667 -g47 -sssS'id' -p7668 -(dp7669 -S'mandatory' -p7670 -(dp7671 -S'editable' -p7672 -I00 -sS'value' -p7673 -I01 -ssS'name' -p7674 -(dp7675 -S'editable' -p7676 -I01 -sS'value' -p7677 -S'Id' -p7678 -ssS'data_type' -p7679 -(dp7680 -S'editable' -p7681 -I00 -sS'value' -p7682 -S'number' -p7683 -ssS'entity_type' -p7684 -(dp7685 -S'editable' -p7686 -I00 -sS'value' -p7687 -S'CameraMocapTakeConnection' -p7688 -ssS'editable' -p7689 -(dp7690 -S'editable' -p7691 -I00 -sS'value' -p7692 -I00 -ssS'unique' -p7693 -(dp7694 -S'editable' -p7695 -I00 -sS'value' -p7696 -I00 -ssS'properties' -p7697 -(dp7698 -S'default_value' -p7699 -(dp7700 -S'editable' -p7701 -I00 -sS'value' -p7702 -NssS'summary_default' -p7703 -(dp7704 -S'editable' -p7705 -I00 -sS'value' -p7706 -S'none' -p7707 -sssS'description' -p7708 -(dp7709 -S'editable' -p7710 -I01 -sS'value' -p7711 -g47 -ssssS'Booking' -p7712 -(dp7713 -S'project' -p7714 -(dp7715 -S'mandatory' -p7716 -(dp7717 -S'editable' -p7718 -I00 -sS'value' -p7719 -I00 -ssS'name' -p7720 -(dp7721 -S'editable' -p7722 -I01 -sS'value' -p7723 -S'Project' -p7724 -ssS'data_type' -p7725 -(dp7726 -S'editable' -p7727 -I00 -sS'value' -p7728 -S'entity' -p7729 -ssS'entity_type' -p7730 -(dp7731 -S'editable' -p7732 -I00 -sS'value' -p7733 -S'Booking' -p7734 -ssS'editable' -p7735 -(dp7736 -S'editable' -p7737 -I00 -sS'value' -p7738 -I01 -ssS'unique' -p7739 -(dp7740 -S'editable' -p7741 -I00 -sS'value' -p7742 -I00 -ssS'properties' -p7743 -(dp7744 -S'default_value' -p7745 -(dp7746 -S'editable' -p7747 -I00 -sS'value' -p7748 -NssS'summary_default' -p7749 -(dp7750 -S'editable' -p7751 -I01 -sS'value' -p7752 -S'none' -p7753 -ssS'valid_types' -p7754 -(dp7755 -S'editable' -p7756 -I01 -sS'value' -p7757 -(lp7758 -S'Project' -p7759 -asssS'description' -p7760 -(dp7761 -S'editable' -p7762 -I01 -sS'value' -p7763 -g47 -sssS'open_notes_count' -p7764 -(dp7765 -S'mandatory' -p7766 -(dp7767 -S'editable' -p7768 -I00 -sS'value' -p7769 -I00 -ssS'name' -p7770 -(dp7771 -S'editable' -p7772 -I01 -sS'value' -p7773 -S'Open Notes Count' -p7774 -ssS'data_type' -p7775 -(dp7776 -S'editable' -p7777 -I00 -sS'value' -p7778 -S'text' -p7779 -ssS'entity_type' -p7780 -(dp7781 -S'editable' -p7782 -I00 -sS'value' -p7783 -S'Booking' -p7784 -ssS'editable' -p7785 -(dp7786 -S'editable' -p7787 -I00 -sS'value' -p7788 -I00 -ssS'unique' -p7789 -(dp7790 -S'editable' -p7791 -I00 -sS'value' -p7792 -I00 -ssS'properties' -p7793 -(dp7794 -S'default_value' -p7795 -(dp7796 -S'editable' -p7797 -I00 -sS'value' -p7798 -NssS'summary_default' -p7799 -(dp7800 -S'editable' -p7801 -I01 -sS'value' -p7802 -S'none' -p7803 -sssS'description' -p7804 -(dp7805 -S'editable' -p7806 -I01 -sS'value' -p7807 -g47 -sssS'open_notes' -p7808 -(dp7809 -S'mandatory' -p7810 -(dp7811 -S'editable' -p7812 -I00 -sS'value' -p7813 -I00 -ssS'name' -p7814 -(dp7815 -S'editable' -p7816 -I01 -sS'value' -p7817 -S'Open Notes' -p7818 -ssS'data_type' -p7819 -(dp7820 -S'editable' -p7821 -I00 -sS'value' -p7822 -S'multi_entity' -p7823 -ssS'entity_type' -p7824 -(dp7825 -S'editable' -p7826 -I00 -sS'value' -p7827 -S'Booking' -p7828 -ssS'editable' -p7829 -(dp7830 -S'editable' -p7831 -I00 -sS'value' -p7832 -I00 -ssS'unique' -p7833 -(dp7834 -S'editable' -p7835 -I00 -sS'value' -p7836 -I00 -ssS'properties' -p7837 -(dp7838 -S'default_value' -p7839 -(dp7840 -S'editable' -p7841 -I00 -sS'value' -p7842 -NssS'summary_default' -p7843 -(dp7844 -S'editable' -p7845 -I01 -sS'value' -p7846 -S'none' -p7847 -ssS'valid_types' -p7848 -(dp7849 -S'editable' -p7850 -I01 -sS'value' -p7851 -(lp7852 -S'Note' -p7853 -asssS'description' -p7854 -(dp7855 -S'editable' -p7856 -I01 -sS'value' -p7857 -g47 -sssS'updated_by' -p7858 -(dp7859 -S'mandatory' -p7860 -(dp7861 -S'editable' -p7862 -I00 -sS'value' -p7863 -I00 -ssS'name' -p7864 -(dp7865 -S'editable' -p7866 -I01 -sS'value' -p7867 -S'Updated by' -p7868 -ssS'data_type' -p7869 -(dp7870 -S'editable' -p7871 -I00 -sS'value' -p7872 -S'entity' -p7873 -ssS'entity_type' -p7874 -(dp7875 -S'editable' -p7876 -I00 -sS'value' -p7877 -S'Booking' -p7878 -ssS'editable' -p7879 -(dp7880 -S'editable' -p7881 -I00 -sS'value' -p7882 -I00 -ssS'unique' -p7883 -(dp7884 -S'editable' -p7885 -I00 -sS'value' -p7886 -I00 -ssS'properties' -p7887 -(dp7888 -S'default_value' -p7889 -(dp7890 -S'editable' -p7891 -I00 -sS'value' -p7892 -NssS'summary_default' -p7893 -(dp7894 -S'editable' -p7895 -I01 -sS'value' -p7896 -S'none' -p7897 -ssS'valid_types' -p7898 -(dp7899 -S'editable' -p7900 -I01 -sS'value' -p7901 -(lp7902 -S'HumanUser' -p7903 -aS'ApiUser' -p7904 -asssS'description' -p7905 -(dp7906 -S'editable' -p7907 -I01 -sS'value' -p7908 -g47 -sssS'end_date' -p7909 -(dp7910 -S'mandatory' -p7911 -(dp7912 -S'editable' -p7913 -I00 -sS'value' -p7914 -I00 -ssS'name' -p7915 -(dp7916 -S'editable' -p7917 -I01 -sS'value' -p7918 -S'End Date' -p7919 -ssS'data_type' -p7920 -(dp7921 -S'editable' -p7922 -I00 -sS'value' -p7923 -S'date' -p7924 -ssS'entity_type' -p7925 -(dp7926 -S'editable' -p7927 -I00 -sS'value' -p7928 -S'Booking' -p7929 -ssS'editable' -p7930 -(dp7931 -S'editable' -p7932 -I00 -sS'value' -p7933 -I01 -ssS'unique' -p7934 -(dp7935 -S'editable' -p7936 -I00 -sS'value' -p7937 -I00 -ssS'properties' -p7938 -(dp7939 -S'default_value' -p7940 -(dp7941 -S'editable' -p7942 -I00 -sS'value' -p7943 -NssS'summary_default' -p7944 -(dp7945 -S'editable' -p7946 -I01 -sS'value' -p7947 -S'none' -p7948 -sssS'description' -p7949 -(dp7950 -S'editable' -p7951 -I01 -sS'value' -p7952 -g47 -sssS'created_at' -p7953 -(dp7954 -S'mandatory' -p7955 -(dp7956 -S'editable' -p7957 -I00 -sS'value' -p7958 -I00 -ssS'name' -p7959 -(dp7960 -S'editable' -p7961 -I01 -sS'value' -p7962 -S'Date Created' -p7963 -ssS'data_type' -p7964 -(dp7965 -S'editable' -p7966 -I00 -sS'value' -p7967 -S'date_time' -p7968 -ssS'entity_type' -p7969 -(dp7970 -S'editable' -p7971 -I00 -sS'value' -p7972 -S'Booking' -p7973 -ssS'editable' -p7974 -(dp7975 -S'editable' -p7976 -I00 -sS'value' -p7977 -I00 -ssS'unique' -p7978 -(dp7979 -S'editable' -p7980 -I00 -sS'value' -p7981 -I00 -ssS'properties' -p7982 -(dp7983 -S'default_value' -p7984 -(dp7985 -S'editable' -p7986 -I00 -sS'value' -p7987 -NssS'summary_default' -p7988 -(dp7989 -S'editable' -p7990 -I01 -sS'value' -p7991 -S'none' -p7992 -sssS'description' -p7993 -(dp7994 -S'editable' -p7995 -I01 -sS'value' -p7996 -g47 -sssS'notes' -p7997 -(dp7998 -S'mandatory' -p7999 -(dp8000 -S'editable' -p8001 -I00 -sS'value' -p8002 -I00 -ssS'name' -p8003 -(dp8004 -S'editable' -p8005 -I01 -sS'value' -p8006 -S'Notes' -p8007 -ssS'data_type' -p8008 -(dp8009 -S'editable' -p8010 -I00 -sS'value' -p8011 -S'multi_entity' -p8012 -ssS'entity_type' -p8013 -(dp8014 -S'editable' -p8015 -I00 -sS'value' -p8016 -S'Booking' -p8017 -ssS'editable' -p8018 -(dp8019 -S'editable' -p8020 -I00 -sS'value' -p8021 -I01 -ssS'unique' -p8022 -(dp8023 -S'editable' -p8024 -I00 -sS'value' -p8025 -I00 -ssS'properties' -p8026 -(dp8027 -S'default_value' -p8028 -(dp8029 -S'editable' -p8030 -I00 -sS'value' -p8031 -NssS'summary_default' -p8032 -(dp8033 -S'editable' -p8034 -I01 -sS'value' -p8035 -S'none' -p8036 -ssS'valid_types' -p8037 -(dp8038 -S'editable' -p8039 -I01 -sS'value' -p8040 -(lp8041 -S'Note' -p8042 -asssS'description' -p8043 -(dp8044 -S'editable' -p8045 -I01 -sS'value' -p8046 -g47 -sssS'vacation' -p8047 -(dp8048 -S'mandatory' -p8049 -(dp8050 -S'editable' -p8051 -I00 -sS'value' -p8052 -I00 -ssS'name' -p8053 -(dp8054 -S'editable' -p8055 -I01 -sS'value' -p8056 -S'Vacation' -p8057 -ssS'data_type' -p8058 -(dp8059 -S'editable' -p8060 -I00 -sS'value' -p8061 -S'checkbox' -p8062 -ssS'entity_type' -p8063 -(dp8064 -S'editable' -p8065 -I00 -sS'value' -p8066 -S'Booking' -p8067 -ssS'editable' -p8068 -(dp8069 -S'editable' -p8070 -I00 -sS'value' -p8071 -I01 -ssS'unique' -p8072 -(dp8073 -S'editable' -p8074 -I00 -sS'value' -p8075 -I00 -ssS'properties' -p8076 -(dp8077 -S'default_value' -p8078 -(dp8079 -S'editable' -p8080 -I00 -sS'value' -p8081 -NssS'summary_default' -p8082 -(dp8083 -S'editable' -p8084 -I01 -sS'value' -p8085 -S'none' -p8086 -sssS'description' -p8087 -(dp8088 -S'editable' -p8089 -I01 -sS'value' -p8090 -g47 -sssS'created_by' -p8091 -(dp8092 -S'mandatory' -p8093 -(dp8094 -S'editable' -p8095 -I00 -sS'value' -p8096 -I00 -ssS'name' -p8097 -(dp8098 -S'editable' -p8099 -I01 -sS'value' -p8100 -S'Created by' -p8101 -ssS'data_type' -p8102 -(dp8103 -S'editable' -p8104 -I00 -sS'value' -p8105 -S'entity' -p8106 -ssS'entity_type' -p8107 -(dp8108 -S'editable' -p8109 -I00 -sS'value' -p8110 -S'Booking' -p8111 -ssS'editable' -p8112 -(dp8113 -S'editable' -p8114 -I00 -sS'value' -p8115 -I00 -ssS'unique' -p8116 -(dp8117 -S'editable' -p8118 -I00 -sS'value' -p8119 -I00 -ssS'properties' -p8120 -(dp8121 -S'default_value' -p8122 -(dp8123 -S'editable' -p8124 -I00 -sS'value' -p8125 -NssS'summary_default' -p8126 -(dp8127 -S'editable' -p8128 -I01 -sS'value' -p8129 -S'none' -p8130 -ssS'valid_types' -p8131 -(dp8132 -S'editable' -p8133 -I01 -sS'value' -p8134 -(lp8135 -S'HumanUser' -p8136 -aS'ApiUser' -p8137 -asssS'description' -p8138 -(dp8139 -S'editable' -p8140 -I01 -sS'value' -p8141 -g47 -sssS'updated_at' -p8142 -(dp8143 -S'mandatory' -p8144 -(dp8145 -S'editable' -p8146 -I00 -sS'value' -p8147 -I00 -ssS'name' -p8148 -(dp8149 -S'editable' -p8150 -I01 -sS'value' -p8151 -S'Date Updated' -p8152 -ssS'data_type' -p8153 -(dp8154 -S'editable' -p8155 -I00 -sS'value' -p8156 -S'date_time' -p8157 -ssS'entity_type' -p8158 -(dp8159 -S'editable' -p8160 -I00 -sS'value' -p8161 -S'Booking' -p8162 -ssS'editable' -p8163 -(dp8164 -S'editable' -p8165 -I00 -sS'value' -p8166 -I00 -ssS'unique' -p8167 -(dp8168 -S'editable' -p8169 -I00 -sS'value' -p8170 -I00 -ssS'properties' -p8171 -(dp8172 -S'default_value' -p8173 -(dp8174 -S'editable' -p8175 -I00 -sS'value' -p8176 -NssS'summary_default' -p8177 -(dp8178 -S'editable' -p8179 -I01 -sS'value' -p8180 -S'none' -p8181 -sssS'description' -p8182 -(dp8183 -S'editable' -p8184 -I01 -sS'value' -p8185 -g47 -sssS'note' -p8186 -(dp8187 -S'mandatory' -p8188 -(dp8189 -S'editable' -p8190 -I00 -sS'value' -p8191 -I00 -ssS'name' -p8192 -(dp8193 -S'editable' -p8194 -I01 -sS'value' -p8195 -S'Note' -p8196 -ssS'data_type' -p8197 -(dp8198 -S'editable' -p8199 -I00 -sS'value' -p8200 -S'text' -p8201 -ssS'entity_type' -p8202 -(dp8203 -S'editable' -p8204 -I00 -sS'value' -p8205 -S'Booking' -p8206 -ssS'editable' -p8207 -(dp8208 -S'editable' -p8209 -I00 -sS'value' -p8210 -I01 -ssS'unique' -p8211 -(dp8212 -S'editable' -p8213 -I00 -sS'value' -p8214 -I00 -ssS'properties' -p8215 -(dp8216 -S'default_value' -p8217 -(dp8218 -S'editable' -p8219 -I00 -sS'value' -p8220 -NssS'summary_default' -p8221 -(dp8222 -S'editable' -p8223 -I01 -sS'value' -p8224 -S'none' -p8225 -sssS'description' -p8226 -(dp8227 -S'editable' -p8228 -I01 -sS'value' -p8229 -g47 -sssS'user' -p8230 -(dp8231 -S'mandatory' -p8232 -(dp8233 -S'editable' -p8234 -I00 -sS'value' -p8235 -I00 -ssS'name' -p8236 -(dp8237 -S'editable' -p8238 -I01 -sS'value' -p8239 -S'Assigned To' -p8240 -ssS'data_type' -p8241 -(dp8242 -S'editable' -p8243 -I00 -sS'value' -p8244 -S'entity' -p8245 -ssS'entity_type' -p8246 -(dp8247 -S'editable' -p8248 -I00 -sS'value' -p8249 -S'Booking' -p8250 -ssS'editable' -p8251 -(dp8252 -S'editable' -p8253 -I00 -sS'value' -p8254 -I01 -ssS'unique' -p8255 -(dp8256 -S'editable' -p8257 -I00 -sS'value' -p8258 -I00 -ssS'properties' -p8259 -(dp8260 -S'default_value' -p8261 -(dp8262 -S'editable' -p8263 -I00 -sS'value' -p8264 -NssS'summary_default' -p8265 -(dp8266 -S'editable' -p8267 -I01 -sS'value' -p8268 -S'none' -p8269 -ssS'valid_types' -p8270 -(dp8271 -S'editable' -p8272 -I01 -sS'value' -p8273 -(lp8274 -S'HumanUser' -p8275 -asssS'description' -p8276 -(dp8277 -S'editable' -p8278 -I01 -sS'value' -p8279 -g47 -sssS'id' -p8280 -(dp8281 -S'mandatory' -p8282 -(dp8283 -S'editable' -p8284 -I00 -sS'value' -p8285 -I01 -ssS'name' -p8286 -(dp8287 -S'editable' -p8288 -I01 -sS'value' -p8289 -S'Id' -p8290 -ssS'data_type' -p8291 -(dp8292 -S'editable' -p8293 -I00 -sS'value' -p8294 -S'number' -p8295 -ssS'entity_type' -p8296 -(dp8297 -S'editable' -p8298 -I00 -sS'value' -p8299 -S'Booking' -p8300 -ssS'editable' -p8301 -(dp8302 -S'editable' -p8303 -I00 -sS'value' -p8304 -I00 -ssS'unique' -p8305 -(dp8306 -S'editable' -p8307 -I00 -sS'value' -p8308 -I00 -ssS'properties' -p8309 -(dp8310 -S'default_value' -p8311 -(dp8312 -S'editable' -p8313 -I00 -sS'value' -p8314 -NssS'summary_default' -p8315 -(dp8316 -S'editable' -p8317 -I01 -sS'value' -p8318 -S'none' -p8319 -sssS'description' -p8320 -(dp8321 -S'editable' -p8322 -I01 -sS'value' -p8323 -g47 -sssS'cached_display_name' -p8324 -(dp8325 -S'mandatory' -p8326 -(dp8327 -S'editable' -p8328 -I00 -sS'value' -p8329 -I00 -ssS'name' -p8330 -(dp8331 -S'editable' -p8332 -I01 -sS'value' -p8333 -S'Cached Display Name' -p8334 -ssS'data_type' -p8335 -(dp8336 -S'editable' -p8337 -I00 -sS'value' -p8338 -S'text' -p8339 -ssS'entity_type' -p8340 -(dp8341 -S'editable' -p8342 -I00 -sS'value' -p8343 -S'Booking' -p8344 -ssS'editable' -p8345 -(dp8346 -S'editable' -p8347 -I00 -sS'value' -p8348 -I01 -ssS'unique' -p8349 -(dp8350 -S'editable' -p8351 -I00 -sS'value' -p8352 -I00 -ssS'properties' -p8353 -(dp8354 -S'default_value' -p8355 -(dp8356 -S'editable' -p8357 -I00 -sS'value' -p8358 -NssS'summary_default' -p8359 -(dp8360 -S'editable' -p8361 -I00 -sS'value' -p8362 -S'none' -p8363 -sssS'description' -p8364 -(dp8365 -S'editable' -p8366 -I01 -sS'value' -p8367 -g47 -sssS'start_date' -p8368 -(dp8369 -S'mandatory' -p8370 -(dp8371 -S'editable' -p8372 -I00 -sS'value' -p8373 -I00 -ssS'name' -p8374 -(dp8375 -S'editable' -p8376 -I01 -sS'value' -p8377 -S'Start Date' -p8378 -ssS'data_type' -p8379 -(dp8380 -S'editable' -p8381 -I00 -sS'value' -p8382 -S'date' -p8383 -ssS'entity_type' -p8384 -(dp8385 -S'editable' -p8386 -I00 -sS'value' -p8387 -S'Booking' -p8388 -ssS'editable' -p8389 -(dp8390 -S'editable' -p8391 -I00 -sS'value' -p8392 -I01 -ssS'unique' -p8393 -(dp8394 -S'editable' -p8395 -I00 -sS'value' -p8396 -I00 -ssS'properties' -p8397 -(dp8398 -S'default_value' -p8399 -(dp8400 -S'editable' -p8401 -I00 -sS'value' -p8402 -NssS'summary_default' -p8403 -(dp8404 -S'editable' -p8405 -I01 -sS'value' -p8406 -S'none' -p8407 -sssS'description' -p8408 -(dp8409 -S'editable' -p8410 -I01 -sS'value' -p8411 -g47 -ssssS'CutVersionConnection' -p8412 -(dp8413 -S'sg_cut_in' -p8414 -(dp8415 -S'mandatory' -p8416 -(dp8417 -S'editable' -p8418 -I00 -sS'value' -p8419 -I00 -ssS'name' -p8420 -(dp8421 -S'editable' -p8422 -I01 -sS'value' -p8423 -S'Cut In' -p8424 -ssS'data_type' -p8425 -(dp8426 -S'editable' -p8427 -I00 -sS'value' -p8428 -S'number' -p8429 -ssS'entity_type' -p8430 -(dp8431 -S'editable' -p8432 -I00 -sS'value' -p8433 -S'CutVersionConnection' -p8434 -ssS'editable' -p8435 -(dp8436 -S'editable' -p8437 -I00 -sS'value' -p8438 -I01 -ssS'unique' -p8439 -(dp8440 -S'editable' -p8441 -I00 -sS'value' -p8442 -I00 -ssS'properties' -p8443 -(dp8444 -S'default_value' -p8445 -(dp8446 -S'editable' -p8447 -I00 -sS'value' -p8448 -NssS'summary_default' -p8449 -(dp8450 -S'editable' -p8451 -I01 -sS'value' -p8452 -S'none' -p8453 -sssS'description' -p8454 -(dp8455 -S'editable' -p8456 -I01 -sS'value' -p8457 -g47 -sssS'cut' -p8458 -(dp8459 -S'mandatory' -p8460 -(dp8461 -S'editable' -p8462 -I00 -sS'value' -p8463 -I00 -ssS'name' -p8464 -(dp8465 -S'editable' -p8466 -I01 -sS'value' -p8467 -S'Cut' -p8468 -ssS'data_type' -p8469 -(dp8470 -S'editable' -p8471 -I00 -sS'value' -p8472 -S'entity' -p8473 -ssS'entity_type' -p8474 -(dp8475 -S'editable' -p8476 -I00 -sS'value' -p8477 -S'CutVersionConnection' -p8478 -ssS'editable' -p8479 -(dp8480 -S'editable' -p8481 -I00 -sS'value' -p8482 -I00 -ssS'unique' -p8483 -(dp8484 -S'editable' -p8485 -I00 -sS'value' -p8486 -I00 -ssS'properties' -p8487 -(dp8488 -S'default_value' -p8489 -(dp8490 -S'editable' -p8491 -I00 -sS'value' -p8492 -NssS'summary_default' -p8493 -(dp8494 -S'editable' -p8495 -I00 -sS'value' -p8496 -S'none' -p8497 -ssS'valid_types' -p8498 -(dp8499 -S'editable' -p8500 -I00 -sS'value' -p8501 -(lp8502 -S'Cut' -p8503 -asssS'description' -p8504 -(dp8505 -S'editable' -p8506 -I01 -sS'value' -p8507 -g47 -sssS'sg_cut_out' -p8508 -(dp8509 -S'mandatory' -p8510 -(dp8511 -S'editable' -p8512 -I00 -sS'value' -p8513 -I00 -ssS'name' -p8514 -(dp8515 -S'editable' -p8516 -I01 -sS'value' -p8517 -S'Cut Out' -p8518 -ssS'data_type' -p8519 -(dp8520 -S'editable' -p8521 -I00 -sS'value' -p8522 -S'number' -p8523 -ssS'entity_type' -p8524 -(dp8525 -S'editable' -p8526 -I00 -sS'value' -p8527 -S'CutVersionConnection' -p8528 -ssS'editable' -p8529 -(dp8530 -S'editable' -p8531 -I00 -sS'value' -p8532 -I01 -ssS'unique' -p8533 -(dp8534 -S'editable' -p8535 -I00 -sS'value' -p8536 -I00 -ssS'properties' -p8537 -(dp8538 -S'default_value' -p8539 -(dp8540 -S'editable' -p8541 -I00 -sS'value' -p8542 -NssS'summary_default' -p8543 -(dp8544 -S'editable' -p8545 -I01 -sS'value' -p8546 -S'none' -p8547 -sssS'description' -p8548 -(dp8549 -S'editable' -p8550 -I01 -sS'value' -p8551 -g47 -sssS'sg_cut_order' -p8552 -(dp8553 -S'mandatory' -p8554 -(dp8555 -S'editable' -p8556 -I00 -sS'value' -p8557 -I00 -ssS'name' -p8558 -(dp8559 -S'editable' -p8560 -I01 -sS'value' -p8561 -S'Cut Order' -p8562 -ssS'data_type' -p8563 -(dp8564 -S'editable' -p8565 -I00 -sS'value' -p8566 -S'number' -p8567 -ssS'entity_type' -p8568 -(dp8569 -S'editable' -p8570 -I00 -sS'value' -p8571 -S'CutVersionConnection' -p8572 -ssS'editable' -p8573 -(dp8574 -S'editable' -p8575 -I00 -sS'value' -p8576 -I01 -ssS'unique' -p8577 -(dp8578 -S'editable' -p8579 -I00 -sS'value' -p8580 -I00 -ssS'properties' -p8581 -(dp8582 -S'default_value' -p8583 -(dp8584 -S'editable' -p8585 -I00 -sS'value' -p8586 -NssS'summary_default' -p8587 -(dp8588 -S'editable' -p8589 -I01 -sS'value' -p8590 -S'none' -p8591 -sssS'description' -p8592 -(dp8593 -S'editable' -p8594 -I01 -sS'value' -p8595 -g47 -sssS'version' -p8596 -(dp8597 -S'mandatory' -p8598 -(dp8599 -S'editable' -p8600 -I00 -sS'value' -p8601 -I00 -ssS'name' -p8602 -(dp8603 -S'editable' -p8604 -I01 -sS'value' -p8605 -S'Version' -p8606 -ssS'data_type' -p8607 -(dp8608 -S'editable' -p8609 -I00 -sS'value' -p8610 -S'entity' -p8611 -ssS'entity_type' -p8612 -(dp8613 -S'editable' -p8614 -I00 -sS'value' -p8615 -S'CutVersionConnection' -p8616 -ssS'editable' -p8617 -(dp8618 -S'editable' -p8619 -I00 -sS'value' -p8620 -I00 -ssS'unique' -p8621 -(dp8622 -S'editable' -p8623 -I00 -sS'value' -p8624 -I00 -ssS'properties' -p8625 -(dp8626 -S'default_value' -p8627 -(dp8628 -S'editable' -p8629 -I00 -sS'value' -p8630 -NssS'summary_default' -p8631 -(dp8632 -S'editable' -p8633 -I00 -sS'value' -p8634 -S'none' -p8635 -ssS'valid_types' -p8636 -(dp8637 -S'editable' -p8638 -I00 -sS'value' -p8639 -(lp8640 -S'Version' -p8641 -asssS'description' -p8642 -(dp8643 -S'editable' -p8644 -I01 -sS'value' -p8645 -g47 -sssS'sg_cut_duration' -p8646 -(dp8647 -S'mandatory' -p8648 -(dp8649 -S'editable' -p8650 -I00 -sS'value' -p8651 -I00 -ssS'name' -p8652 -(dp8653 -S'editable' -p8654 -I01 -sS'value' -p8655 -S'Cut Duration' -p8656 -ssS'data_type' -p8657 -(dp8658 -S'editable' -p8659 -I00 -sS'value' -p8660 -S'number' -p8661 -ssS'entity_type' -p8662 -(dp8663 -S'editable' -p8664 -I00 -sS'value' -p8665 -S'CutVersionConnection' -p8666 -ssS'editable' -p8667 -(dp8668 -S'editable' -p8669 -I00 -sS'value' -p8670 -I01 -ssS'unique' -p8671 -(dp8672 -S'editable' -p8673 -I00 -sS'value' -p8674 -I00 -ssS'properties' -p8675 -(dp8676 -S'default_value' -p8677 -(dp8678 -S'editable' -p8679 -I00 -sS'value' -p8680 -NssS'summary_default' -p8681 -(dp8682 -S'editable' -p8683 -I01 -sS'value' -p8684 -S'none' -p8685 -sssS'description' -p8686 -(dp8687 -S'editable' -p8688 -I01 -sS'value' -p8689 -g47 -sssS'cached_display_name' -p8690 -(dp8691 -S'mandatory' -p8692 -(dp8693 -S'editable' -p8694 -I00 -sS'value' -p8695 -I00 -ssS'name' -p8696 -(dp8697 -S'editable' -p8698 -I01 -sS'value' -p8699 -S'Cached Display Name' -p8700 -ssS'data_type' -p8701 -(dp8702 -S'editable' -p8703 -I00 -sS'value' -p8704 -S'text' -p8705 -ssS'entity_type' -p8706 -(dp8707 -S'editable' -p8708 -I00 -sS'value' -p8709 -S'CutVersionConnection' -p8710 -ssS'editable' -p8711 -(dp8712 -S'editable' -p8713 -I00 -sS'value' -p8714 -I01 -ssS'unique' -p8715 -(dp8716 -S'editable' -p8717 -I00 -sS'value' -p8718 -I00 -ssS'properties' -p8719 -(dp8720 -S'default_value' -p8721 -(dp8722 -S'editable' -p8723 -I00 -sS'value' -p8724 -NssS'summary_default' -p8725 -(dp8726 -S'editable' -p8727 -I00 -sS'value' -p8728 -S'none' -p8729 -sssS'description' -p8730 -(dp8731 -S'editable' -p8732 -I01 -sS'value' -p8733 -g47 -sssS'id' -p8734 -(dp8735 -S'mandatory' -p8736 -(dp8737 -S'editable' -p8738 -I00 -sS'value' -p8739 -I01 -ssS'name' -p8740 -(dp8741 -S'editable' -p8742 -I01 -sS'value' -p8743 -S'Id' -p8744 -ssS'data_type' -p8745 -(dp8746 -S'editable' -p8747 -I00 -sS'value' -p8748 -S'number' -p8749 -ssS'entity_type' -p8750 -(dp8751 -S'editable' -p8752 -I00 -sS'value' -p8753 -S'CutVersionConnection' -p8754 -ssS'editable' -p8755 -(dp8756 -S'editable' -p8757 -I00 -sS'value' -p8758 -I00 -ssS'unique' -p8759 -(dp8760 -S'editable' -p8761 -I00 -sS'value' -p8762 -I00 -ssS'properties' -p8763 -(dp8764 -S'default_value' -p8765 -(dp8766 -S'editable' -p8767 -I00 -sS'value' -p8768 -NssS'summary_default' -p8769 -(dp8770 -S'editable' -p8771 -I00 -sS'value' -p8772 -S'none' -p8773 -sssS'description' -p8774 -(dp8775 -S'editable' -p8776 -I01 -sS'value' -p8777 -g47 -sssS'sg_cut_comments' -p8778 -(dp8779 -S'mandatory' -p8780 -(dp8781 -S'editable' -p8782 -I00 -sS'value' -p8783 -I00 -ssS'name' -p8784 -(dp8785 -S'editable' -p8786 -I01 -sS'value' -p8787 -S'Cut Comments' -p8788 -ssS'data_type' -p8789 -(dp8790 -S'editable' -p8791 -I00 -sS'value' -p8792 -S'text' -p8793 -ssS'entity_type' -p8794 -(dp8795 -S'editable' -p8796 -I00 -sS'value' -p8797 -S'CutVersionConnection' -p8798 -ssS'editable' -p8799 -(dp8800 -S'editable' -p8801 -I00 -sS'value' -p8802 -I01 -ssS'unique' -p8803 -(dp8804 -S'editable' -p8805 -I00 -sS'value' -p8806 -I00 -ssS'properties' -p8807 -(dp8808 -S'default_value' -p8809 -(dp8810 -S'editable' -p8811 -I00 -sS'value' -p8812 -NssS'summary_default' -p8813 -(dp8814 -S'editable' -p8815 -I01 -sS'value' -p8816 -S'none' -p8817 -sssS'description' -p8818 -(dp8819 -S'editable' -p8820 -I01 -sS'value' -p8821 -g47 -ssssS'TimeLog' -p8822 -(dp8823 -S'description' -p8824 -(dp8825 -S'mandatory' -p8826 -(dp8827 -S'editable' -p8828 -I00 -sS'value' -p8829 -I00 -ssS'name' -p8830 -(dp8831 -S'editable' -p8832 -I01 -sS'value' -p8833 -S'Description' -p8834 -ssS'data_type' -p8835 -(dp8836 -S'editable' -p8837 -I00 -sS'value' -p8838 -S'text' -p8839 -ssS'entity_type' -p8840 -(dp8841 -S'editable' -p8842 -I00 -sS'value' -p8843 -S'TimeLog' -p8844 -ssS'editable' -p8845 -(dp8846 -S'editable' -p8847 -I00 -sS'value' -p8848 -I01 -ssS'unique' -p8849 -(dp8850 -S'editable' -p8851 -I00 -sS'value' -p8852 -I00 -ssS'properties' -p8853 -(dp8854 -S'default_value' -p8855 -(dp8856 -S'editable' -p8857 -I00 -sS'value' -p8858 -NssS'summary_default' -p8859 -(dp8860 -S'editable' -p8861 -I01 -sS'value' -p8862 -S'none' -p8863 -sssS'description' -p8864 -(dp8865 -S'editable' -p8866 -I01 -sS'value' -p8867 -g47 -sssS'created_at' -p8868 -(dp8869 -S'mandatory' -p8870 -(dp8871 -S'editable' -p8872 -I00 -sS'value' -p8873 -I00 -ssS'name' -p8874 -(dp8875 -S'editable' -p8876 -I01 -sS'value' -p8877 -S'Date Created' -p8878 -ssS'data_type' -p8879 -(dp8880 -S'editable' -p8881 -I00 -sS'value' -p8882 -S'date_time' -p8883 -ssS'entity_type' -p8884 -(dp8885 -S'editable' -p8886 -I00 -sS'value' -p8887 -S'TimeLog' -p8888 -ssS'editable' -p8889 -(dp8890 -S'editable' -p8891 -I00 -sS'value' -p8892 -I00 -ssS'unique' -p8893 -(dp8894 -S'editable' -p8895 -I00 -sS'value' -p8896 -I00 -ssS'properties' -p8897 -(dp8898 -S'default_value' -p8899 -(dp8900 -S'editable' -p8901 -I00 -sS'value' -p8902 -NssS'summary_default' -p8903 -(dp8904 -S'editable' -p8905 -I01 -sS'value' -p8906 -S'none' -p8907 -sssS'description' -p8908 -(dp8909 -S'editable' -p8910 -I01 -sS'value' -p8911 -g47 -sssS'updated_at' -p8912 -(dp8913 -S'mandatory' -p8914 -(dp8915 -S'editable' -p8916 -I00 -sS'value' -p8917 -I00 -ssS'name' -p8918 -(dp8919 -S'editable' -p8920 -I01 -sS'value' -p8921 -S'Date Updated' -p8922 -ssS'data_type' -p8923 -(dp8924 -S'editable' -p8925 -I00 -sS'value' -p8926 -S'date_time' -p8927 -ssS'entity_type' -p8928 -(dp8929 -S'editable' -p8930 -I00 -sS'value' -p8931 -S'TimeLog' -p8932 -ssS'editable' -p8933 -(dp8934 -S'editable' -p8935 -I00 -sS'value' -p8936 -I00 -ssS'unique' -p8937 -(dp8938 -S'editable' -p8939 -I00 -sS'value' -p8940 -I00 -ssS'properties' -p8941 -(dp8942 -S'default_value' -p8943 -(dp8944 -S'editable' -p8945 -I00 -sS'value' -p8946 -NssS'summary_default' -p8947 -(dp8948 -S'editable' -p8949 -I01 -sS'value' -p8950 -S'none' -p8951 -sssS'description' -p8952 -(dp8953 -S'editable' -p8954 -I01 -sS'value' -p8955 -g47 -sssS'created_by' -p8956 -(dp8957 -S'mandatory' -p8958 -(dp8959 -S'editable' -p8960 -I00 -sS'value' -p8961 -I00 -ssS'name' -p8962 -(dp8963 -S'editable' -p8964 -I01 -sS'value' -p8965 -S'Created by' -p8966 -ssS'data_type' -p8967 -(dp8968 -S'editable' -p8969 -I00 -sS'value' -p8970 -S'entity' -p8971 -ssS'entity_type' -p8972 -(dp8973 -S'editable' -p8974 -I00 -sS'value' -p8975 -S'TimeLog' -p8976 -ssS'editable' -p8977 -(dp8978 -S'editable' -p8979 -I00 -sS'value' -p8980 -I00 -ssS'unique' -p8981 -(dp8982 -S'editable' -p8983 -I00 -sS'value' -p8984 -I00 -ssS'properties' -p8985 -(dp8986 -S'default_value' -p8987 -(dp8988 -S'editable' -p8989 -I00 -sS'value' -p8990 -NssS'summary_default' -p8991 -(dp8992 -S'editable' -p8993 -I01 -sS'value' -p8994 -S'none' -p8995 -ssS'valid_types' -p8996 -(dp8997 -S'editable' -p8998 -I01 -sS'value' -p8999 -(lp9000 -S'HumanUser' -p9001 -aS'ApiUser' -p9002 -asssS'description' -p9003 -(dp9004 -S'editable' -p9005 -I01 -sS'value' -p9006 -g47 -sssS'entity' -p9007 -(dp9008 -S'mandatory' -p9009 -(dp9010 -S'editable' -p9011 -I00 -sS'value' -p9012 -I00 -ssS'name' -p9013 -(dp9014 -S'editable' -p9015 -I01 -sS'value' -p9016 -S'Link' -p9017 -ssS'data_type' -p9018 -(dp9019 -S'editable' -p9020 -I00 -sS'value' -p9021 -S'entity' -p9022 -ssS'entity_type' -p9023 -(dp9024 -S'editable' -p9025 -I00 -sS'value' -p9026 -S'TimeLog' -p9027 -ssS'editable' -p9028 -(dp9029 -S'editable' -p9030 -I00 -sS'value' -p9031 -I01 -ssS'unique' -p9032 -(dp9033 -S'editable' -p9034 -I00 -sS'value' -p9035 -I00 -ssS'properties' -p9036 -(dp9037 -S'default_value' -p9038 -(dp9039 -S'editable' -p9040 -I00 -sS'value' -p9041 -NssS'summary_default' -p9042 -(dp9043 -S'editable' -p9044 -I01 -sS'value' -p9045 -S'none' -p9046 -ssS'valid_types' -p9047 -(dp9048 -S'editable' -p9049 -I01 -sS'value' -p9050 -(lp9051 -S'Task' -p9052 -aS'Ticket' -p9053 -asssS'description' -p9054 -(dp9055 -S'editable' -p9056 -I01 -sS'value' -p9057 -g47 -sssS'project' -p9058 -(dp9059 -S'mandatory' -p9060 -(dp9061 -S'editable' -p9062 -I00 -sS'value' -p9063 -I00 -ssS'name' -p9064 -(dp9065 -S'editable' -p9066 -I01 -sS'value' -p9067 -S'Project' -p9068 -ssS'data_type' -p9069 -(dp9070 -S'editable' -p9071 -I00 -sS'value' -p9072 -S'entity' -p9073 -ssS'entity_type' -p9074 -(dp9075 -S'editable' -p9076 -I00 -sS'value' -p9077 -S'TimeLog' -p9078 -ssS'editable' -p9079 -(dp9080 -S'editable' -p9081 -I00 -sS'value' -p9082 -I01 -ssS'unique' -p9083 -(dp9084 -S'editable' -p9085 -I00 -sS'value' -p9086 -I00 -ssS'properties' -p9087 -(dp9088 -S'default_value' -p9089 -(dp9090 -S'editable' -p9091 -I00 -sS'value' -p9092 -NssS'summary_default' -p9093 -(dp9094 -S'editable' -p9095 -I01 -sS'value' -p9096 -S'none' -p9097 -ssS'valid_types' -p9098 -(dp9099 -S'editable' -p9100 -I01 -sS'value' -p9101 -(lp9102 -S'Project' -p9103 -asssS'description' -p9104 -(dp9105 -S'editable' -p9106 -I01 -sS'value' -p9107 -g47 -sssS'duration' -p9108 -(dp9109 -S'mandatory' -p9110 -(dp9111 -S'editable' -p9112 -I00 -sS'value' -p9113 -I00 -ssS'name' -p9114 -(dp9115 -S'editable' -p9116 -I01 -sS'value' -p9117 -S'Duration' -p9118 -ssS'data_type' -p9119 -(dp9120 -S'editable' -p9121 -I00 -sS'value' -p9122 -S'duration' -p9123 -ssS'entity_type' -p9124 -(dp9125 -S'editable' -p9126 -I00 -sS'value' -p9127 -S'TimeLog' -p9128 -ssS'editable' -p9129 -(dp9130 -S'editable' -p9131 -I00 -sS'value' -p9132 -I01 -ssS'unique' -p9133 -(dp9134 -S'editable' -p9135 -I00 -sS'value' -p9136 -I00 -ssS'properties' -p9137 -(dp9138 -S'default_value' -p9139 -(dp9140 -S'editable' -p9141 -I00 -sS'value' -p9142 -I0 -ssS'summary_default' -p9143 -(dp9144 -S'editable' -p9145 -I01 -sS'value' -p9146 -S'sum' -p9147 -sssS'description' -p9148 -(dp9149 -S'editable' -p9150 -I01 -sS'value' -p9151 -g47 -sssS'user' -p9152 -(dp9153 -S'mandatory' -p9154 -(dp9155 -S'editable' -p9156 -I00 -sS'value' -p9157 -I00 -ssS'name' -p9158 -(dp9159 -S'editable' -p9160 -I01 -sS'value' -p9161 -S'Person' -p9162 -ssS'data_type' -p9163 -(dp9164 -S'editable' -p9165 -I00 -sS'value' -p9166 -S'entity' -p9167 -ssS'entity_type' -p9168 -(dp9169 -S'editable' -p9170 -I00 -sS'value' -p9171 -S'TimeLog' -p9172 -ssS'editable' -p9173 -(dp9174 -S'editable' -p9175 -I00 -sS'value' -p9176 -I01 -ssS'unique' -p9177 -(dp9178 -S'editable' -p9179 -I00 -sS'value' -p9180 -I00 -ssS'properties' -p9181 -(dp9182 -S'default_value' -p9183 -(dp9184 -S'editable' -p9185 -I00 -sS'value' -p9186 -NssS'summary_default' -p9187 -(dp9188 -S'editable' -p9189 -I01 -sS'value' -p9190 -S'none' -p9191 -ssS'valid_types' -p9192 -(dp9193 -S'editable' -p9194 -I01 -sS'value' -p9195 -(lp9196 -S'HumanUser' -p9197 -asssS'description' -p9198 -(dp9199 -S'editable' -p9200 -I01 -sS'value' -p9201 -g47 -sssS'date' -p9202 -(dp9203 -S'mandatory' -p9204 -(dp9205 -S'editable' -p9206 -I00 -sS'value' -p9207 -I00 -ssS'name' -p9208 -(dp9209 -S'editable' -p9210 -I01 -sS'value' -p9211 -S'Date' -p9212 -ssS'data_type' -p9213 -(dp9214 -S'editable' -p9215 -I00 -sS'value' -p9216 -S'date' -p9217 -ssS'entity_type' -p9218 -(dp9219 -S'editable' -p9220 -I00 -sS'value' -p9221 -S'TimeLog' -p9222 -ssS'editable' -p9223 -(dp9224 -S'editable' -p9225 -I00 -sS'value' -p9226 -I01 -ssS'unique' -p9227 -(dp9228 -S'editable' -p9229 -I00 -sS'value' -p9230 -I00 -ssS'properties' -p9231 -(dp9232 -S'default_value' -p9233 -(dp9234 -S'editable' -p9235 -I00 -sS'value' -p9236 -NssS'summary_default' -p9237 -(dp9238 -S'editable' -p9239 -I01 -sS'value' -p9240 -S'none' -p9241 -sssS'description' -p9242 -(dp9243 -S'editable' -p9244 -I01 -sS'value' -p9245 -g47 -sssS'cached_display_name' -p9246 -(dp9247 -S'mandatory' -p9248 -(dp9249 -S'editable' -p9250 -I00 -sS'value' -p9251 -I00 -ssS'name' -p9252 -(dp9253 -S'editable' -p9254 -I01 -sS'value' -p9255 -S'Cached Display Name' -p9256 -ssS'data_type' -p9257 -(dp9258 -S'editable' -p9259 -I00 -sS'value' -p9260 -S'text' -p9261 -ssS'entity_type' -p9262 -(dp9263 -S'editable' -p9264 -I00 -sS'value' -p9265 -S'TimeLog' -p9266 -ssS'editable' -p9267 -(dp9268 -S'editable' -p9269 -I00 -sS'value' -p9270 -I01 -ssS'unique' -p9271 -(dp9272 -S'editable' -p9273 -I00 -sS'value' -p9274 -I00 -ssS'properties' -p9275 -(dp9276 -S'default_value' -p9277 -(dp9278 -S'editable' -p9279 -I00 -sS'value' -p9280 -NssS'summary_default' -p9281 -(dp9282 -S'editable' -p9283 -I00 -sS'value' -p9284 -S'none' -p9285 -sssS'description' -p9286 -(dp9287 -S'editable' -p9288 -I01 -sS'value' -p9289 -g47 -sssS'id' -p9290 -(dp9291 -S'mandatory' -p9292 -(dp9293 -S'editable' -p9294 -I00 -sS'value' -p9295 -I01 -ssS'name' -p9296 -(dp9297 -S'editable' -p9298 -I01 -sS'value' -p9299 -S'Id' -p9300 -ssS'data_type' -p9301 -(dp9302 -S'editable' -p9303 -I00 -sS'value' -p9304 -S'number' -p9305 -ssS'entity_type' -p9306 -(dp9307 -S'editable' -p9308 -I00 -sS'value' -p9309 -S'TimeLog' -p9310 -ssS'editable' -p9311 -(dp9312 -S'editable' -p9313 -I00 -sS'value' -p9314 -I00 -ssS'unique' -p9315 -(dp9316 -S'editable' -p9317 -I00 -sS'value' -p9318 -I00 -ssS'properties' -p9319 -(dp9320 -S'default_value' -p9321 -(dp9322 -S'editable' -p9323 -I00 -sS'value' -p9324 -NssS'summary_default' -p9325 -(dp9326 -S'editable' -p9327 -I01 -sS'value' -p9328 -S'none' -p9329 -sssS'description' -p9330 -(dp9331 -S'editable' -p9332 -I01 -sS'value' -p9333 -g47 -sssS'updated_by' -p9334 -(dp9335 -S'mandatory' -p9336 -(dp9337 -S'editable' -p9338 -I00 -sS'value' -p9339 -I00 -ssS'name' -p9340 -(dp9341 -S'editable' -p9342 -I01 -sS'value' -p9343 -S'Updated by' -p9344 -ssS'data_type' -p9345 -(dp9346 -S'editable' -p9347 -I00 -sS'value' -p9348 -S'entity' -p9349 -ssS'entity_type' -p9350 -(dp9351 -S'editable' -p9352 -I00 -sS'value' -p9353 -S'TimeLog' -p9354 -ssS'editable' -p9355 -(dp9356 -S'editable' -p9357 -I00 -sS'value' -p9358 -I00 -ssS'unique' -p9359 -(dp9360 -S'editable' -p9361 -I00 -sS'value' -p9362 -I00 -ssS'properties' -p9363 -(dp9364 -S'default_value' -p9365 -(dp9366 -S'editable' -p9367 -I00 -sS'value' -p9368 -NssS'summary_default' -p9369 -(dp9370 -S'editable' -p9371 -I01 -sS'value' -p9372 -S'none' -p9373 -ssS'valid_types' -p9374 -(dp9375 -S'editable' -p9376 -I01 -sS'value' -p9377 -(lp9378 -S'HumanUser' -p9379 -aS'ApiUser' -p9380 -asssS'description' -p9381 -(dp9382 -S'editable' -p9383 -I01 -sS'value' -p9384 -g47 -ssssS'PlaylistVersionConnection' -p9385 -(dp9386 -S'cached_display_name' -p9387 -(dp9388 -S'mandatory' -p9389 -(dp9390 -S'editable' -p9391 -I00 -sS'value' -p9392 -I00 -ssS'name' -p9393 -(dp9394 -S'editable' -p9395 -I01 -sS'value' -p9396 -S'Cached Display Name' -p9397 -ssS'data_type' -p9398 -(dp9399 -S'editable' -p9400 -I00 -sS'value' -p9401 -S'text' -p9402 -ssS'entity_type' -p9403 -(dp9404 -S'editable' -p9405 -I00 -sS'value' -p9406 -S'PlaylistVersionConnection' -p9407 -ssS'editable' -p9408 -(dp9409 -S'editable' -p9410 -I00 -sS'value' -p9411 -I01 -ssS'unique' -p9412 -(dp9413 -S'editable' -p9414 -I00 -sS'value' -p9415 -I00 -ssS'properties' -p9416 -(dp9417 -S'default_value' -p9418 -(dp9419 -S'editable' -p9420 -I00 -sS'value' -p9421 -NssS'summary_default' -p9422 -(dp9423 -S'editable' -p9424 -I00 -sS'value' -p9425 -S'none' -p9426 -sssS'description' -p9427 -(dp9428 -S'editable' -p9429 -I01 -sS'value' -p9430 -g47 -sssS'version' -p9431 -(dp9432 -S'mandatory' -p9433 -(dp9434 -S'editable' -p9435 -I00 -sS'value' -p9436 -I00 -ssS'name' -p9437 -(dp9438 -S'editable' -p9439 -I01 -sS'value' -p9440 -S'Version' -p9441 -ssS'data_type' -p9442 -(dp9443 -S'editable' -p9444 -I00 -sS'value' -p9445 -S'entity' -p9446 -ssS'entity_type' -p9447 -(dp9448 -S'editable' -p9449 -I00 -sS'value' -p9450 -S'PlaylistVersionConnection' -p9451 -ssS'editable' -p9452 -(dp9453 -S'editable' -p9454 -I00 -sS'value' -p9455 -I00 -ssS'unique' -p9456 -(dp9457 -S'editable' -p9458 -I00 -sS'value' -p9459 -I00 -ssS'properties' -p9460 -(dp9461 -S'default_value' -p9462 -(dp9463 -S'editable' -p9464 -I00 -sS'value' -p9465 -NssS'summary_default' -p9466 -(dp9467 -S'editable' -p9468 -I00 -sS'value' -p9469 -S'none' -p9470 -ssS'valid_types' -p9471 -(dp9472 -S'editable' -p9473 -I00 -sS'value' -p9474 -(lp9475 -S'Version' -p9476 -asssS'description' -p9477 -(dp9478 -S'editable' -p9479 -I01 -sS'value' -p9480 -g47 -sssS'sg_sort_order' -p9481 -(dp9482 -S'mandatory' -p9483 -(dp9484 -S'editable' -p9485 -I00 -sS'value' -p9486 -I00 -ssS'name' -p9487 -(dp9488 -S'editable' -p9489 -I01 -sS'value' -p9490 -S'Sort Order' -p9491 -ssS'data_type' -p9492 -(dp9493 -S'editable' -p9494 -I00 -sS'value' -p9495 -S'number' -p9496 -ssS'entity_type' -p9497 -(dp9498 -S'editable' -p9499 -I00 -sS'value' -p9500 -S'PlaylistVersionConnection' -p9501 -ssS'editable' -p9502 -(dp9503 -S'editable' -p9504 -I00 -sS'value' -p9505 -I01 -ssS'unique' -p9506 -(dp9507 -S'editable' -p9508 -I00 -sS'value' -p9509 -I00 -ssS'properties' -p9510 -(dp9511 -S'default_value' -p9512 -(dp9513 -S'editable' -p9514 -I00 -sS'value' -p9515 -NssS'summary_default' -p9516 -(dp9517 -S'editable' -p9518 -I01 -sS'value' -p9519 -S'none' -p9520 -sssS'description' -p9521 -(dp9522 -S'editable' -p9523 -I01 -sS'value' -p9524 -g47 -sssS'playlist' -p9525 -(dp9526 -S'mandatory' -p9527 -(dp9528 -S'editable' -p9529 -I00 -sS'value' -p9530 -I00 -ssS'name' -p9531 -(dp9532 -S'editable' -p9533 -I01 -sS'value' -p9534 -S'Playlist' -p9535 -ssS'data_type' -p9536 -(dp9537 -S'editable' -p9538 -I00 -sS'value' -p9539 -S'entity' -p9540 -ssS'entity_type' -p9541 -(dp9542 -S'editable' -p9543 -I00 -sS'value' -p9544 -S'PlaylistVersionConnection' -p9545 -ssS'editable' -p9546 -(dp9547 -S'editable' -p9548 -I00 -sS'value' -p9549 -I00 -ssS'unique' -p9550 -(dp9551 -S'editable' -p9552 -I00 -sS'value' -p9553 -I00 -ssS'properties' -p9554 -(dp9555 -S'default_value' -p9556 -(dp9557 -S'editable' -p9558 -I00 -sS'value' -p9559 -NssS'summary_default' -p9560 -(dp9561 -S'editable' -p9562 -I00 -sS'value' -p9563 -S'none' -p9564 -ssS'valid_types' -p9565 -(dp9566 -S'editable' -p9567 -I00 -sS'value' -p9568 -(lp9569 -S'Playlist' -p9570 -asssS'description' -p9571 -(dp9572 -S'editable' -p9573 -I01 -sS'value' -p9574 -g47 -sssS'id' -p9575 -(dp9576 -S'mandatory' -p9577 -(dp9578 -S'editable' -p9579 -I00 -sS'value' -p9580 -I01 -ssS'name' -p9581 -(dp9582 -S'editable' -p9583 -I01 -sS'value' -p9584 -S'Id' -p9585 -ssS'data_type' -p9586 -(dp9587 -S'editable' -p9588 -I00 -sS'value' -p9589 -S'number' -p9590 -ssS'entity_type' -p9591 -(dp9592 -S'editable' -p9593 -I00 -sS'value' -p9594 -S'PlaylistVersionConnection' -p9595 -ssS'editable' -p9596 -(dp9597 -S'editable' -p9598 -I00 -sS'value' -p9599 -I00 -ssS'unique' -p9600 -(dp9601 -S'editable' -p9602 -I00 -sS'value' -p9603 -I00 -ssS'properties' -p9604 -(dp9605 -S'default_value' -p9606 -(dp9607 -S'editable' -p9608 -I00 -sS'value' -p9609 -NssS'summary_default' -p9610 -(dp9611 -S'editable' -p9612 -I00 -sS'value' -p9613 -S'none' -p9614 -sssS'description' -p9615 -(dp9616 -S'editable' -p9617 -I01 -sS'value' -p9618 -g47 -ssssS'CustomNonProjectEntity02' -p9619 -(dp9620 -S'open_notes_count' -p9621 -(dp9622 -S'mandatory' -p9623 -(dp9624 -S'editable' -p9625 -I00 -sS'value' -p9626 -I00 -ssS'name' -p9627 -(dp9628 -S'editable' -p9629 -I01 -sS'value' -p9630 -S'Open Notes Count' -p9631 -ssS'data_type' -p9632 -(dp9633 -S'editable' -p9634 -I00 -sS'value' -p9635 -S'text' -p9636 -ssS'entity_type' -p9637 -(dp9638 -S'editable' -p9639 -I00 -sS'value' -p9640 -S'CustomNonProjectEntity02' -p9641 -ssS'editable' -p9642 -(dp9643 -S'editable' -p9644 -I00 -sS'value' -p9645 -I00 -ssS'unique' -p9646 -(dp9647 -S'editable' -p9648 -I00 -sS'value' -p9649 -I00 -ssS'properties' -p9650 -(dp9651 -S'default_value' -p9652 -(dp9653 -S'editable' -p9654 -I00 -sS'value' -p9655 -NssS'summary_default' -p9656 -(dp9657 -S'editable' -p9658 -I01 -sS'value' -p9659 -S'none' -p9660 -sssS'description' -p9661 -(dp9662 -S'editable' -p9663 -I01 -sS'value' -p9664 -g47 -sssS'code' -p9665 -(dp9666 -S'mandatory' -p9667 -(dp9668 -S'editable' -p9669 -I00 -sS'value' -p9670 -I01 -ssS'name' -p9671 -(dp9672 -S'editable' -p9673 -I01 -sS'value' -p9674 -S'Custom Non Project Entity02 Name' -p9675 -ssS'data_type' -p9676 -(dp9677 -S'editable' -p9678 -I00 -sS'value' -p9679 -S'text' -p9680 -ssS'entity_type' -p9681 -(dp9682 -S'editable' -p9683 -I00 -sS'value' -p9684 -S'CustomNonProjectEntity02' -p9685 -ssS'editable' -p9686 -(dp9687 -S'editable' -p9688 -I00 -sS'value' -p9689 -I01 -ssS'unique' -p9690 -(dp9691 -S'editable' -p9692 -I00 -sS'value' -p9693 -I00 -ssS'properties' -p9694 -(dp9695 -S'default_value' -p9696 -(dp9697 -S'editable' -p9698 -I00 -sS'value' -p9699 -NssS'summary_default' -p9700 -(dp9701 -S'editable' -p9702 -I01 -sS'value' -p9703 -S'none' -p9704 -sssS'description' -p9705 -(dp9706 -S'editable' -p9707 -I01 -sS'value' -p9708 -g47 -sssS'open_notes' -p9709 -(dp9710 -S'mandatory' -p9711 -(dp9712 -S'editable' -p9713 -I00 -sS'value' -p9714 -I00 -ssS'name' -p9715 -(dp9716 -S'editable' -p9717 -I01 -sS'value' -p9718 -S'Open Notes' -p9719 -ssS'data_type' -p9720 -(dp9721 -S'editable' -p9722 -I00 -sS'value' -p9723 -S'multi_entity' -p9724 -ssS'entity_type' -p9725 -(dp9726 -S'editable' -p9727 -I00 -sS'value' -p9728 -S'CustomNonProjectEntity02' -p9729 -ssS'editable' -p9730 -(dp9731 -S'editable' -p9732 -I00 -sS'value' -p9733 -I00 -ssS'unique' -p9734 -(dp9735 -S'editable' -p9736 -I00 -sS'value' -p9737 -I00 -ssS'properties' -p9738 -(dp9739 -S'default_value' -p9740 -(dp9741 -S'editable' -p9742 -I00 -sS'value' -p9743 -NssS'summary_default' -p9744 -(dp9745 -S'editable' -p9746 -I01 -sS'value' -p9747 -S'none' -p9748 -ssS'valid_types' -p9749 -(dp9750 -S'editable' -p9751 -I01 -sS'value' -p9752 -(lp9753 -S'Note' -p9754 -asssS'description' -p9755 -(dp9756 -S'editable' -p9757 -I01 -sS'value' -p9758 -g47 -sssS'description' -p9759 -(dp9760 -S'mandatory' -p9761 -(dp9762 -S'editable' -p9763 -I00 -sS'value' -p9764 -I00 -ssS'name' -p9765 -(dp9766 -S'editable' -p9767 -I01 -sS'value' -p9768 -S'Description' -p9769 -ssS'data_type' -p9770 -(dp9771 -S'editable' -p9772 -I00 -sS'value' -p9773 -S'text' -p9774 -ssS'entity_type' -p9775 -(dp9776 -S'editable' -p9777 -I00 -sS'value' -p9778 -S'CustomNonProjectEntity02' -p9779 -ssS'editable' -p9780 -(dp9781 -S'editable' -p9782 -I00 -sS'value' -p9783 -I01 -ssS'unique' -p9784 -(dp9785 -S'editable' -p9786 -I00 -sS'value' -p9787 -I00 -ssS'properties' -p9788 -(dp9789 -S'default_value' -p9790 -(dp9791 -S'editable' -p9792 -I00 -sS'value' -p9793 -NssS'summary_default' -p9794 -(dp9795 -S'editable' -p9796 -I01 -sS'value' -p9797 -S'none' -p9798 -sssS'description' -p9799 -(dp9800 -S'editable' -p9801 -I01 -sS'value' -p9802 -g47 -sssS'created_at' -p9803 -(dp9804 -S'mandatory' -p9805 -(dp9806 -S'editable' -p9807 -I00 -sS'value' -p9808 -I00 -ssS'name' -p9809 -(dp9810 -S'editable' -p9811 -I01 -sS'value' -p9812 -S'Date Created' -p9813 -ssS'data_type' -p9814 -(dp9815 -S'editable' -p9816 -I00 -sS'value' -p9817 -S'date_time' -p9818 -ssS'entity_type' -p9819 -(dp9820 -S'editable' -p9821 -I00 -sS'value' -p9822 -S'CustomNonProjectEntity02' -p9823 -ssS'editable' -p9824 -(dp9825 -S'editable' -p9826 -I00 -sS'value' -p9827 -I00 -ssS'unique' -p9828 -(dp9829 -S'editable' -p9830 -I00 -sS'value' -p9831 -I00 -ssS'properties' -p9832 -(dp9833 -S'default_value' -p9834 -(dp9835 -S'editable' -p9836 -I00 -sS'value' -p9837 -NssS'summary_default' -p9838 -(dp9839 -S'editable' -p9840 -I01 -sS'value' -p9841 -S'none' -p9842 -sssS'description' -p9843 -(dp9844 -S'editable' -p9845 -I01 -sS'value' -p9846 -g47 -sssS'updated_at' -p9847 -(dp9848 -S'mandatory' -p9849 -(dp9850 -S'editable' -p9851 -I00 -sS'value' -p9852 -I00 -ssS'name' -p9853 -(dp9854 -S'editable' -p9855 -I01 -sS'value' -p9856 -S'Date Updated' -p9857 -ssS'data_type' -p9858 -(dp9859 -S'editable' -p9860 -I00 -sS'value' -p9861 -S'date_time' -p9862 -ssS'entity_type' -p9863 -(dp9864 -S'editable' -p9865 -I00 -sS'value' -p9866 -S'CustomNonProjectEntity02' -p9867 -ssS'editable' -p9868 -(dp9869 -S'editable' -p9870 -I00 -sS'value' -p9871 -I00 -ssS'unique' -p9872 -(dp9873 -S'editable' -p9874 -I00 -sS'value' -p9875 -I00 -ssS'properties' -p9876 -(dp9877 -S'default_value' -p9878 -(dp9879 -S'editable' -p9880 -I00 -sS'value' -p9881 -NssS'summary_default' -p9882 -(dp9883 -S'editable' -p9884 -I01 -sS'value' -p9885 -S'none' -p9886 -sssS'description' -p9887 -(dp9888 -S'editable' -p9889 -I01 -sS'value' -p9890 -g47 -sssS'created_by' -p9891 -(dp9892 -S'mandatory' -p9893 -(dp9894 -S'editable' -p9895 -I00 -sS'value' -p9896 -I00 -ssS'name' -p9897 -(dp9898 -S'editable' -p9899 -I01 -sS'value' -p9900 -S'Created by' -p9901 -ssS'data_type' -p9902 -(dp9903 -S'editable' -p9904 -I00 -sS'value' -p9905 -S'entity' -p9906 -ssS'entity_type' -p9907 -(dp9908 -S'editable' -p9909 -I00 -sS'value' -p9910 -S'CustomNonProjectEntity02' -p9911 -ssS'editable' -p9912 -(dp9913 -S'editable' -p9914 -I00 -sS'value' -p9915 -I00 -ssS'unique' -p9916 -(dp9917 -S'editable' -p9918 -I00 -sS'value' -p9919 -I00 -ssS'properties' -p9920 -(dp9921 -S'default_value' -p9922 -(dp9923 -S'editable' -p9924 -I00 -sS'value' -p9925 -NssS'summary_default' -p9926 -(dp9927 -S'editable' -p9928 -I01 -sS'value' -p9929 -S'none' -p9930 -ssS'valid_types' -p9931 -(dp9932 -S'editable' -p9933 -I01 -sS'value' -p9934 -(lp9935 -S'HumanUser' -p9936 -aS'ApiUser' -p9937 -asssS'description' -p9938 -(dp9939 -S'editable' -p9940 -I01 -sS'value' -p9941 -g47 -sssS'filmstrip_image' -p9942 -(dp9943 -S'mandatory' -p9944 -(dp9945 -S'editable' -p9946 -I00 -sS'value' -p9947 -I00 -ssS'name' -p9948 -(dp9949 -S'editable' -p9950 -I01 -sS'value' -p9951 -S'Filmstrip Thumbnail' -p9952 -ssS'data_type' -p9953 -(dp9954 -S'editable' -p9955 -I00 -sS'value' -p9956 -S'image' -p9957 -ssS'entity_type' -p9958 -(dp9959 -S'editable' -p9960 -I00 -sS'value' -p9961 -S'CustomNonProjectEntity02' -p9962 -ssS'editable' -p9963 -(dp9964 -S'editable' -p9965 -I00 -sS'value' -p9966 -I01 -ssS'unique' -p9967 -(dp9968 -S'editable' -p9969 -I00 -sS'value' -p9970 -I00 -ssS'properties' -p9971 -(dp9972 -S'default_value' -p9973 -(dp9974 -S'editable' -p9975 -I00 -sS'value' -p9976 -NssS'summary_default' -p9977 -(dp9978 -S'editable' -p9979 -I01 -sS'value' -p9980 -S'none' -p9981 -sssS'description' -p9982 -(dp9983 -S'editable' -p9984 -I01 -sS'value' -p9985 -g47 -sssS'sg_status_list' -p9986 -(dp9987 -S'mandatory' -p9988 -(dp9989 -S'editable' -p9990 -I00 -sS'value' -p9991 -I00 -ssS'name' -p9992 -(dp9993 -S'editable' -p9994 -I01 -sS'value' -p9995 -S'Status' -p9996 -ssS'data_type' -p9997 -(dp9998 -S'editable' -p9999 -I00 -sS'value' -p10000 -S'status_list' -p10001 -ssS'entity_type' -p10002 -(dp10003 -S'editable' -p10004 -I00 -sS'value' -p10005 -S'CustomNonProjectEntity02' -p10006 -ssS'editable' -p10007 -(dp10008 -S'editable' -p10009 -I00 -sS'value' -p10010 -I01 -ssS'unique' -p10011 -(dp10012 -S'editable' -p10013 -I00 -sS'value' -p10014 -I00 -ssS'properties' -p10015 -(dp10016 -S'default_value' -p10017 -(dp10018 -S'editable' -p10019 -I01 -sS'value' -p10020 -S'wtg' -p10021 -ssS'valid_values' -p10022 -(dp10023 -S'editable' -p10024 -I01 -sS'value' -p10025 -(lp10026 -S'cmpt' -p10027 -aS'ip' -p10028 -aS'wtg' -p10029 -assS'summary_default' -p10030 -(dp10031 -S'editable' -p10032 -I01 -sS'value' -p10033 -S'none' -p10034 -sssS'description' -p10035 -(dp10036 -S'editable' -p10037 -I01 -sS'value' -p10038 -g47 -sssS'notes' -p10039 -(dp10040 -S'mandatory' -p10041 -(dp10042 -S'editable' -p10043 -I00 -sS'value' -p10044 -I00 -ssS'name' -p10045 -(dp10046 -S'editable' -p10047 -I01 -sS'value' -p10048 -S'Notes' -p10049 -ssS'data_type' -p10050 -(dp10051 -S'editable' -p10052 -I00 -sS'value' -p10053 -S'multi_entity' -p10054 -ssS'entity_type' -p10055 -(dp10056 -S'editable' -p10057 -I00 -sS'value' -p10058 -S'CustomNonProjectEntity02' -p10059 -ssS'editable' -p10060 -(dp10061 -S'editable' -p10062 -I00 -sS'value' -p10063 -I01 -ssS'unique' -p10064 -(dp10065 -S'editable' -p10066 -I00 -sS'value' -p10067 -I00 -ssS'properties' -p10068 -(dp10069 -S'default_value' -p10070 -(dp10071 -S'editable' -p10072 -I00 -sS'value' -p10073 -NssS'summary_default' -p10074 -(dp10075 -S'editable' -p10076 -I01 -sS'value' -p10077 -S'none' -p10078 -ssS'valid_types' -p10079 -(dp10080 -S'editable' -p10081 -I01 -sS'value' -p10082 -(lp10083 -S'Note' -p10084 -asssS'description' -p10085 -(dp10086 -S'editable' -p10087 -I01 -sS'value' -p10088 -g47 -sssS'image' -p10089 -(dp10090 -S'mandatory' -p10091 -(dp10092 -S'editable' -p10093 -I00 -sS'value' -p10094 -I00 -ssS'name' -p10095 -(dp10096 -S'editable' -p10097 -I01 -sS'value' -p10098 -S'Thumbnail' -p10099 -ssS'data_type' -p10100 -(dp10101 -S'editable' -p10102 -I00 -sS'value' -p10103 -S'image' -p10104 -ssS'entity_type' -p10105 -(dp10106 -S'editable' -p10107 -I00 -sS'value' -p10108 -S'CustomNonProjectEntity02' -p10109 -ssS'editable' -p10110 -(dp10111 -S'editable' -p10112 -I00 -sS'value' -p10113 -I01 -ssS'unique' -p10114 -(dp10115 -S'editable' -p10116 -I00 -sS'value' -p10117 -I00 -ssS'properties' -p10118 -(dp10119 -S'default_value' -p10120 -(dp10121 -S'editable' -p10122 -I00 -sS'value' -p10123 -NssS'summary_default' -p10124 -(dp10125 -S'editable' -p10126 -I01 -sS'value' -p10127 -S'none' -p10128 -sssS'description' -p10129 -(dp10130 -S'editable' -p10131 -I01 -sS'value' -p10132 -g47 -sssS'cached_display_name' -p10133 -(dp10134 -S'mandatory' -p10135 -(dp10136 -S'editable' -p10137 -I00 -sS'value' -p10138 -I00 -ssS'name' -p10139 -(dp10140 -S'editable' -p10141 -I01 -sS'value' -p10142 -S'Cached Display Name' -p10143 -ssS'data_type' -p10144 -(dp10145 -S'editable' -p10146 -I00 -sS'value' -p10147 -S'text' -p10148 -ssS'entity_type' -p10149 -(dp10150 -S'editable' -p10151 -I00 -sS'value' -p10152 -S'CustomNonProjectEntity02' -p10153 -ssS'editable' -p10154 -(dp10155 -S'editable' -p10156 -I00 -sS'value' -p10157 -I01 -ssS'unique' -p10158 -(dp10159 -S'editable' -p10160 -I00 -sS'value' -p10161 -I00 -ssS'properties' -p10162 -(dp10163 -S'default_value' -p10164 -(dp10165 -S'editable' -p10166 -I00 -sS'value' -p10167 -NssS'summary_default' -p10168 -(dp10169 -S'editable' -p10170 -I00 -sS'value' -p10171 -S'none' -p10172 -sssS'description' -p10173 -(dp10174 -S'editable' -p10175 -I01 -sS'value' -p10176 -g47 -sssS'tag_list' -p10177 -(dp10178 -S'mandatory' -p10179 -(dp10180 -S'editable' -p10181 -I00 -sS'value' -p10182 -I00 -ssS'name' -p10183 -(dp10184 -S'editable' -p10185 -I01 -sS'value' -p10186 -S'Tags' -p10187 -ssS'data_type' -p10188 -(dp10189 -S'editable' -p10190 -I00 -sS'value' -p10191 -S'tag_list' -p10192 -ssS'entity_type' -p10193 -(dp10194 -S'editable' -p10195 -I00 -sS'value' -p10196 -S'CustomNonProjectEntity02' -p10197 -ssS'editable' -p10198 -(dp10199 -S'editable' -p10200 -I00 -sS'value' -p10201 -I01 -ssS'unique' -p10202 -(dp10203 -S'editable' -p10204 -I00 -sS'value' -p10205 -I00 -ssS'properties' -p10206 -(dp10207 -S'default_value' -p10208 -(dp10209 -S'editable' -p10210 -I00 -sS'value' -p10211 -NssS'summary_default' -p10212 -(dp10213 -S'editable' -p10214 -I01 -sS'value' -p10215 -S'none' -p10216 -ssS'valid_types' -p10217 -(dp10218 -S'editable' -p10219 -I01 -sS'value' -p10220 -(lp10221 -S'Tag' -p10222 -asssS'description' -p10223 -(dp10224 -S'editable' -p10225 -I01 -sS'value' -p10226 -g47 -sssS'id' -p10227 -(dp10228 -S'mandatory' -p10229 -(dp10230 -S'editable' -p10231 -I00 -sS'value' -p10232 -I00 -ssS'name' -p10233 -(dp10234 -S'editable' -p10235 -I01 -sS'value' -p10236 -S'Id' -p10237 -ssS'data_type' -p10238 -(dp10239 -S'editable' -p10240 -I00 -sS'value' -p10241 -S'number' -p10242 -ssS'entity_type' -p10243 -(dp10244 -S'editable' -p10245 -I00 -sS'value' -p10246 -S'CustomNonProjectEntity02' -p10247 -ssS'editable' -p10248 -(dp10249 -S'editable' -p10250 -I00 -sS'value' -p10251 -I00 -ssS'unique' -p10252 -(dp10253 -S'editable' -p10254 -I00 -sS'value' -p10255 -I00 -ssS'properties' -p10256 -(dp10257 -S'default_value' -p10258 -(dp10259 -S'editable' -p10260 -I00 -sS'value' -p10261 -NssS'summary_default' -p10262 -(dp10263 -S'editable' -p10264 -I01 -sS'value' -p10265 -S'none' -p10266 -sssS'description' -p10267 -(dp10268 -S'editable' -p10269 -I01 -sS'value' -p10270 -g47 -sssS'updated_by' -p10271 -(dp10272 -S'mandatory' -p10273 -(dp10274 -S'editable' -p10275 -I00 -sS'value' -p10276 -I00 -ssS'name' -p10277 -(dp10278 -S'editable' -p10279 -I01 -sS'value' -p10280 -S'Updated by' -p10281 -ssS'data_type' -p10282 -(dp10283 -S'editable' -p10284 -I00 -sS'value' -p10285 -S'entity' -p10286 -ssS'entity_type' -p10287 -(dp10288 -S'editable' -p10289 -I00 -sS'value' -p10290 -S'CustomNonProjectEntity02' -p10291 -ssS'editable' -p10292 -(dp10293 -S'editable' -p10294 -I00 -sS'value' -p10295 -I00 -ssS'unique' -p10296 -(dp10297 -S'editable' -p10298 -I00 -sS'value' -p10299 -I00 -ssS'properties' -p10300 -(dp10301 -S'default_value' -p10302 -(dp10303 -S'editable' -p10304 -I00 -sS'value' -p10305 -NssS'summary_default' -p10306 -(dp10307 -S'editable' -p10308 -I01 -sS'value' -p10309 -S'none' -p10310 -ssS'valid_types' -p10311 -(dp10312 -S'editable' -p10313 -I01 -sS'value' -p10314 -(lp10315 -S'HumanUser' -p10316 -aS'ApiUser' -p10317 -asssS'description' -p10318 -(dp10319 -S'editable' -p10320 -I01 -sS'value' -p10321 -g47 -ssssS'AssetElementConnection' -p10322 -(dp10323 -S'cached_display_name' -p10324 -(dp10325 -S'mandatory' -p10326 -(dp10327 -S'editable' -p10328 -I00 -sS'value' -p10329 -I00 -ssS'name' -p10330 -(dp10331 -S'editable' -p10332 -I01 -sS'value' -p10333 -S'Cached Display Name' -p10334 -ssS'data_type' -p10335 -(dp10336 -S'editable' -p10337 -I00 -sS'value' -p10338 -S'text' -p10339 -ssS'entity_type' -p10340 -(dp10341 -S'editable' -p10342 -I00 -sS'value' -p10343 -S'AssetElementConnection' -p10344 -ssS'editable' -p10345 -(dp10346 -S'editable' -p10347 -I00 -sS'value' -p10348 -I01 -ssS'unique' -p10349 -(dp10350 -S'editable' -p10351 -I00 -sS'value' -p10352 -I00 -ssS'properties' -p10353 -(dp10354 -S'default_value' -p10355 -(dp10356 -S'editable' -p10357 -I00 -sS'value' -p10358 -NssS'summary_default' -p10359 -(dp10360 -S'editable' -p10361 -I00 -sS'value' -p10362 -S'none' -p10363 -sssS'description' -p10364 -(dp10365 -S'editable' -p10366 -I01 -sS'value' -p10367 -g47 -sssS'element' -p10368 -(dp10369 -S'mandatory' -p10370 -(dp10371 -S'editable' -p10372 -I00 -sS'value' -p10373 -I00 -ssS'name' -p10374 -(dp10375 -S'editable' -p10376 -I01 -sS'value' -p10377 -S'Element' -p10378 -ssS'data_type' -p10379 -(dp10380 -S'editable' -p10381 -I00 -sS'value' -p10382 -S'entity' -p10383 -ssS'entity_type' -p10384 -(dp10385 -S'editable' -p10386 -I00 -sS'value' -p10387 -S'AssetElementConnection' -p10388 -ssS'editable' -p10389 -(dp10390 -S'editable' -p10391 -I00 -sS'value' -p10392 -I00 -ssS'unique' -p10393 -(dp10394 -S'editable' -p10395 -I00 -sS'value' -p10396 -I00 -ssS'properties' -p10397 -(dp10398 -S'default_value' -p10399 -(dp10400 -S'editable' -p10401 -I00 -sS'value' -p10402 -NssS'summary_default' -p10403 -(dp10404 -S'editable' -p10405 -I00 -sS'value' -p10406 -S'none' -p10407 -ssS'valid_types' -p10408 -(dp10409 -S'editable' -p10410 -I00 -sS'value' -p10411 -(lp10412 -S'Element' -p10413 -asssS'description' -p10414 -(dp10415 -S'editable' -p10416 -I01 -sS'value' -p10417 -g47 -sssS'asset' -p10418 -(dp10419 -S'mandatory' -p10420 -(dp10421 -S'editable' -p10422 -I00 -sS'value' -p10423 -I00 -ssS'name' -p10424 -(dp10425 -S'editable' -p10426 -I01 -sS'value' -p10427 -S'Asset' -p10428 -ssS'data_type' -p10429 -(dp10430 -S'editable' -p10431 -I00 -sS'value' -p10432 -S'entity' -p10433 -ssS'entity_type' -p10434 -(dp10435 -S'editable' -p10436 -I00 -sS'value' -p10437 -S'AssetElementConnection' -p10438 -ssS'editable' -p10439 -(dp10440 -S'editable' -p10441 -I00 -sS'value' -p10442 -I00 -ssS'unique' -p10443 -(dp10444 -S'editable' -p10445 -I00 -sS'value' -p10446 -I00 -ssS'properties' -p10447 -(dp10448 -S'default_value' -p10449 -(dp10450 -S'editable' -p10451 -I00 -sS'value' -p10452 -NssS'summary_default' -p10453 -(dp10454 -S'editable' -p10455 -I00 -sS'value' -p10456 -S'none' -p10457 -ssS'valid_types' -p10458 -(dp10459 -S'editable' -p10460 -I00 -sS'value' -p10461 -(lp10462 -S'Asset' -p10463 -asssS'description' -p10464 -(dp10465 -S'editable' -p10466 -I01 -sS'value' -p10467 -g47 -sssS'id' -p10468 -(dp10469 -S'mandatory' -p10470 -(dp10471 -S'editable' -p10472 -I00 -sS'value' -p10473 -I01 -ssS'name' -p10474 -(dp10475 -S'editable' -p10476 -I01 -sS'value' -p10477 -S'Id' -p10478 -ssS'data_type' -p10479 -(dp10480 -S'editable' -p10481 -I00 -sS'value' -p10482 -S'number' -p10483 -ssS'entity_type' -p10484 -(dp10485 -S'editable' -p10486 -I00 -sS'value' -p10487 -S'AssetElementConnection' -p10488 -ssS'editable' -p10489 -(dp10490 -S'editable' -p10491 -I00 -sS'value' -p10492 -I00 -ssS'unique' -p10493 -(dp10494 -S'editable' -p10495 -I00 -sS'value' -p10496 -I00 -ssS'properties' -p10497 -(dp10498 -S'default_value' -p10499 -(dp10500 -S'editable' -p10501 -I00 -sS'value' -p10502 -NssS'summary_default' -p10503 -(dp10504 -S'editable' -p10505 -I00 -sS'value' -p10506 -S'none' -p10507 -sssS'description' -p10508 -(dp10509 -S'editable' -p10510 -I01 -sS'value' -p10511 -g47 -ssssS'ReleaseTicketConnection' -p10512 -(dp10513 -S'release' -p10514 -(dp10515 -S'mandatory' -p10516 -(dp10517 -S'editable' -p10518 -I00 -sS'value' -p10519 -I00 -ssS'name' -p10520 -(dp10521 -S'editable' -p10522 -I01 -sS'value' -p10523 -S'Release' -p10524 -ssS'data_type' -p10525 -(dp10526 -S'editable' -p10527 -I00 -sS'value' -p10528 -S'entity' -p10529 -ssS'entity_type' -p10530 -(dp10531 -S'editable' -p10532 -I00 -sS'value' -p10533 -S'ReleaseTicketConnection' -p10534 -ssS'editable' -p10535 -(dp10536 -S'editable' -p10537 -I00 -sS'value' -p10538 -I00 -ssS'unique' -p10539 -(dp10540 -S'editable' -p10541 -I00 -sS'value' -p10542 -I00 -ssS'properties' -p10543 -(dp10544 -S'default_value' -p10545 -(dp10546 -S'editable' -p10547 -I00 -sS'value' -p10548 -NssS'summary_default' -p10549 -(dp10550 -S'editable' -p10551 -I00 -sS'value' -p10552 -S'none' -p10553 -ssS'valid_types' -p10554 -(dp10555 -S'editable' -p10556 -I00 -sS'value' -p10557 -(lp10558 -S'Release' -p10559 -asssS'description' -p10560 -(dp10561 -S'editable' -p10562 -I01 -sS'value' -p10563 -g47 -sssS'ticket' -p10564 -(dp10565 -S'mandatory' -p10566 -(dp10567 -S'editable' -p10568 -I00 -sS'value' -p10569 -I00 -ssS'name' -p10570 -(dp10571 -S'editable' -p10572 -I01 -sS'value' -p10573 -S'Ticket' -p10574 -ssS'data_type' -p10575 -(dp10576 -S'editable' -p10577 -I00 -sS'value' -p10578 -S'entity' -p10579 -ssS'entity_type' -p10580 -(dp10581 -S'editable' -p10582 -I00 -sS'value' -p10583 -S'ReleaseTicketConnection' -p10584 -ssS'editable' -p10585 -(dp10586 -S'editable' -p10587 -I00 -sS'value' -p10588 -I00 -ssS'unique' -p10589 -(dp10590 -S'editable' -p10591 -I00 -sS'value' -p10592 -I00 -ssS'properties' -p10593 -(dp10594 -S'default_value' -p10595 -(dp10596 -S'editable' -p10597 -I00 -sS'value' -p10598 -NssS'summary_default' -p10599 -(dp10600 -S'editable' -p10601 -I00 -sS'value' -p10602 -S'none' -p10603 -ssS'valid_types' -p10604 -(dp10605 -S'editable' -p10606 -I00 -sS'value' -p10607 -(lp10608 -S'Ticket' -p10609 -asssS'description' -p10610 -(dp10611 -S'editable' -p10612 -I01 -sS'value' -p10613 -g47 -sssS'id' -p10614 -(dp10615 -S'mandatory' -p10616 -(dp10617 -S'editable' -p10618 -I00 -sS'value' -p10619 -I01 -ssS'name' -p10620 -(dp10621 -S'editable' -p10622 -I01 -sS'value' -p10623 -S'Id' -p10624 -ssS'data_type' -p10625 -(dp10626 -S'editable' -p10627 -I00 -sS'value' -p10628 -S'number' -p10629 -ssS'entity_type' -p10630 -(dp10631 -S'editable' -p10632 -I00 -sS'value' -p10633 -S'ReleaseTicketConnection' -p10634 -ssS'editable' -p10635 -(dp10636 -S'editable' -p10637 -I00 -sS'value' -p10638 -I00 -ssS'unique' -p10639 -(dp10640 -S'editable' -p10641 -I00 -sS'value' -p10642 -I00 -ssS'properties' -p10643 -(dp10644 -S'default_value' -p10645 -(dp10646 -S'editable' -p10647 -I00 -sS'value' -p10648 -NssS'summary_default' -p10649 -(dp10650 -S'editable' -p10651 -I00 -sS'value' -p10652 -S'none' -p10653 -sssS'description' -p10654 -(dp10655 -S'editable' -p10656 -I01 -sS'value' -p10657 -g47 -sssS'cached_display_name' -p10658 -(dp10659 -S'mandatory' -p10660 -(dp10661 -S'editable' -p10662 -I00 -sS'value' -p10663 -I00 -ssS'name' -p10664 -(dp10665 -S'editable' -p10666 -I01 -sS'value' -p10667 -S'Cached Display Name' -p10668 -ssS'data_type' -p10669 -(dp10670 -S'editable' -p10671 -I00 -sS'value' -p10672 -S'text' -p10673 -ssS'entity_type' -p10674 -(dp10675 -S'editable' -p10676 -I00 -sS'value' -p10677 -S'ReleaseTicketConnection' -p10678 -ssS'editable' -p10679 -(dp10680 -S'editable' -p10681 -I00 -sS'value' -p10682 -I01 -ssS'unique' -p10683 -(dp10684 -S'editable' -p10685 -I00 -sS'value' -p10686 -I00 -ssS'properties' -p10687 -(dp10688 -S'default_value' -p10689 -(dp10690 -S'editable' -p10691 -I00 -sS'value' -p10692 -NssS'summary_default' -p10693 -(dp10694 -S'editable' -p10695 -I00 -sS'value' -p10696 -S'none' -p10697 -sssS'description' -p10698 -(dp10699 -S'editable' -p10700 -I01 -sS'value' -p10701 -g47 -ssssS'RevisionRevisionConnection' -p10702 -(dp10703 -S'dest_revision' -p10704 -(dp10705 -S'mandatory' -p10706 -(dp10707 -S'editable' -p10708 -I00 -sS'value' -p10709 -I00 -ssS'name' -p10710 -(dp10711 -S'editable' -p10712 -I01 -sS'value' -p10713 -S'Destination Revision' -p10714 -ssS'data_type' -p10715 -(dp10716 -S'editable' -p10717 -I00 -sS'value' -p10718 -S'entity' -p10719 -ssS'entity_type' -p10720 -(dp10721 -S'editable' -p10722 -I00 -sS'value' -p10723 -S'RevisionRevisionConnection' -p10724 -ssS'editable' -p10725 -(dp10726 -S'editable' -p10727 -I00 -sS'value' -p10728 -I00 -ssS'unique' -p10729 -(dp10730 -S'editable' -p10731 -I00 -sS'value' -p10732 -I00 -ssS'properties' -p10733 -(dp10734 -S'default_value' -p10735 -(dp10736 -S'editable' -p10737 -I00 -sS'value' -p10738 -NssS'summary_default' -p10739 -(dp10740 -S'editable' -p10741 -I00 -sS'value' -p10742 -S'none' -p10743 -ssS'valid_types' -p10744 -(dp10745 -S'editable' -p10746 -I00 -sS'value' -p10747 -(lp10748 -S'Revision' -p10749 -asssS'description' -p10750 -(dp10751 -S'editable' -p10752 -I01 -sS'value' -p10753 -g47 -sssS'source_revision' -p10754 -(dp10755 -S'mandatory' -p10756 -(dp10757 -S'editable' -p10758 -I00 -sS'value' -p10759 -I00 -ssS'name' -p10760 -(dp10761 -S'editable' -p10762 -I01 -sS'value' -p10763 -S'Source Revision' -p10764 -ssS'data_type' -p10765 -(dp10766 -S'editable' -p10767 -I00 -sS'value' -p10768 -S'entity' -p10769 -ssS'entity_type' -p10770 -(dp10771 -S'editable' -p10772 -I00 -sS'value' -p10773 -S'RevisionRevisionConnection' -p10774 -ssS'editable' -p10775 -(dp10776 -S'editable' -p10777 -I00 -sS'value' -p10778 -I00 -ssS'unique' -p10779 -(dp10780 -S'editable' -p10781 -I00 -sS'value' -p10782 -I00 -ssS'properties' -p10783 -(dp10784 -S'default_value' -p10785 -(dp10786 -S'editable' -p10787 -I00 -sS'value' -p10788 -NssS'summary_default' -p10789 -(dp10790 -S'editable' -p10791 -I00 -sS'value' -p10792 -S'none' -p10793 -ssS'valid_types' -p10794 -(dp10795 -S'editable' -p10796 -I00 -sS'value' -p10797 -(lp10798 -S'Revision' -p10799 -asssS'description' -p10800 -(dp10801 -S'editable' -p10802 -I01 -sS'value' -p10803 -g47 -sssS'id' -p10804 -(dp10805 -S'mandatory' -p10806 -(dp10807 -S'editable' -p10808 -I00 -sS'value' -p10809 -I01 -ssS'name' -p10810 -(dp10811 -S'editable' -p10812 -I01 -sS'value' -p10813 -S'Id' -p10814 -ssS'data_type' -p10815 -(dp10816 -S'editable' -p10817 -I00 -sS'value' -p10818 -S'number' -p10819 -ssS'entity_type' -p10820 -(dp10821 -S'editable' -p10822 -I00 -sS'value' -p10823 -S'RevisionRevisionConnection' -p10824 -ssS'editable' -p10825 -(dp10826 -S'editable' -p10827 -I00 -sS'value' -p10828 -I00 -ssS'unique' -p10829 -(dp10830 -S'editable' -p10831 -I00 -sS'value' -p10832 -I00 -ssS'properties' -p10833 -(dp10834 -S'default_value' -p10835 -(dp10836 -S'editable' -p10837 -I00 -sS'value' -p10838 -NssS'summary_default' -p10839 -(dp10840 -S'editable' -p10841 -I00 -sS'value' -p10842 -S'none' -p10843 -sssS'description' -p10844 -(dp10845 -S'editable' -p10846 -I01 -sS'value' -p10847 -g47 -sssS'cached_display_name' -p10848 -(dp10849 -S'mandatory' -p10850 -(dp10851 -S'editable' -p10852 -I00 -sS'value' -p10853 -I00 -ssS'name' -p10854 -(dp10855 -S'editable' -p10856 -I01 -sS'value' -p10857 -S'Cached Display Name' -p10858 -ssS'data_type' -p10859 -(dp10860 -S'editable' -p10861 -I00 -sS'value' -p10862 -S'text' -p10863 -ssS'entity_type' -p10864 -(dp10865 -S'editable' -p10866 -I00 -sS'value' -p10867 -S'RevisionRevisionConnection' -p10868 -ssS'editable' -p10869 -(dp10870 -S'editable' -p10871 -I00 -sS'value' -p10872 -I01 -ssS'unique' -p10873 -(dp10874 -S'editable' -p10875 -I00 -sS'value' -p10876 -I00 -ssS'properties' -p10877 -(dp10878 -S'default_value' -p10879 -(dp10880 -S'editable' -p10881 -I00 -sS'value' -p10882 -NssS'summary_default' -p10883 -(dp10884 -S'editable' -p10885 -I00 -sS'value' -p10886 -S'none' -p10887 -sssS'description' -p10888 -(dp10889 -S'editable' -p10890 -I01 -sS'value' -p10891 -g47 -ssssS'ProjectUserConnection' -p10892 -(dp10893 -S'project' -p10894 -(dp10895 -S'mandatory' -p10896 -(dp10897 -S'editable' -p10898 -I00 -sS'value' -p10899 -I00 -ssS'name' -p10900 -(dp10901 -S'editable' -p10902 -I01 -sS'value' -p10903 -S'Project' -p10904 -ssS'data_type' -p10905 -(dp10906 -S'editable' -p10907 -I00 -sS'value' -p10908 -S'entity' -p10909 -ssS'entity_type' -p10910 -(dp10911 -S'editable' -p10912 -I00 -sS'value' -p10913 -S'ProjectUserConnection' -p10914 -ssS'editable' -p10915 -(dp10916 -S'editable' -p10917 -I00 -sS'value' -p10918 -I00 -ssS'unique' -p10919 -(dp10920 -S'editable' -p10921 -I00 -sS'value' -p10922 -I00 -ssS'properties' -p10923 -(dp10924 -S'default_value' -p10925 -(dp10926 -S'editable' -p10927 -I00 -sS'value' -p10928 -NssS'summary_default' -p10929 -(dp10930 -S'editable' -p10931 -I00 -sS'value' -p10932 -S'none' -p10933 -ssS'valid_types' -p10934 -(dp10935 -S'editable' -p10936 -I00 -sS'value' -p10937 -(lp10938 -S'Project' -p10939 -asssS'description' -p10940 -(dp10941 -S'editable' -p10942 -I01 -sS'value' -p10943 -g47 -sssS'cached_display_name' -p10944 -(dp10945 -S'mandatory' -p10946 -(dp10947 -S'editable' -p10948 -I00 -sS'value' -p10949 -I00 -ssS'name' -p10950 -(dp10951 -S'editable' -p10952 -I01 -sS'value' -p10953 -S'Cached Display Name' -p10954 -ssS'data_type' -p10955 -(dp10956 -S'editable' -p10957 -I00 -sS'value' -p10958 -S'text' -p10959 -ssS'entity_type' -p10960 -(dp10961 -S'editable' -p10962 -I00 -sS'value' -p10963 -S'ProjectUserConnection' -p10964 -ssS'editable' -p10965 -(dp10966 -S'editable' -p10967 -I00 -sS'value' -p10968 -I01 -ssS'unique' -p10969 -(dp10970 -S'editable' -p10971 -I00 -sS'value' -p10972 -I00 -ssS'properties' -p10973 -(dp10974 -S'default_value' -p10975 -(dp10976 -S'editable' -p10977 -I00 -sS'value' -p10978 -NssS'summary_default' -p10979 -(dp10980 -S'editable' -p10981 -I00 -sS'value' -p10982 -S'none' -p10983 -sssS'description' -p10984 -(dp10985 -S'editable' -p10986 -I01 -sS'value' -p10987 -g47 -sssS'id' -p10988 -(dp10989 -S'mandatory' -p10990 -(dp10991 -S'editable' -p10992 -I00 -sS'value' -p10993 -I01 -ssS'name' -p10994 -(dp10995 -S'editable' -p10996 -I01 -sS'value' -p10997 -S'Id' -p10998 -ssS'data_type' -p10999 -(dp11000 -S'editable' -p11001 -I00 -sS'value' -p11002 -S'number' -p11003 -ssS'entity_type' -p11004 -(dp11005 -S'editable' -p11006 -I00 -sS'value' -p11007 -S'ProjectUserConnection' -p11008 -ssS'editable' -p11009 -(dp11010 -S'editable' -p11011 -I00 -sS'value' -p11012 -I00 -ssS'unique' -p11013 -(dp11014 -S'editable' -p11015 -I00 -sS'value' -p11016 -I00 -ssS'properties' -p11017 -(dp11018 -S'default_value' -p11019 -(dp11020 -S'editable' -p11021 -I00 -sS'value' -p11022 -NssS'summary_default' -p11023 -(dp11024 -S'editable' -p11025 -I00 -sS'value' -p11026 -S'none' -p11027 -sssS'description' -p11028 -(dp11029 -S'editable' -p11030 -I01 -sS'value' -p11031 -g47 -sssS'user' -p11032 -(dp11033 -S'mandatory' -p11034 -(dp11035 -S'editable' -p11036 -I00 -sS'value' -p11037 -I00 -ssS'name' -p11038 -(dp11039 -S'editable' -p11040 -I01 -sS'value' -p11041 -S'Person' -p11042 -ssS'data_type' -p11043 -(dp11044 -S'editable' -p11045 -I00 -sS'value' -p11046 -S'entity' -p11047 -ssS'entity_type' -p11048 -(dp11049 -S'editable' -p11050 -I00 -sS'value' -p11051 -S'ProjectUserConnection' -p11052 -ssS'editable' -p11053 -(dp11054 -S'editable' -p11055 -I00 -sS'value' -p11056 -I00 -ssS'unique' -p11057 -(dp11058 -S'editable' -p11059 -I00 -sS'value' -p11060 -I00 -ssS'properties' -p11061 -(dp11062 -S'default_value' -p11063 -(dp11064 -S'editable' -p11065 -I00 -sS'value' -p11066 -NssS'summary_default' -p11067 -(dp11068 -S'editable' -p11069 -I00 -sS'value' -p11070 -S'none' -p11071 -ssS'valid_types' -p11072 -(dp11073 -S'editable' -p11074 -I00 -sS'value' -p11075 -(lp11076 -S'HumanUser' -p11077 -asssS'description' -p11078 -(dp11079 -S'editable' -p11080 -I01 -sS'value' -p11081 -g47 -ssssS'MocapTakeRangeShotConnection' -p11082 -(dp11083 -S'mocap_take_range' -p11084 -(dp11085 -S'mandatory' -p11086 -(dp11087 -S'editable' -p11088 -I00 -sS'value' -p11089 -I00 -ssS'name' -p11090 -(dp11091 -S'editable' -p11092 -I01 -sS'value' -p11093 -S'Mocap Take Range' -p11094 -ssS'data_type' -p11095 -(dp11096 -S'editable' -p11097 -I00 -sS'value' -p11098 -S'entity' -p11099 -ssS'entity_type' -p11100 -(dp11101 -S'editable' -p11102 -I00 -sS'value' -p11103 -S'MocapTakeRangeShotConnection' -p11104 -ssS'editable' -p11105 -(dp11106 -S'editable' -p11107 -I00 -sS'value' -p11108 -I00 -ssS'unique' -p11109 -(dp11110 -S'editable' -p11111 -I00 -sS'value' -p11112 -I00 -ssS'properties' -p11113 -(dp11114 -S'default_value' -p11115 -(dp11116 -S'editable' -p11117 -I00 -sS'value' -p11118 -NssS'summary_default' -p11119 -(dp11120 -S'editable' -p11121 -I00 -sS'value' -p11122 -S'none' -p11123 -ssS'valid_types' -p11124 -(dp11125 -S'editable' -p11126 -I00 -sS'value' -p11127 -(lp11128 -S'MocapTakeRange' -p11129 -asssS'description' -p11130 -(dp11131 -S'editable' -p11132 -I01 -sS'value' -p11133 -g47 -sssS'cached_display_name' -p11134 -(dp11135 -S'mandatory' -p11136 -(dp11137 -S'editable' -p11138 -I00 -sS'value' -p11139 -I00 -ssS'name' -p11140 -(dp11141 -S'editable' -p11142 -I01 -sS'value' -p11143 -S'Cached Display Name' -p11144 -ssS'data_type' -p11145 -(dp11146 -S'editable' -p11147 -I00 -sS'value' -p11148 -S'text' -p11149 -ssS'entity_type' -p11150 -(dp11151 -S'editable' -p11152 -I00 -sS'value' -p11153 -S'MocapTakeRangeShotConnection' -p11154 -ssS'editable' -p11155 -(dp11156 -S'editable' -p11157 -I00 -sS'value' -p11158 -I01 -ssS'unique' -p11159 -(dp11160 -S'editable' -p11161 -I00 -sS'value' -p11162 -I00 -ssS'properties' -p11163 -(dp11164 -S'default_value' -p11165 -(dp11166 -S'editable' -p11167 -I00 -sS'value' -p11168 -NssS'summary_default' -p11169 -(dp11170 -S'editable' -p11171 -I00 -sS'value' -p11172 -S'none' -p11173 -sssS'description' -p11174 -(dp11175 -S'editable' -p11176 -I01 -sS'value' -p11177 -g47 -sssS'shot' -p11178 -(dp11179 -S'mandatory' -p11180 -(dp11181 -S'editable' -p11182 -I00 -sS'value' -p11183 -I00 -ssS'name' -p11184 -(dp11185 -S'editable' -p11186 -I01 -sS'value' -p11187 -S'Shot' -p11188 -ssS'data_type' -p11189 -(dp11190 -S'editable' -p11191 -I00 -sS'value' -p11192 -S'entity' -p11193 -ssS'entity_type' -p11194 -(dp11195 -S'editable' -p11196 -I00 -sS'value' -p11197 -S'MocapTakeRangeShotConnection' -p11198 -ssS'editable' -p11199 -(dp11200 -S'editable' -p11201 -I00 -sS'value' -p11202 -I00 -ssS'unique' -p11203 -(dp11204 -S'editable' -p11205 -I00 -sS'value' -p11206 -I00 -ssS'properties' -p11207 -(dp11208 -S'default_value' -p11209 -(dp11210 -S'editable' -p11211 -I00 -sS'value' -p11212 -NssS'summary_default' -p11213 -(dp11214 -S'editable' -p11215 -I00 -sS'value' -p11216 -S'none' -p11217 -ssS'valid_types' -p11218 -(dp11219 -S'editable' -p11220 -I00 -sS'value' -p11221 -(lp11222 -S'Shot' -p11223 -asssS'description' -p11224 -(dp11225 -S'editable' -p11226 -I01 -sS'value' -p11227 -g47 -sssS'id' -p11228 -(dp11229 -S'mandatory' -p11230 -(dp11231 -S'editable' -p11232 -I00 -sS'value' -p11233 -I01 -ssS'name' -p11234 -(dp11235 -S'editable' -p11236 -I01 -sS'value' -p11237 -S'Id' -p11238 -ssS'data_type' -p11239 -(dp11240 -S'editable' -p11241 -I00 -sS'value' -p11242 -S'number' -p11243 -ssS'entity_type' -p11244 -(dp11245 -S'editable' -p11246 -I00 -sS'value' -p11247 -S'MocapTakeRangeShotConnection' -p11248 -ssS'editable' -p11249 -(dp11250 -S'editable' -p11251 -I00 -sS'value' -p11252 -I00 -ssS'unique' -p11253 -(dp11254 -S'editable' -p11255 -I00 -sS'value' -p11256 -I00 -ssS'properties' -p11257 -(dp11258 -S'default_value' -p11259 -(dp11260 -S'editable' -p11261 -I00 -sS'value' -p11262 -NssS'summary_default' -p11263 -(dp11264 -S'editable' -p11265 -I00 -sS'value' -p11266 -S'none' -p11267 -sssS'description' -p11268 -(dp11269 -S'editable' -p11270 -I01 -sS'value' -p11271 -g47 -ssssS'PublishedFileDependency' -p11272 -(dp11273 -S'cached_display_name' -p11274 -(dp11275 -S'mandatory' -p11276 -(dp11277 -S'editable' -p11278 -I00 -sS'value' -p11279 -I00 -ssS'name' -p11280 -(dp11281 -S'editable' -p11282 -I01 -sS'value' -p11283 -S'Cached Display Name' -p11284 -ssS'data_type' -p11285 -(dp11286 -S'editable' -p11287 -I00 -sS'value' -p11288 -S'text' -p11289 -ssS'entity_type' -p11290 -(dp11291 -S'editable' -p11292 -I00 -sS'value' -p11293 -S'PublishedFileDependency' -p11294 -ssS'editable' -p11295 -(dp11296 -S'editable' -p11297 -I00 -sS'value' -p11298 -I01 -ssS'unique' -p11299 -(dp11300 -S'editable' -p11301 -I00 -sS'value' -p11302 -I00 -ssS'properties' -p11303 -(dp11304 -S'default_value' -p11305 -(dp11306 -S'editable' -p11307 -I00 -sS'value' -p11308 -NssS'summary_default' -p11309 -(dp11310 -S'editable' -p11311 -I00 -sS'value' -p11312 -S'none' -p11313 -sssS'description' -p11314 -(dp11315 -S'editable' -p11316 -I01 -sS'value' -p11317 -g47 -sssS'dependent_published_file' -p11318 -(dp11319 -S'mandatory' -p11320 -(dp11321 -S'editable' -p11322 -I00 -sS'value' -p11323 -I00 -ssS'name' -p11324 -(dp11325 -S'editable' -p11326 -I01 -sS'value' -p11327 -S'Dependent Published File' -p11328 -ssS'data_type' -p11329 -(dp11330 -S'editable' -p11331 -I00 -sS'value' -p11332 -S'entity' -p11333 -ssS'entity_type' -p11334 -(dp11335 -S'editable' -p11336 -I00 -sS'value' -p11337 -S'PublishedFileDependency' -p11338 -ssS'editable' -p11339 -(dp11340 -S'editable' -p11341 -I00 -sS'value' -p11342 -I01 -ssS'unique' -p11343 -(dp11344 -S'editable' -p11345 -I00 -sS'value' -p11346 -I00 -ssS'properties' -p11347 -(dp11348 -S'default_value' -p11349 -(dp11350 -S'editable' -p11351 -I00 -sS'value' -p11352 -NssS'summary_default' -p11353 -(dp11354 -S'editable' -p11355 -I00 -sS'value' -p11356 -S'none' -p11357 -ssS'valid_types' -p11358 -(dp11359 -S'editable' -p11360 -I00 -sS'value' -p11361 -(lp11362 -S'PublishedFile' -p11363 -asssS'description' -p11364 -(dp11365 -S'editable' -p11366 -I01 -sS'value' -p11367 -g47 -sssS'id' -p11368 -(dp11369 -S'mandatory' -p11370 -(dp11371 -S'editable' -p11372 -I00 -sS'value' -p11373 -I00 -ssS'name' -p11374 -(dp11375 -S'editable' -p11376 -I01 -sS'value' -p11377 -S'Id' -p11378 -ssS'data_type' -p11379 -(dp11380 -S'editable' -p11381 -I00 -sS'value' -p11382 -S'number' -p11383 -ssS'entity_type' -p11384 -(dp11385 -S'editable' -p11386 -I00 -sS'value' -p11387 -S'PublishedFileDependency' -p11388 -ssS'editable' -p11389 -(dp11390 -S'editable' -p11391 -I00 -sS'value' -p11392 -I00 -ssS'unique' -p11393 -(dp11394 -S'editable' -p11395 -I00 -sS'value' -p11396 -I00 -ssS'properties' -p11397 -(dp11398 -S'default_value' -p11399 -(dp11400 -S'editable' -p11401 -I00 -sS'value' -p11402 -NssS'summary_default' -p11403 -(dp11404 -S'editable' -p11405 -I00 -sS'value' -p11406 -S'none' -p11407 -sssS'description' -p11408 -(dp11409 -S'editable' -p11410 -I01 -sS'value' -p11411 -g47 -sssS'published_file' -p11412 -(dp11413 -S'mandatory' -p11414 -(dp11415 -S'editable' -p11416 -I00 -sS'value' -p11417 -I00 -ssS'name' -p11418 -(dp11419 -S'editable' -p11420 -I01 -sS'value' -p11421 -S'Published File' -p11422 -ssS'data_type' -p11423 -(dp11424 -S'editable' -p11425 -I00 -sS'value' -p11426 -S'entity' -p11427 -ssS'entity_type' -p11428 -(dp11429 -S'editable' -p11430 -I00 -sS'value' -p11431 -S'PublishedFileDependency' -p11432 -ssS'editable' -p11433 -(dp11434 -S'editable' -p11435 -I00 -sS'value' -p11436 -I01 -ssS'unique' -p11437 -(dp11438 -S'editable' -p11439 -I00 -sS'value' -p11440 -I00 -ssS'properties' -p11441 -(dp11442 -S'default_value' -p11443 -(dp11444 -S'editable' -p11445 -I00 -sS'value' -p11446 -NssS'summary_default' -p11447 -(dp11448 -S'editable' -p11449 -I00 -sS'value' -p11450 -S'none' -p11451 -ssS'valid_types' -p11452 -(dp11453 -S'editable' -p11454 -I00 -sS'value' -p11455 -(lp11456 -S'PublishedFile' -p11457 -asssS'description' -p11458 -(dp11459 -S'editable' -p11460 -I01 -sS'value' -p11461 -g47 -ssssS'Step' -p11462 -(dp11463 -S'code' -p11464 -(dp11465 -S'mandatory' -p11466 -(dp11467 -S'editable' -p11468 -I00 -sS'value' -p11469 -I01 -ssS'name' -p11470 -(dp11471 -S'editable' -p11472 -I01 -sS'value' -p11473 -S'Pipeline Step' -p11474 -ssS'data_type' -p11475 -(dp11476 -S'editable' -p11477 -I00 -sS'value' -p11478 -S'text' -p11479 -ssS'entity_type' -p11480 -(dp11481 -S'editable' -p11482 -I00 -sS'value' -p11483 -S'Step' -p11484 -ssS'editable' -p11485 -(dp11486 -S'editable' -p11487 -I00 -sS'value' -p11488 -I01 -ssS'unique' -p11489 -(dp11490 -S'editable' -p11491 -I00 -sS'value' -p11492 -I00 -ssS'properties' -p11493 -(dp11494 -S'default_value' -p11495 -(dp11496 -S'editable' -p11497 -I00 -sS'value' -p11498 -NssS'summary_default' -p11499 -(dp11500 -S'editable' -p11501 -I01 -sS'value' -p11502 -S'none' -p11503 -sssS'description' -p11504 -(dp11505 -S'editable' -p11506 -I01 -sS'value' -p11507 -g47 -sssS'description' -p11508 -(dp11509 -S'mandatory' -p11510 -(dp11511 -S'editable' -p11512 -I00 -sS'value' -p11513 -I00 -ssS'name' -p11514 -(dp11515 -S'editable' -p11516 -I01 -sS'value' -p11517 -S'Description' -p11518 -ssS'data_type' -p11519 -(dp11520 -S'editable' -p11521 -I00 -sS'value' -p11522 -S'text' -p11523 -ssS'entity_type' -p11524 -(dp11525 -S'editable' -p11526 -I00 -sS'value' -p11527 -S'Step' -p11528 -ssS'editable' -p11529 -(dp11530 -S'editable' -p11531 -I00 -sS'value' -p11532 -I01 -ssS'unique' -p11533 -(dp11534 -S'editable' -p11535 -I00 -sS'value' -p11536 -I00 -ssS'properties' -p11537 -(dp11538 -S'default_value' -p11539 -(dp11540 -S'editable' -p11541 -I00 -sS'value' -p11542 -NssS'summary_default' -p11543 -(dp11544 -S'editable' -p11545 -I01 -sS'value' -p11546 -S'none' -p11547 -sssS'description' -p11548 -(dp11549 -S'editable' -p11550 -I01 -sS'value' -p11551 -g47 -sssS'short_name' -p11552 -(dp11553 -S'mandatory' -p11554 -(dp11555 -S'editable' -p11556 -I00 -sS'value' -p11557 -I00 -ssS'name' -p11558 -(dp11559 -S'editable' -p11560 -I01 -sS'value' -p11561 -S'Short Code' -p11562 -ssS'data_type' -p11563 -(dp11564 -S'editable' -p11565 -I00 -sS'value' -p11566 -S'text' -p11567 -ssS'entity_type' -p11568 -(dp11569 -S'editable' -p11570 -I00 -sS'value' -p11571 -S'Step' -p11572 -ssS'editable' -p11573 -(dp11574 -S'editable' -p11575 -I00 -sS'value' -p11576 -I01 -ssS'unique' -p11577 -(dp11578 -S'editable' -p11579 -I00 -sS'value' -p11580 -I00 -ssS'properties' -p11581 -(dp11582 -S'default_value' -p11583 -(dp11584 -S'editable' -p11585 -I00 -sS'value' -p11586 -NssS'summary_default' -p11587 -(dp11588 -S'editable' -p11589 -I01 -sS'value' -p11590 -S'none' -p11591 -sssS'description' -p11592 -(dp11593 -S'editable' -p11594 -I01 -sS'value' -p11595 -g47 -sssS'list_order' -p11596 -(dp11597 -S'mandatory' -p11598 -(dp11599 -S'editable' -p11600 -I00 -sS'value' -p11601 -I00 -ssS'name' -p11602 -(dp11603 -S'editable' -p11604 -I01 -sS'value' -p11605 -S'Order' -p11606 -ssS'data_type' -p11607 -(dp11608 -S'editable' -p11609 -I00 -sS'value' -p11610 -S'number' -p11611 -ssS'entity_type' -p11612 -(dp11613 -S'editable' -p11614 -I00 -sS'value' -p11615 -S'Step' -p11616 -ssS'editable' -p11617 -(dp11618 -S'editable' -p11619 -I00 -sS'value' -p11620 -I01 -ssS'unique' -p11621 -(dp11622 -S'editable' -p11623 -I00 -sS'value' -p11624 -I00 -ssS'properties' -p11625 -(dp11626 -S'default_value' -p11627 -(dp11628 -S'editable' -p11629 -I00 -sS'value' -p11630 -NssS'summary_default' -p11631 -(dp11632 -S'editable' -p11633 -I01 -sS'value' -p11634 -S'none' -p11635 -sssS'description' -p11636 -(dp11637 -S'editable' -p11638 -I01 -sS'value' -p11639 -g47 -sssS'color' -p11640 -(dp11641 -S'mandatory' -p11642 -(dp11643 -S'editable' -p11644 -I00 -sS'value' -p11645 -I00 -ssS'name' -p11646 -(dp11647 -S'editable' -p11648 -I01 -sS'value' -p11649 -S'Color' -p11650 -ssS'data_type' -p11651 -(dp11652 -S'editable' -p11653 -I00 -sS'value' -p11654 -S'color' -p11655 -ssS'entity_type' -p11656 -(dp11657 -S'editable' -p11658 -I00 -sS'value' -p11659 -S'Step' -p11660 -ssS'editable' -p11661 -(dp11662 -S'editable' -p11663 -I00 -sS'value' -p11664 -I01 -ssS'unique' -p11665 -(dp11666 -S'editable' -p11667 -I00 -sS'value' -p11668 -I00 -ssS'properties' -p11669 -(dp11670 -S'default_value' -p11671 -(dp11672 -S'editable' -p11673 -I00 -sS'value' -p11674 -NssS'summary_default' -p11675 -(dp11676 -S'editable' -p11677 -I01 -sS'value' -p11678 -S'none' -p11679 -sssS'description' -p11680 -(dp11681 -S'editable' -p11682 -I01 -sS'value' -p11683 -g47 -sssS'created_at' -p11684 -(dp11685 -S'mandatory' -p11686 -(dp11687 -S'editable' -p11688 -I00 -sS'value' -p11689 -I00 -ssS'name' -p11690 -(dp11691 -S'editable' -p11692 -I01 -sS'value' -p11693 -S'Date Created' -p11694 -ssS'data_type' -p11695 -(dp11696 -S'editable' -p11697 -I00 -sS'value' -p11698 -S'date_time' -p11699 -ssS'entity_type' -p11700 -(dp11701 -S'editable' -p11702 -I00 -sS'value' -p11703 -S'Step' -p11704 -ssS'editable' -p11705 -(dp11706 -S'editable' -p11707 -I00 -sS'value' -p11708 -I00 -ssS'unique' -p11709 -(dp11710 -S'editable' -p11711 -I00 -sS'value' -p11712 -I00 -ssS'properties' -p11713 -(dp11714 -S'default_value' -p11715 -(dp11716 -S'editable' -p11717 -I00 -sS'value' -p11718 -NssS'summary_default' -p11719 -(dp11720 -S'editable' -p11721 -I01 -sS'value' -p11722 -S'none' -p11723 -sssS'description' -p11724 -(dp11725 -S'editable' -p11726 -I01 -sS'value' -p11727 -g47 -sssS'entity_type' -p11728 -(dp11729 -S'mandatory' -p11730 -(dp11731 -S'editable' -p11732 -I00 -sS'value' -p11733 -I00 -ssS'name' -p11734 -(dp11735 -S'editable' -p11736 -I01 -sS'value' -p11737 -S'Entity Type' -p11738 -ssS'data_type' -p11739 -(dp11740 -S'editable' -p11741 -I00 -sS'value' -p11742 -S'entity_type' -p11743 -ssS'entity_type' -p11744 -(dp11745 -S'editable' -p11746 -I00 -sS'value' -p11747 -S'Step' -p11748 -ssS'editable' -p11749 -(dp11750 -S'editable' -p11751 -I00 -sS'value' -p11752 -I01 -ssS'unique' -p11753 -(dp11754 -S'editable' -p11755 -I00 -sS'value' -p11756 -I00 -ssS'properties' -p11757 -(dp11758 -S'default_value' -p11759 -(dp11760 -S'editable' -p11761 -I00 -sS'value' -p11762 -NssS'summary_default' -p11763 -(dp11764 -S'editable' -p11765 -I01 -sS'value' -p11766 -S'none' -p11767 -sssS'description' -p11768 -(dp11769 -S'editable' -p11770 -I01 -sS'value' -p11771 -g47 -sssS'updated_at' -p11772 -(dp11773 -S'mandatory' -p11774 -(dp11775 -S'editable' -p11776 -I00 -sS'value' -p11777 -I00 -ssS'name' -p11778 -(dp11779 -S'editable' -p11780 -I01 -sS'value' -p11781 -S'Date Updated' -p11782 -ssS'data_type' -p11783 -(dp11784 -S'editable' -p11785 -I00 -sS'value' -p11786 -S'date_time' -p11787 -ssS'entity_type' -p11788 -(dp11789 -S'editable' -p11790 -I00 -sS'value' -p11791 -S'Step' -p11792 -ssS'editable' -p11793 -(dp11794 -S'editable' -p11795 -I00 -sS'value' -p11796 -I00 -ssS'unique' -p11797 -(dp11798 -S'editable' -p11799 -I00 -sS'value' -p11800 -I00 -ssS'properties' -p11801 -(dp11802 -S'default_value' -p11803 -(dp11804 -S'editable' -p11805 -I00 -sS'value' -p11806 -NssS'summary_default' -p11807 -(dp11808 -S'editable' -p11809 -I01 -sS'value' -p11810 -S'none' -p11811 -sssS'description' -p11812 -(dp11813 -S'editable' -p11814 -I01 -sS'value' -p11815 -g47 -sssS'created_by' -p11816 -(dp11817 -S'mandatory' -p11818 -(dp11819 -S'editable' -p11820 -I00 -sS'value' -p11821 -I00 -ssS'name' -p11822 -(dp11823 -S'editable' -p11824 -I01 -sS'value' -p11825 -S'Created by' -p11826 -ssS'data_type' -p11827 -(dp11828 -S'editable' -p11829 -I00 -sS'value' -p11830 -S'entity' -p11831 -ssS'entity_type' -p11832 -(dp11833 -S'editable' -p11834 -I00 -sS'value' -p11835 -S'Step' -p11836 -ssS'editable' -p11837 -(dp11838 -S'editable' -p11839 -I00 -sS'value' -p11840 -I00 -ssS'unique' -p11841 -(dp11842 -S'editable' -p11843 -I00 -sS'value' -p11844 -I00 -ssS'properties' -p11845 -(dp11846 -S'default_value' -p11847 -(dp11848 -S'editable' -p11849 -I00 -sS'value' -p11850 -NssS'summary_default' -p11851 -(dp11852 -S'editable' -p11853 -I01 -sS'value' -p11854 -S'none' -p11855 -ssS'valid_types' -p11856 -(dp11857 -S'editable' -p11858 -I01 -sS'value' -p11859 -(lp11860 -S'HumanUser' -p11861 -aS'ApiUser' -p11862 -asssS'description' -p11863 -(dp11864 -S'editable' -p11865 -I01 -sS'value' -p11866 -g47 -sssS'cached_display_name' -p11867 -(dp11868 -S'mandatory' -p11869 -(dp11870 -S'editable' -p11871 -I00 -sS'value' -p11872 -I00 -ssS'name' -p11873 -(dp11874 -S'editable' -p11875 -I01 -sS'value' -p11876 -S'Cached Display Name' -p11877 -ssS'data_type' -p11878 -(dp11879 -S'editable' -p11880 -I00 -sS'value' -p11881 -S'text' -p11882 -ssS'entity_type' -p11883 -(dp11884 -S'editable' -p11885 -I00 -sS'value' -p11886 -S'Step' -p11887 -ssS'editable' -p11888 -(dp11889 -S'editable' -p11890 -I00 -sS'value' -p11891 -I01 -ssS'unique' -p11892 -(dp11893 -S'editable' -p11894 -I00 -sS'value' -p11895 -I00 -ssS'properties' -p11896 -(dp11897 -S'default_value' -p11898 -(dp11899 -S'editable' -p11900 -I00 -sS'value' -p11901 -NssS'summary_default' -p11902 -(dp11903 -S'editable' -p11904 -I00 -sS'value' -p11905 -S'none' -p11906 -sssS'description' -p11907 -(dp11908 -S'editable' -p11909 -I01 -sS'value' -p11910 -g47 -sssS'id' -p11911 -(dp11912 -S'mandatory' -p11913 -(dp11914 -S'editable' -p11915 -I00 -sS'value' -p11916 -I00 -ssS'name' -p11917 -(dp11918 -S'editable' -p11919 -I01 -sS'value' -p11920 -S'Id' -p11921 -ssS'data_type' -p11922 -(dp11923 -S'editable' -p11924 -I00 -sS'value' -p11925 -S'number' -p11926 -ssS'entity_type' -p11927 -(dp11928 -S'editable' -p11929 -I00 -sS'value' -p11930 -S'Step' -p11931 -ssS'editable' -p11932 -(dp11933 -S'editable' -p11934 -I00 -sS'value' -p11935 -I00 -ssS'unique' -p11936 -(dp11937 -S'editable' -p11938 -I00 -sS'value' -p11939 -I00 -ssS'properties' -p11940 -(dp11941 -S'default_value' -p11942 -(dp11943 -S'editable' -p11944 -I00 -sS'value' -p11945 -NssS'summary_default' -p11946 -(dp11947 -S'editable' -p11948 -I00 -sS'value' -p11949 -S'none' -p11950 -sssS'description' -p11951 -(dp11952 -S'editable' -p11953 -I01 -sS'value' -p11954 -g47 -sssS'updated_by' -p11955 -(dp11956 -S'mandatory' -p11957 -(dp11958 -S'editable' -p11959 -I00 -sS'value' -p11960 -I00 -ssS'name' -p11961 -(dp11962 -S'editable' -p11963 -I01 -sS'value' -p11964 -S'Updated by' -p11965 -ssS'data_type' -p11966 -(dp11967 -S'editable' -p11968 -I00 -sS'value' -p11969 -S'entity' -p11970 -ssS'entity_type' -p11971 -(dp11972 -S'editable' -p11973 -I00 -sS'value' -p11974 -S'Step' -p11975 -ssS'editable' -p11976 -(dp11977 -S'editable' -p11978 -I00 -sS'value' -p11979 -I00 -ssS'unique' -p11980 -(dp11981 -S'editable' -p11982 -I00 -sS'value' -p11983 -I00 -ssS'properties' -p11984 -(dp11985 -S'default_value' -p11986 -(dp11987 -S'editable' -p11988 -I00 -sS'value' -p11989 -NssS'summary_default' -p11990 -(dp11991 -S'editable' -p11992 -I01 -sS'value' -p11993 -S'none' -p11994 -ssS'valid_types' -p11995 -(dp11996 -S'editable' -p11997 -I01 -sS'value' -p11998 -(lp11999 -S'HumanUser' -p12000 -aS'ApiUser' -p12001 -asssS'description' -p12002 -(dp12003 -S'editable' -p12004 -I01 -sS'value' -p12005 -g47 -ssssS'AssetLibrary' -p12006 -(dp12007 -S'open_notes_count' -p12008 -(dp12009 -S'mandatory' -p12010 -(dp12011 -S'editable' -p12012 -I00 -sS'value' -p12013 -I00 -ssS'name' -p12014 -(dp12015 -S'editable' -p12016 -I01 -sS'value' -p12017 -S'Open Notes Count' -p12018 -ssS'data_type' -p12019 -(dp12020 -S'editable' -p12021 -I00 -sS'value' -p12022 -S'text' -p12023 -ssS'entity_type' -p12024 -(dp12025 -S'editable' -p12026 -I00 -sS'value' -p12027 -S'AssetLibrary' -p12028 -ssS'editable' -p12029 -(dp12030 -S'editable' -p12031 -I00 -sS'value' -p12032 -I00 -ssS'unique' -p12033 -(dp12034 -S'editable' -p12035 -I00 -sS'value' -p12036 -I00 -ssS'properties' -p12037 -(dp12038 -S'default_value' -p12039 -(dp12040 -S'editable' -p12041 -I00 -sS'value' -p12042 -NssS'summary_default' -p12043 -(dp12044 -S'editable' -p12045 -I01 -sS'value' -p12046 -S'none' -p12047 -sssS'description' -p12048 -(dp12049 -S'editable' -p12050 -I01 -sS'value' -p12051 -g47 -sssS'code' -p12052 -(dp12053 -S'mandatory' -p12054 -(dp12055 -S'editable' -p12056 -I00 -sS'value' -p12057 -I01 -ssS'name' -p12058 -(dp12059 -S'editable' -p12060 -I01 -sS'value' -p12061 -S'Asset Library Name' -p12062 -ssS'data_type' -p12063 -(dp12064 -S'editable' -p12065 -I00 -sS'value' -p12066 -S'text' -p12067 -ssS'entity_type' -p12068 -(dp12069 -S'editable' -p12070 -I00 -sS'value' -p12071 -S'AssetLibrary' -p12072 -ssS'editable' -p12073 -(dp12074 -S'editable' -p12075 -I00 -sS'value' -p12076 -I01 -ssS'unique' -p12077 -(dp12078 -S'editable' -p12079 -I00 -sS'value' -p12080 -I00 -ssS'properties' -p12081 -(dp12082 -S'default_value' -p12083 -(dp12084 -S'editable' -p12085 -I00 -sS'value' -p12086 -NssS'summary_default' -p12087 -(dp12088 -S'editable' -p12089 -I01 -sS'value' -p12090 -S'none' -p12091 -sssS'description' -p12092 -(dp12093 -S'editable' -p12094 -I01 -sS'value' -p12095 -g47 -sssS'open_notes' -p12096 -(dp12097 -S'mandatory' -p12098 -(dp12099 -S'editable' -p12100 -I00 -sS'value' -p12101 -I00 -ssS'name' -p12102 -(dp12103 -S'editable' -p12104 -I01 -sS'value' -p12105 -S'Open Notes' -p12106 -ssS'data_type' -p12107 -(dp12108 -S'editable' -p12109 -I00 -sS'value' -p12110 -S'multi_entity' -p12111 -ssS'entity_type' -p12112 -(dp12113 -S'editable' -p12114 -I00 -sS'value' -p12115 -S'AssetLibrary' -p12116 -ssS'editable' -p12117 -(dp12118 -S'editable' -p12119 -I00 -sS'value' -p12120 -I00 -ssS'unique' -p12121 -(dp12122 -S'editable' -p12123 -I00 -sS'value' -p12124 -I00 -ssS'properties' -p12125 -(dp12126 -S'default_value' -p12127 -(dp12128 -S'editable' -p12129 -I00 -sS'value' -p12130 -NssS'summary_default' -p12131 -(dp12132 -S'editable' -p12133 -I01 -sS'value' -p12134 -S'none' -p12135 -ssS'valid_types' -p12136 -(dp12137 -S'editable' -p12138 -I01 -sS'value' -p12139 -(lp12140 -S'Note' -p12141 -asssS'description' -p12142 -(dp12143 -S'editable' -p12144 -I01 -sS'value' -p12145 -g47 -sssS'description' -p12146 -(dp12147 -S'mandatory' -p12148 -(dp12149 -S'editable' -p12150 -I00 -sS'value' -p12151 -I00 -ssS'name' -p12152 -(dp12153 -S'editable' -p12154 -I01 -sS'value' -p12155 -S'Description' -p12156 -ssS'data_type' -p12157 -(dp12158 -S'editable' -p12159 -I00 -sS'value' -p12160 -S'text' -p12161 -ssS'entity_type' -p12162 -(dp12163 -S'editable' -p12164 -I00 -sS'value' -p12165 -S'AssetLibrary' -p12166 -ssS'editable' -p12167 -(dp12168 -S'editable' -p12169 -I00 -sS'value' -p12170 -I01 -ssS'unique' -p12171 -(dp12172 -S'editable' -p12173 -I00 -sS'value' -p12174 -I00 -ssS'properties' -p12175 -(dp12176 -S'default_value' -p12177 -(dp12178 -S'editable' -p12179 -I00 -sS'value' -p12180 -NssS'summary_default' -p12181 -(dp12182 -S'editable' -p12183 -I01 -sS'value' -p12184 -S'none' -p12185 -sssS'description' -p12186 -(dp12187 -S'editable' -p12188 -I01 -sS'value' -p12189 -g47 -sssS'created_at' -p12190 -(dp12191 -S'mandatory' -p12192 -(dp12193 -S'editable' -p12194 -I00 -sS'value' -p12195 -I00 -ssS'name' -p12196 -(dp12197 -S'editable' -p12198 -I01 -sS'value' -p12199 -S'Date Created' -p12200 -ssS'data_type' -p12201 -(dp12202 -S'editable' -p12203 -I00 -sS'value' -p12204 -S'date_time' -p12205 -ssS'entity_type' -p12206 -(dp12207 -S'editable' -p12208 -I00 -sS'value' -p12209 -S'AssetLibrary' -p12210 -ssS'editable' -p12211 -(dp12212 -S'editable' -p12213 -I00 -sS'value' -p12214 -I00 -ssS'unique' -p12215 -(dp12216 -S'editable' -p12217 -I00 -sS'value' -p12218 -I00 -ssS'properties' -p12219 -(dp12220 -S'default_value' -p12221 -(dp12222 -S'editable' -p12223 -I00 -sS'value' -p12224 -NssS'summary_default' -p12225 -(dp12226 -S'editable' -p12227 -I01 -sS'value' -p12228 -S'none' -p12229 -sssS'description' -p12230 -(dp12231 -S'editable' -p12232 -I01 -sS'value' -p12233 -g47 -sssS'updated_at' -p12234 -(dp12235 -S'mandatory' -p12236 -(dp12237 -S'editable' -p12238 -I00 -sS'value' -p12239 -I00 -ssS'name' -p12240 -(dp12241 -S'editable' -p12242 -I01 -sS'value' -p12243 -S'Date Updated' -p12244 -ssS'data_type' -p12245 -(dp12246 -S'editable' -p12247 -I00 -sS'value' -p12248 -S'date_time' -p12249 -ssS'entity_type' -p12250 -(dp12251 -S'editable' -p12252 -I00 -sS'value' -p12253 -S'AssetLibrary' -p12254 -ssS'editable' -p12255 -(dp12256 -S'editable' -p12257 -I00 -sS'value' -p12258 -I00 -ssS'unique' -p12259 -(dp12260 -S'editable' -p12261 -I00 -sS'value' -p12262 -I00 -ssS'properties' -p12263 -(dp12264 -S'default_value' -p12265 -(dp12266 -S'editable' -p12267 -I00 -sS'value' -p12268 -NssS'summary_default' -p12269 -(dp12270 -S'editable' -p12271 -I01 -sS'value' -p12272 -S'none' -p12273 -sssS'description' -p12274 -(dp12275 -S'editable' -p12276 -I01 -sS'value' -p12277 -g47 -sssS'created_by' -p12278 -(dp12279 -S'mandatory' -p12280 -(dp12281 -S'editable' -p12282 -I00 -sS'value' -p12283 -I00 -ssS'name' -p12284 -(dp12285 -S'editable' -p12286 -I01 -sS'value' -p12287 -S'Created by' -p12288 -ssS'data_type' -p12289 -(dp12290 -S'editable' -p12291 -I00 -sS'value' -p12292 -S'entity' -p12293 -ssS'entity_type' -p12294 -(dp12295 -S'editable' -p12296 -I00 -sS'value' -p12297 -S'AssetLibrary' -p12298 -ssS'editable' -p12299 -(dp12300 -S'editable' -p12301 -I00 -sS'value' -p12302 -I00 -ssS'unique' -p12303 -(dp12304 -S'editable' -p12305 -I00 -sS'value' -p12306 -I00 -ssS'properties' -p12307 -(dp12308 -S'default_value' -p12309 -(dp12310 -S'editable' -p12311 -I00 -sS'value' -p12312 -NssS'summary_default' -p12313 -(dp12314 -S'editable' -p12315 -I01 -sS'value' -p12316 -S'none' -p12317 -ssS'valid_types' -p12318 -(dp12319 -S'editable' -p12320 -I01 -sS'value' -p12321 -(lp12322 -S'HumanUser' -p12323 -aS'ApiUser' -p12324 -asssS'description' -p12325 -(dp12326 -S'editable' -p12327 -I01 -sS'value' -p12328 -g47 -sssS'project' -p12329 -(dp12330 -S'mandatory' -p12331 -(dp12332 -S'editable' -p12333 -I00 -sS'value' -p12334 -I00 -ssS'name' -p12335 -(dp12336 -S'editable' -p12337 -I01 -sS'value' -p12338 -S'Project' -p12339 -ssS'data_type' -p12340 -(dp12341 -S'editable' -p12342 -I00 -sS'value' -p12343 -S'entity' -p12344 -ssS'entity_type' -p12345 -(dp12346 -S'editable' -p12347 -I00 -sS'value' -p12348 -S'AssetLibrary' -p12349 -ssS'editable' -p12350 -(dp12351 -S'editable' -p12352 -I00 -sS'value' -p12353 -I01 -ssS'unique' -p12354 -(dp12355 -S'editable' -p12356 -I00 -sS'value' -p12357 -I00 -ssS'properties' -p12358 -(dp12359 -S'default_value' -p12360 -(dp12361 -S'editable' -p12362 -I00 -sS'value' -p12363 -NssS'summary_default' -p12364 -(dp12365 -S'editable' -p12366 -I01 -sS'value' -p12367 -S'none' -p12368 -ssS'valid_types' -p12369 -(dp12370 -S'editable' -p12371 -I01 -sS'value' -p12372 -(lp12373 -S'Project' -p12374 -asssS'description' -p12375 -(dp12376 -S'editable' -p12377 -I01 -sS'value' -p12378 -g47 -sssS'filmstrip_image' -p12379 -(dp12380 -S'mandatory' -p12381 -(dp12382 -S'editable' -p12383 -I00 -sS'value' -p12384 -I00 -ssS'name' -p12385 -(dp12386 -S'editable' -p12387 -I01 -sS'value' -p12388 -S'Filmstrip Thumbnail' -p12389 -ssS'data_type' -p12390 -(dp12391 -S'editable' -p12392 -I00 -sS'value' -p12393 -S'image' -p12394 -ssS'entity_type' -p12395 -(dp12396 -S'editable' -p12397 -I00 -sS'value' -p12398 -S'AssetLibrary' -p12399 -ssS'editable' -p12400 -(dp12401 -S'editable' -p12402 -I00 -sS'value' -p12403 -I01 -ssS'unique' -p12404 -(dp12405 -S'editable' -p12406 -I00 -sS'value' -p12407 -I00 -ssS'properties' -p12408 -(dp12409 -S'default_value' -p12410 -(dp12411 -S'editable' -p12412 -I00 -sS'value' -p12413 -NssS'summary_default' -p12414 -(dp12415 -S'editable' -p12416 -I01 -sS'value' -p12417 -S'none' -p12418 -sssS'description' -p12419 -(dp12420 -S'editable' -p12421 -I01 -sS'value' -p12422 -g47 -sssS'sg_status_list' -p12423 -(dp12424 -S'mandatory' -p12425 -(dp12426 -S'editable' -p12427 -I00 -sS'value' -p12428 -I00 -ssS'name' -p12429 -(dp12430 -S'editable' -p12431 -I01 -sS'value' -p12432 -S'Status' -p12433 -ssS'data_type' -p12434 -(dp12435 -S'editable' -p12436 -I00 -sS'value' -p12437 -S'status_list' -p12438 -ssS'entity_type' -p12439 -(dp12440 -S'editable' -p12441 -I00 -sS'value' -p12442 -S'AssetLibrary' -p12443 -ssS'editable' -p12444 -(dp12445 -S'editable' -p12446 -I00 -sS'value' -p12447 -I01 -ssS'unique' -p12448 -(dp12449 -S'editable' -p12450 -I00 -sS'value' -p12451 -I00 -ssS'properties' -p12452 -(dp12453 -S'default_value' -p12454 -(dp12455 -S'editable' -p12456 -I01 -sS'value' -p12457 -S'wtg' -p12458 -ssS'valid_values' -p12459 -(dp12460 -S'editable' -p12461 -I01 -sS'value' -p12462 -(lp12463 -S'cmpt' -p12464 -aS'ip' -p12465 -aS'wtg' -p12466 -assS'summary_default' -p12467 -(dp12468 -S'editable' -p12469 -I01 -sS'value' -p12470 -S'none' -p12471 -sssS'description' -p12472 -(dp12473 -S'editable' -p12474 -I01 -sS'value' -p12475 -g47 -sssS'notes' -p12476 -(dp12477 -S'mandatory' -p12478 -(dp12479 -S'editable' -p12480 -I00 -sS'value' -p12481 -I00 -ssS'name' -p12482 -(dp12483 -S'editable' -p12484 -I01 -sS'value' -p12485 -S'Notes' -p12486 -ssS'data_type' -p12487 -(dp12488 -S'editable' -p12489 -I00 -sS'value' -p12490 -S'multi_entity' -p12491 -ssS'entity_type' -p12492 -(dp12493 -S'editable' -p12494 -I00 -sS'value' -p12495 -S'AssetLibrary' -p12496 -ssS'editable' -p12497 -(dp12498 -S'editable' -p12499 -I00 -sS'value' -p12500 -I01 -ssS'unique' -p12501 -(dp12502 -S'editable' -p12503 -I00 -sS'value' -p12504 -I00 -ssS'properties' -p12505 -(dp12506 -S'default_value' -p12507 -(dp12508 -S'editable' -p12509 -I00 -sS'value' -p12510 -NssS'summary_default' -p12511 -(dp12512 -S'editable' -p12513 -I01 -sS'value' -p12514 -S'none' -p12515 -ssS'valid_types' -p12516 -(dp12517 -S'editable' -p12518 -I01 -sS'value' -p12519 -(lp12520 -S'Note' -p12521 -asssS'description' -p12522 -(dp12523 -S'editable' -p12524 -I01 -sS'value' -p12525 -g47 -sssS'image' -p12526 -(dp12527 -S'mandatory' -p12528 -(dp12529 -S'editable' -p12530 -I00 -sS'value' -p12531 -I00 -ssS'name' -p12532 -(dp12533 -S'editable' -p12534 -I01 -sS'value' -p12535 -S'Thumbnail' -p12536 -ssS'data_type' -p12537 -(dp12538 -S'editable' -p12539 -I00 -sS'value' -p12540 -S'image' -p12541 -ssS'entity_type' -p12542 -(dp12543 -S'editable' -p12544 -I00 -sS'value' -p12545 -S'AssetLibrary' -p12546 -ssS'editable' -p12547 -(dp12548 -S'editable' -p12549 -I00 -sS'value' -p12550 -I01 -ssS'unique' -p12551 -(dp12552 -S'editable' -p12553 -I00 -sS'value' -p12554 -I00 -ssS'properties' -p12555 -(dp12556 -S'default_value' -p12557 -(dp12558 -S'editable' -p12559 -I00 -sS'value' -p12560 -NssS'summary_default' -p12561 -(dp12562 -S'editable' -p12563 -I01 -sS'value' -p12564 -S'none' -p12565 -sssS'description' -p12566 -(dp12567 -S'editable' -p12568 -I01 -sS'value' -p12569 -g47 -sssS'cached_display_name' -p12570 -(dp12571 -S'mandatory' -p12572 -(dp12573 -S'editable' -p12574 -I00 -sS'value' -p12575 -I00 -ssS'name' -p12576 -(dp12577 -S'editable' -p12578 -I01 -sS'value' -p12579 -S'Cached Display Name' -p12580 -ssS'data_type' -p12581 -(dp12582 -S'editable' -p12583 -I00 -sS'value' -p12584 -S'text' -p12585 -ssS'entity_type' -p12586 -(dp12587 -S'editable' -p12588 -I00 -sS'value' -p12589 -S'AssetLibrary' -p12590 -ssS'editable' -p12591 -(dp12592 -S'editable' -p12593 -I00 -sS'value' -p12594 -I01 -ssS'unique' -p12595 -(dp12596 -S'editable' -p12597 -I00 -sS'value' -p12598 -I00 -ssS'properties' -p12599 -(dp12600 -S'default_value' -p12601 -(dp12602 -S'editable' -p12603 -I00 -sS'value' -p12604 -NssS'summary_default' -p12605 -(dp12606 -S'editable' -p12607 -I00 -sS'value' -p12608 -S'none' -p12609 -sssS'description' -p12610 -(dp12611 -S'editable' -p12612 -I01 -sS'value' -p12613 -g47 -sssS'tag_list' -p12614 -(dp12615 -S'mandatory' -p12616 -(dp12617 -S'editable' -p12618 -I00 -sS'value' -p12619 -I00 -ssS'name' -p12620 -(dp12621 -S'editable' -p12622 -I01 -sS'value' -p12623 -S'Tags' -p12624 -ssS'data_type' -p12625 -(dp12626 -S'editable' -p12627 -I00 -sS'value' -p12628 -S'tag_list' -p12629 -ssS'entity_type' -p12630 -(dp12631 -S'editable' -p12632 -I00 -sS'value' -p12633 -S'AssetLibrary' -p12634 -ssS'editable' -p12635 -(dp12636 -S'editable' -p12637 -I00 -sS'value' -p12638 -I01 -ssS'unique' -p12639 -(dp12640 -S'editable' -p12641 -I00 -sS'value' -p12642 -I00 -ssS'properties' -p12643 -(dp12644 -S'default_value' -p12645 -(dp12646 -S'editable' -p12647 -I00 -sS'value' -p12648 -NssS'summary_default' -p12649 -(dp12650 -S'editable' -p12651 -I01 -sS'value' -p12652 -S'none' -p12653 -ssS'valid_types' -p12654 -(dp12655 -S'editable' -p12656 -I01 -sS'value' -p12657 -(lp12658 -S'Tag' -p12659 -asssS'description' -p12660 -(dp12661 -S'editable' -p12662 -I01 -sS'value' -p12663 -g47 -sssS'id' -p12664 -(dp12665 -S'mandatory' -p12666 -(dp12667 -S'editable' -p12668 -I00 -sS'value' -p12669 -I00 -ssS'name' -p12670 -(dp12671 -S'editable' -p12672 -I01 -sS'value' -p12673 -S'Id' -p12674 -ssS'data_type' -p12675 -(dp12676 -S'editable' -p12677 -I00 -sS'value' -p12678 -S'number' -p12679 -ssS'entity_type' -p12680 -(dp12681 -S'editable' -p12682 -I00 -sS'value' -p12683 -S'AssetLibrary' -p12684 -ssS'editable' -p12685 -(dp12686 -S'editable' -p12687 -I00 -sS'value' -p12688 -I00 -ssS'unique' -p12689 -(dp12690 -S'editable' -p12691 -I00 -sS'value' -p12692 -I00 -ssS'properties' -p12693 -(dp12694 -S'default_value' -p12695 -(dp12696 -S'editable' -p12697 -I00 -sS'value' -p12698 -NssS'summary_default' -p12699 -(dp12700 -S'editable' -p12701 -I01 -sS'value' -p12702 -S'none' -p12703 -sssS'description' -p12704 -(dp12705 -S'editable' -p12706 -I01 -sS'value' -p12707 -g47 -sssS'updated_by' -p12708 -(dp12709 -S'mandatory' -p12710 -(dp12711 -S'editable' -p12712 -I00 -sS'value' -p12713 -I00 -ssS'name' -p12714 -(dp12715 -S'editable' -p12716 -I01 -sS'value' -p12717 -S'Updated by' -p12718 -ssS'data_type' -p12719 -(dp12720 -S'editable' -p12721 -I00 -sS'value' -p12722 -S'entity' -p12723 -ssS'entity_type' -p12724 -(dp12725 -S'editable' -p12726 -I00 -sS'value' -p12727 -S'AssetLibrary' -p12728 -ssS'editable' -p12729 -(dp12730 -S'editable' -p12731 -I00 -sS'value' -p12732 -I00 -ssS'unique' -p12733 -(dp12734 -S'editable' -p12735 -I00 -sS'value' -p12736 -I00 -ssS'properties' -p12737 -(dp12738 -S'default_value' -p12739 -(dp12740 -S'editable' -p12741 -I00 -sS'value' -p12742 -NssS'summary_default' -p12743 -(dp12744 -S'editable' -p12745 -I01 -sS'value' -p12746 -S'none' -p12747 -ssS'valid_types' -p12748 -(dp12749 -S'editable' -p12750 -I01 -sS'value' -p12751 -(lp12752 -S'HumanUser' -p12753 -aS'ApiUser' -p12754 -asssS'description' -p12755 -(dp12756 -S'editable' -p12757 -I01 -sS'value' -p12758 -g47 -ssssS'PerformerMocapTakeConnection' -p12759 -(dp12760 -S'mocap_take' -p12761 -(dp12762 -S'mandatory' -p12763 -(dp12764 -S'editable' -p12765 -I00 -sS'value' -p12766 -I00 -ssS'name' -p12767 -(dp12768 -S'editable' -p12769 -I01 -sS'value' -p12770 -S'Mocap Take' -p12771 -ssS'data_type' -p12772 -(dp12773 -S'editable' -p12774 -I00 -sS'value' -p12775 -S'entity' -p12776 -ssS'entity_type' -p12777 -(dp12778 -S'editable' -p12779 -I00 -sS'value' -p12780 -S'PerformerMocapTakeConnection' -p12781 -ssS'editable' -p12782 -(dp12783 -S'editable' -p12784 -I00 -sS'value' -p12785 -I00 -ssS'unique' -p12786 -(dp12787 -S'editable' -p12788 -I00 -sS'value' -p12789 -I00 -ssS'properties' -p12790 -(dp12791 -S'default_value' -p12792 -(dp12793 -S'editable' -p12794 -I00 -sS'value' -p12795 -NssS'summary_default' -p12796 -(dp12797 -S'editable' -p12798 -I00 -sS'value' -p12799 -S'none' -p12800 -ssS'valid_types' -p12801 -(dp12802 -S'editable' -p12803 -I00 -sS'value' -p12804 -(lp12805 -S'MocapTake' -p12806 -asssS'description' -p12807 -(dp12808 -S'editable' -p12809 -I01 -sS'value' -p12810 -g47 -sssS'cached_display_name' -p12811 -(dp12812 -S'mandatory' -p12813 -(dp12814 -S'editable' -p12815 -I00 -sS'value' -p12816 -I00 -ssS'name' -p12817 -(dp12818 -S'editable' -p12819 -I01 -sS'value' -p12820 -S'Cached Display Name' -p12821 -ssS'data_type' -p12822 -(dp12823 -S'editable' -p12824 -I00 -sS'value' -p12825 -S'text' -p12826 -ssS'entity_type' -p12827 -(dp12828 -S'editable' -p12829 -I00 -sS'value' -p12830 -S'PerformerMocapTakeConnection' -p12831 -ssS'editable' -p12832 -(dp12833 -S'editable' -p12834 -I00 -sS'value' -p12835 -I01 -ssS'unique' -p12836 -(dp12837 -S'editable' -p12838 -I00 -sS'value' -p12839 -I00 -ssS'properties' -p12840 -(dp12841 -S'default_value' -p12842 -(dp12843 -S'editable' -p12844 -I00 -sS'value' -p12845 -NssS'summary_default' -p12846 -(dp12847 -S'editable' -p12848 -I00 -sS'value' -p12849 -S'none' -p12850 -sssS'description' -p12851 -(dp12852 -S'editable' -p12853 -I01 -sS'value' -p12854 -g47 -sssS'performer' -p12855 -(dp12856 -S'mandatory' -p12857 -(dp12858 -S'editable' -p12859 -I00 -sS'value' -p12860 -I00 -ssS'name' -p12861 -(dp12862 -S'editable' -p12863 -I01 -sS'value' -p12864 -S'Performer' -p12865 -ssS'data_type' -p12866 -(dp12867 -S'editable' -p12868 -I00 -sS'value' -p12869 -S'entity' -p12870 -ssS'entity_type' -p12871 -(dp12872 -S'editable' -p12873 -I00 -sS'value' -p12874 -S'PerformerMocapTakeConnection' -p12875 -ssS'editable' -p12876 -(dp12877 -S'editable' -p12878 -I00 -sS'value' -p12879 -I00 -ssS'unique' -p12880 -(dp12881 -S'editable' -p12882 -I00 -sS'value' -p12883 -I00 -ssS'properties' -p12884 -(dp12885 -S'default_value' -p12886 -(dp12887 -S'editable' -p12888 -I00 -sS'value' -p12889 -NssS'summary_default' -p12890 -(dp12891 -S'editable' -p12892 -I00 -sS'value' -p12893 -S'none' -p12894 -ssS'valid_types' -p12895 -(dp12896 -S'editable' -p12897 -I00 -sS'value' -p12898 -(lp12899 -S'Performer' -p12900 -asssS'description' -p12901 -(dp12902 -S'editable' -p12903 -I01 -sS'value' -p12904 -g47 -sssS'id' -p12905 -(dp12906 -S'mandatory' -p12907 -(dp12908 -S'editable' -p12909 -I00 -sS'value' -p12910 -I01 -ssS'name' -p12911 -(dp12912 -S'editable' -p12913 -I01 -sS'value' -p12914 -S'Id' -p12915 -ssS'data_type' -p12916 -(dp12917 -S'editable' -p12918 -I00 -sS'value' -p12919 -S'number' -p12920 -ssS'entity_type' -p12921 -(dp12922 -S'editable' -p12923 -I00 -sS'value' -p12924 -S'PerformerMocapTakeConnection' -p12925 -ssS'editable' -p12926 -(dp12927 -S'editable' -p12928 -I00 -sS'value' -p12929 -I00 -ssS'unique' -p12930 -(dp12931 -S'editable' -p12932 -I00 -sS'value' -p12933 -I00 -ssS'properties' -p12934 -(dp12935 -S'default_value' -p12936 -(dp12937 -S'editable' -p12938 -I00 -sS'value' -p12939 -NssS'summary_default' -p12940 -(dp12941 -S'editable' -p12942 -I00 -sS'value' -p12943 -S'none' -p12944 -sssS'description' -p12945 -(dp12946 -S'editable' -p12947 -I01 -sS'value' -p12948 -g47 -ssssS'Phase' -p12949 -(dp12950 -S'open_notes_count' -p12951 -(dp12952 -S'mandatory' -p12953 -(dp12954 -S'editable' -p12955 -I00 -sS'value' -p12956 -I00 -ssS'name' -p12957 -(dp12958 -S'editable' -p12959 -I01 -sS'value' -p12960 -S'Open Notes Count' -p12961 -ssS'data_type' -p12962 -(dp12963 -S'editable' -p12964 -I00 -sS'value' -p12965 -S'text' -p12966 -ssS'entity_type' -p12967 -(dp12968 -S'editable' -p12969 -I00 -sS'value' -p12970 -S'Phase' -p12971 -ssS'editable' -p12972 -(dp12973 -S'editable' -p12974 -I00 -sS'value' -p12975 -I00 -ssS'unique' -p12976 -(dp12977 -S'editable' -p12978 -I00 -sS'value' -p12979 -I00 -ssS'properties' -p12980 -(dp12981 -S'default_value' -p12982 -(dp12983 -S'editable' -p12984 -I00 -sS'value' -p12985 -NssS'summary_default' -p12986 -(dp12987 -S'editable' -p12988 -I01 -sS'value' -p12989 -S'none' -p12990 -sssS'description' -p12991 -(dp12992 -S'editable' -p12993 -I01 -sS'value' -p12994 -g47 -sssS'code' -p12995 -(dp12996 -S'mandatory' -p12997 -(dp12998 -S'editable' -p12999 -I00 -sS'value' -p13000 -I01 -ssS'name' -p13001 -(dp13002 -S'editable' -p13003 -I01 -sS'value' -p13004 -S'Phase Name' -p13005 -ssS'data_type' -p13006 -(dp13007 -S'editable' -p13008 -I00 -sS'value' -p13009 -S'text' -p13010 -ssS'entity_type' -p13011 -(dp13012 -S'editable' -p13013 -I00 -sS'value' -p13014 -S'Phase' -p13015 -ssS'editable' -p13016 -(dp13017 -S'editable' -p13018 -I00 -sS'value' -p13019 -I01 -ssS'unique' -p13020 -(dp13021 -S'editable' -p13022 -I00 -sS'value' -p13023 -I00 -ssS'properties' -p13024 -(dp13025 -S'default_value' -p13026 -(dp13027 -S'editable' -p13028 -I00 -sS'value' -p13029 -NssS'summary_default' -p13030 -(dp13031 -S'editable' -p13032 -I01 -sS'value' -p13033 -S'none' -p13034 -sssS'description' -p13035 -(dp13036 -S'editable' -p13037 -I01 -sS'value' -p13038 -g47 -sssS'open_notes' -p13039 -(dp13040 -S'mandatory' -p13041 -(dp13042 -S'editable' -p13043 -I00 -sS'value' -p13044 -I00 -ssS'name' -p13045 -(dp13046 -S'editable' -p13047 -I01 -sS'value' -p13048 -S'Open Notes' -p13049 -ssS'data_type' -p13050 -(dp13051 -S'editable' -p13052 -I00 -sS'value' -p13053 -S'multi_entity' -p13054 -ssS'entity_type' -p13055 -(dp13056 -S'editable' -p13057 -I00 -sS'value' -p13058 -S'Phase' -p13059 -ssS'editable' -p13060 -(dp13061 -S'editable' -p13062 -I00 -sS'value' -p13063 -I00 -ssS'unique' -p13064 -(dp13065 -S'editable' -p13066 -I00 -sS'value' -p13067 -I00 -ssS'properties' -p13068 -(dp13069 -S'default_value' -p13070 -(dp13071 -S'editable' -p13072 -I00 -sS'value' -p13073 -NssS'summary_default' -p13074 -(dp13075 -S'editable' -p13076 -I01 -sS'value' -p13077 -S'none' -p13078 -ssS'valid_types' -p13079 -(dp13080 -S'editable' -p13081 -I01 -sS'value' -p13082 -(lp13083 -S'Note' -p13084 -asssS'description' -p13085 -(dp13086 -S'editable' -p13087 -I01 -sS'value' -p13088 -g47 -sssS'description' -p13089 -(dp13090 -S'mandatory' -p13091 -(dp13092 -S'editable' -p13093 -I00 -sS'value' -p13094 -I00 -ssS'name' -p13095 -(dp13096 -S'editable' -p13097 -I01 -sS'value' -p13098 -S'Description' -p13099 -ssS'data_type' -p13100 -(dp13101 -S'editable' -p13102 -I00 -sS'value' -p13103 -S'text' -p13104 -ssS'entity_type' -p13105 -(dp13106 -S'editable' -p13107 -I00 -sS'value' -p13108 -S'Phase' -p13109 -ssS'editable' -p13110 -(dp13111 -S'editable' -p13112 -I00 -sS'value' -p13113 -I01 -ssS'unique' -p13114 -(dp13115 -S'editable' -p13116 -I00 -sS'value' -p13117 -I00 -ssS'properties' -p13118 -(dp13119 -S'default_value' -p13120 -(dp13121 -S'editable' -p13122 -I00 -sS'value' -p13123 -NssS'summary_default' -p13124 -(dp13125 -S'editable' -p13126 -I01 -sS'value' -p13127 -S'none' -p13128 -sssS'description' -p13129 -(dp13130 -S'editable' -p13131 -I01 -sS'value' -p13132 -g47 -sssS'end_date' -p13133 -(dp13134 -S'mandatory' -p13135 -(dp13136 -S'editable' -p13137 -I00 -sS'value' -p13138 -I00 -ssS'name' -p13139 -(dp13140 -S'editable' -p13141 -I01 -sS'value' -p13142 -S'End Date' -p13143 -ssS'data_type' -p13144 -(dp13145 -S'editable' -p13146 -I00 -sS'value' -p13147 -S'date' -p13148 -ssS'entity_type' -p13149 -(dp13150 -S'editable' -p13151 -I00 -sS'value' -p13152 -S'Phase' -p13153 -ssS'editable' -p13154 -(dp13155 -S'editable' -p13156 -I00 -sS'value' -p13157 -I01 -ssS'unique' -p13158 -(dp13159 -S'editable' -p13160 -I00 -sS'value' -p13161 -I00 -ssS'properties' -p13162 -(dp13163 -S'default_value' -p13164 -(dp13165 -S'editable' -p13166 -I00 -sS'value' -p13167 -NssS'summary_default' -p13168 -(dp13169 -S'editable' -p13170 -I01 -sS'value' -p13171 -S'none' -p13172 -sssS'description' -p13173 -(dp13174 -S'editable' -p13175 -I01 -sS'value' -p13176 -g47 -sssS'color' -p13177 -(dp13178 -S'mandatory' -p13179 -(dp13180 -S'editable' -p13181 -I00 -sS'value' -p13182 -I00 -ssS'name' -p13183 -(dp13184 -S'editable' -p13185 -I01 -sS'value' -p13186 -S'Color' -p13187 -ssS'data_type' -p13188 -(dp13189 -S'editable' -p13190 -I00 -sS'value' -p13191 -S'color' -p13192 -ssS'entity_type' -p13193 -(dp13194 -S'editable' -p13195 -I00 -sS'value' -p13196 -S'Phase' -p13197 -ssS'editable' -p13198 -(dp13199 -S'editable' -p13200 -I00 -sS'value' -p13201 -I01 -ssS'unique' -p13202 -(dp13203 -S'editable' -p13204 -I00 -sS'value' -p13205 -I00 -ssS'properties' -p13206 -(dp13207 -S'default_value' -p13208 -(dp13209 -S'editable' -p13210 -I00 -sS'value' -p13211 -NssS'summary_default' -p13212 -(dp13213 -S'editable' -p13214 -I01 -sS'value' -p13215 -S'none' -p13216 -sssS'description' -p13217 -(dp13218 -S'editable' -p13219 -I01 -sS'value' -p13220 -g47 -sssS'created_at' -p13221 -(dp13222 -S'mandatory' -p13223 -(dp13224 -S'editable' -p13225 -I00 -sS'value' -p13226 -I00 -ssS'name' -p13227 -(dp13228 -S'editable' -p13229 -I01 -sS'value' -p13230 -S'Date Created' -p13231 -ssS'data_type' -p13232 -(dp13233 -S'editable' -p13234 -I00 -sS'value' -p13235 -S'date_time' -p13236 -ssS'entity_type' -p13237 -(dp13238 -S'editable' -p13239 -I00 -sS'value' -p13240 -S'Phase' -p13241 -ssS'editable' -p13242 -(dp13243 -S'editable' -p13244 -I00 -sS'value' -p13245 -I00 -ssS'unique' -p13246 -(dp13247 -S'editable' -p13248 -I00 -sS'value' -p13249 -I00 -ssS'properties' -p13250 -(dp13251 -S'default_value' -p13252 -(dp13253 -S'editable' -p13254 -I00 -sS'value' -p13255 -NssS'summary_default' -p13256 -(dp13257 -S'editable' -p13258 -I01 -sS'value' -p13259 -S'none' -p13260 -sssS'description' -p13261 -(dp13262 -S'editable' -p13263 -I01 -sS'value' -p13264 -g47 -sssS'updated_at' -p13265 -(dp13266 -S'mandatory' -p13267 -(dp13268 -S'editable' -p13269 -I00 -sS'value' -p13270 -I00 -ssS'name' -p13271 -(dp13272 -S'editable' -p13273 -I01 -sS'value' -p13274 -S'Date Updated' -p13275 -ssS'data_type' -p13276 -(dp13277 -S'editable' -p13278 -I00 -sS'value' -p13279 -S'date_time' -p13280 -ssS'entity_type' -p13281 -(dp13282 -S'editable' -p13283 -I00 -sS'value' -p13284 -S'Phase' -p13285 -ssS'editable' -p13286 -(dp13287 -S'editable' -p13288 -I00 -sS'value' -p13289 -I00 -ssS'unique' -p13290 -(dp13291 -S'editable' -p13292 -I00 -sS'value' -p13293 -I00 -ssS'properties' -p13294 -(dp13295 -S'default_value' -p13296 -(dp13297 -S'editable' -p13298 -I00 -sS'value' -p13299 -NssS'summary_default' -p13300 -(dp13301 -S'editable' -p13302 -I01 -sS'value' -p13303 -S'none' -p13304 -sssS'description' -p13305 -(dp13306 -S'editable' -p13307 -I01 -sS'value' -p13308 -g47 -sssS'created_by' -p13309 -(dp13310 -S'mandatory' -p13311 -(dp13312 -S'editable' -p13313 -I00 -sS'value' -p13314 -I00 -ssS'name' -p13315 -(dp13316 -S'editable' -p13317 -I01 -sS'value' -p13318 -S'Created by' -p13319 -ssS'data_type' -p13320 -(dp13321 -S'editable' -p13322 -I00 -sS'value' -p13323 -S'entity' -p13324 -ssS'entity_type' -p13325 -(dp13326 -S'editable' -p13327 -I00 -sS'value' -p13328 -S'Phase' -p13329 -ssS'editable' -p13330 -(dp13331 -S'editable' -p13332 -I00 -sS'value' -p13333 -I00 -ssS'unique' -p13334 -(dp13335 -S'editable' -p13336 -I00 -sS'value' -p13337 -I00 -ssS'properties' -p13338 -(dp13339 -S'default_value' -p13340 -(dp13341 -S'editable' -p13342 -I00 -sS'value' -p13343 -NssS'summary_default' -p13344 -(dp13345 -S'editable' -p13346 -I01 -sS'value' -p13347 -S'none' -p13348 -ssS'valid_types' -p13349 -(dp13350 -S'editable' -p13351 -I01 -sS'value' -p13352 -(lp13353 -S'HumanUser' -p13354 -aS'ApiUser' -p13355 -asssS'description' -p13356 -(dp13357 -S'editable' -p13358 -I01 -sS'value' -p13359 -g47 -sssS'start_date' -p13360 -(dp13361 -S'mandatory' -p13362 -(dp13363 -S'editable' -p13364 -I00 -sS'value' -p13365 -I00 -ssS'name' -p13366 -(dp13367 -S'editable' -p13368 -I01 -sS'value' -p13369 -S'Start Date' -p13370 -ssS'data_type' -p13371 -(dp13372 -S'editable' -p13373 -I00 -sS'value' -p13374 -S'date' -p13375 -ssS'entity_type' -p13376 -(dp13377 -S'editable' -p13378 -I00 -sS'value' -p13379 -S'Phase' -p13380 -ssS'editable' -p13381 -(dp13382 -S'editable' -p13383 -I00 -sS'value' -p13384 -I01 -ssS'unique' -p13385 -(dp13386 -S'editable' -p13387 -I00 -sS'value' -p13388 -I00 -ssS'properties' -p13389 -(dp13390 -S'default_value' -p13391 -(dp13392 -S'editable' -p13393 -I00 -sS'value' -p13394 -NssS'summary_default' -p13395 -(dp13396 -S'editable' -p13397 -I01 -sS'value' -p13398 -S'none' -p13399 -sssS'description' -p13400 -(dp13401 -S'editable' -p13402 -I01 -sS'value' -p13403 -g47 -sssS'project' -p13404 -(dp13405 -S'mandatory' -p13406 -(dp13407 -S'editable' -p13408 -I00 -sS'value' -p13409 -I00 -ssS'name' -p13410 -(dp13411 -S'editable' -p13412 -I01 -sS'value' -p13413 -S'Project' -p13414 -ssS'data_type' -p13415 -(dp13416 -S'editable' -p13417 -I00 -sS'value' -p13418 -S'entity' -p13419 -ssS'entity_type' -p13420 -(dp13421 -S'editable' -p13422 -I00 -sS'value' -p13423 -S'Phase' -p13424 -ssS'editable' -p13425 -(dp13426 -S'editable' -p13427 -I00 -sS'value' -p13428 -I01 -ssS'unique' -p13429 -(dp13430 -S'editable' -p13431 -I00 -sS'value' -p13432 -I00 -ssS'properties' -p13433 -(dp13434 -S'default_value' -p13435 -(dp13436 -S'editable' -p13437 -I00 -sS'value' -p13438 -NssS'summary_default' -p13439 -(dp13440 -S'editable' -p13441 -I01 -sS'value' -p13442 -S'none' -p13443 -ssS'valid_types' -p13444 -(dp13445 -S'editable' -p13446 -I01 -sS'value' -p13447 -(lp13448 -S'Project' -p13449 -asssS'description' -p13450 -(dp13451 -S'editable' -p13452 -I01 -sS'value' -p13453 -g47 -sssS'notes' -p13454 -(dp13455 -S'mandatory' -p13456 -(dp13457 -S'editable' -p13458 -I00 -sS'value' -p13459 -I00 -ssS'name' -p13460 -(dp13461 -S'editable' -p13462 -I01 -sS'value' -p13463 -S'Notes' -p13464 -ssS'data_type' -p13465 -(dp13466 -S'editable' -p13467 -I00 -sS'value' -p13468 -S'multi_entity' -p13469 -ssS'entity_type' -p13470 -(dp13471 -S'editable' -p13472 -I00 -sS'value' -p13473 -S'Phase' -p13474 -ssS'editable' -p13475 -(dp13476 -S'editable' -p13477 -I00 -sS'value' -p13478 -I01 -ssS'unique' -p13479 -(dp13480 -S'editable' -p13481 -I00 -sS'value' -p13482 -I00 -ssS'properties' -p13483 -(dp13484 -S'default_value' -p13485 -(dp13486 -S'editable' -p13487 -I00 -sS'value' -p13488 -NssS'summary_default' -p13489 -(dp13490 -S'editable' -p13491 -I01 -sS'value' -p13492 -S'none' -p13493 -ssS'valid_types' -p13494 -(dp13495 -S'editable' -p13496 -I01 -sS'value' -p13497 -(lp13498 -S'Note' -p13499 -asssS'description' -p13500 -(dp13501 -S'editable' -p13502 -I01 -sS'value' -p13503 -g47 -sssS'milestone' -p13504 -(dp13505 -S'mandatory' -p13506 -(dp13507 -S'editable' -p13508 -I00 -sS'value' -p13509 -I00 -ssS'name' -p13510 -(dp13511 -S'editable' -p13512 -I01 -sS'value' -p13513 -S'Milestone' -p13514 -ssS'data_type' -p13515 -(dp13516 -S'editable' -p13517 -I00 -sS'value' -p13518 -S'checkbox' -p13519 -ssS'entity_type' -p13520 -(dp13521 -S'editable' -p13522 -I00 -sS'value' -p13523 -S'Phase' -p13524 -ssS'editable' -p13525 -(dp13526 -S'editable' -p13527 -I00 -sS'value' -p13528 -I01 -ssS'unique' -p13529 -(dp13530 -S'editable' -p13531 -I00 -sS'value' -p13532 -I00 -ssS'properties' -p13533 -(dp13534 -S'default_value' -p13535 -(dp13536 -S'editable' -p13537 -I00 -sS'value' -p13538 -NssS'summary_default' -p13539 -(dp13540 -S'editable' -p13541 -I01 -sS'value' -p13542 -S'none' -p13543 -sssS'description' -p13544 -(dp13545 -S'editable' -p13546 -I01 -sS'value' -p13547 -g47 -sssS'cached_display_name' -p13548 -(dp13549 -S'mandatory' -p13550 -(dp13551 -S'editable' -p13552 -I00 -sS'value' -p13553 -I00 -ssS'name' -p13554 -(dp13555 -S'editable' -p13556 -I01 -sS'value' -p13557 -S'Cached Display Name' -p13558 -ssS'data_type' -p13559 -(dp13560 -S'editable' -p13561 -I00 -sS'value' -p13562 -S'text' -p13563 -ssS'entity_type' -p13564 -(dp13565 -S'editable' -p13566 -I00 -sS'value' -p13567 -S'Phase' -p13568 -ssS'editable' -p13569 -(dp13570 -S'editable' -p13571 -I00 -sS'value' -p13572 -I01 -ssS'unique' -p13573 -(dp13574 -S'editable' -p13575 -I00 -sS'value' -p13576 -I00 -ssS'properties' -p13577 -(dp13578 -S'default_value' -p13579 -(dp13580 -S'editable' -p13581 -I00 -sS'value' -p13582 -NssS'summary_default' -p13583 -(dp13584 -S'editable' -p13585 -I00 -sS'value' -p13586 -S'none' -p13587 -sssS'description' -p13588 -(dp13589 -S'editable' -p13590 -I01 -sS'value' -p13591 -g47 -sssS'id' -p13592 -(dp13593 -S'mandatory' -p13594 -(dp13595 -S'editable' -p13596 -I00 -sS'value' -p13597 -I00 -ssS'name' -p13598 -(dp13599 -S'editable' -p13600 -I01 -sS'value' -p13601 -S'Id' -p13602 -ssS'data_type' -p13603 -(dp13604 -S'editable' -p13605 -I00 -sS'value' -p13606 -S'number' -p13607 -ssS'entity_type' -p13608 -(dp13609 -S'editable' -p13610 -I00 -sS'value' -p13611 -S'Phase' -p13612 -ssS'editable' -p13613 -(dp13614 -S'editable' -p13615 -I00 -sS'value' -p13616 -I00 -ssS'unique' -p13617 -(dp13618 -S'editable' -p13619 -I00 -sS'value' -p13620 -I00 -ssS'properties' -p13621 -(dp13622 -S'default_value' -p13623 -(dp13624 -S'editable' -p13625 -I00 -sS'value' -p13626 -NssS'summary_default' -p13627 -(dp13628 -S'editable' -p13629 -I01 -sS'value' -p13630 -S'none' -p13631 -sssS'description' -p13632 -(dp13633 -S'editable' -p13634 -I01 -sS'value' -p13635 -g47 -sssS'updated_by' -p13636 -(dp13637 -S'mandatory' -p13638 -(dp13639 -S'editable' -p13640 -I00 -sS'value' -p13641 -I00 -ssS'name' -p13642 -(dp13643 -S'editable' -p13644 -I01 -sS'value' -p13645 -S'Updated by' -p13646 -ssS'data_type' -p13647 -(dp13648 -S'editable' -p13649 -I00 -sS'value' -p13650 -S'entity' -p13651 -ssS'entity_type' -p13652 -(dp13653 -S'editable' -p13654 -I00 -sS'value' -p13655 -S'Phase' -p13656 -ssS'editable' -p13657 -(dp13658 -S'editable' -p13659 -I00 -sS'value' -p13660 -I00 -ssS'unique' -p13661 -(dp13662 -S'editable' -p13663 -I00 -sS'value' -p13664 -I00 -ssS'properties' -p13665 -(dp13666 -S'default_value' -p13667 -(dp13668 -S'editable' -p13669 -I00 -sS'value' -p13670 -NssS'summary_default' -p13671 -(dp13672 -S'editable' -p13673 -I01 -sS'value' -p13674 -S'none' -p13675 -ssS'valid_types' -p13676 -(dp13677 -S'editable' -p13678 -I01 -sS'value' -p13679 -(lp13680 -S'HumanUser' -p13681 -aS'ApiUser' -p13682 -asssS'description' -p13683 -(dp13684 -S'editable' -p13685 -I01 -sS'value' -p13686 -g47 -ssssS'PublishedFile' -p13687 -(dp13688 -S'open_notes_count' -p13689 -(dp13690 -S'mandatory' -p13691 -(dp13692 -S'editable' -p13693 -I00 -sS'value' -p13694 -I00 -ssS'name' -p13695 -(dp13696 -S'editable' -p13697 -I01 -sS'value' -p13698 -S'Open Notes Count' -p13699 -ssS'data_type' -p13700 -(dp13701 -S'editable' -p13702 -I00 -sS'value' -p13703 -S'text' -p13704 -ssS'entity_type' -p13705 -(dp13706 -S'editable' -p13707 -I00 -sS'value' -p13708 -S'PublishedFile' -p13709 -ssS'editable' -p13710 -(dp13711 -S'editable' -p13712 -I00 -sS'value' -p13713 -I00 -ssS'unique' -p13714 -(dp13715 -S'editable' -p13716 -I00 -sS'value' -p13717 -I00 -ssS'properties' -p13718 -(dp13719 -S'default_value' -p13720 -(dp13721 -S'editable' -p13722 -I00 -sS'value' -p13723 -NssS'summary_default' -p13724 -(dp13725 -S'editable' -p13726 -I01 -sS'value' -p13727 -S'none' -p13728 -sssS'description' -p13729 -(dp13730 -S'editable' -p13731 -I01 -sS'value' -p13732 -g47 -sssS'code' -p13733 -(dp13734 -S'mandatory' -p13735 -(dp13736 -S'editable' -p13737 -I00 -sS'value' -p13738 -I01 -ssS'name' -p13739 -(dp13740 -S'editable' -p13741 -I01 -sS'value' -p13742 -S'Published File Name' -p13743 -ssS'data_type' -p13744 -(dp13745 -S'editable' -p13746 -I00 -sS'value' -p13747 -S'text' -p13748 -ssS'entity_type' -p13749 -(dp13750 -S'editable' -p13751 -I00 -sS'value' -p13752 -S'PublishedFile' -p13753 -ssS'editable' -p13754 -(dp13755 -S'editable' -p13756 -I00 -sS'value' -p13757 -I01 -ssS'unique' -p13758 -(dp13759 -S'editable' -p13760 -I00 -sS'value' -p13761 -I00 -ssS'properties' -p13762 -(dp13763 -S'default_value' -p13764 -(dp13765 -S'editable' -p13766 -I00 -sS'value' -p13767 -NssS'summary_default' -p13768 -(dp13769 -S'editable' -p13770 -I01 -sS'value' -p13771 -S'none' -p13772 -sssS'description' -p13773 -(dp13774 -S'editable' -p13775 -I01 -sS'value' -p13776 -g47 -sssS'image' -p13777 -(dp13778 -S'mandatory' -p13779 -(dp13780 -S'editable' -p13781 -I00 -sS'value' -p13782 -I00 -ssS'name' -p13783 -(dp13784 -S'editable' -p13785 -I01 -sS'value' -p13786 -S'Thumbnail' -p13787 -ssS'data_type' -p13788 -(dp13789 -S'editable' -p13790 -I00 -sS'value' -p13791 -S'image' -p13792 -ssS'entity_type' -p13793 -(dp13794 -S'editable' -p13795 -I00 -sS'value' -p13796 -S'PublishedFile' -p13797 -ssS'editable' -p13798 -(dp13799 -S'editable' -p13800 -I00 -sS'value' -p13801 -I01 -ssS'unique' -p13802 -(dp13803 -S'editable' -p13804 -I00 -sS'value' -p13805 -I00 -ssS'properties' -p13806 -(dp13807 -S'default_value' -p13808 -(dp13809 -S'editable' -p13810 -I00 -sS'value' -p13811 -NssS'summary_default' -p13812 -(dp13813 -S'editable' -p13814 -I01 -sS'value' -p13815 -S'none' -p13816 -sssS'description' -p13817 -(dp13818 -S'editable' -p13819 -I01 -sS'value' -p13820 -g47 -sssS'updated_at' -p13821 -(dp13822 -S'mandatory' -p13823 -(dp13824 -S'editable' -p13825 -I00 -sS'value' -p13826 -I00 -ssS'name' -p13827 -(dp13828 -S'editable' -p13829 -I01 -sS'value' -p13830 -S'Date Updated' -p13831 -ssS'data_type' -p13832 -(dp13833 -S'editable' -p13834 -I00 -sS'value' -p13835 -S'date_time' -p13836 -ssS'entity_type' -p13837 -(dp13838 -S'editable' -p13839 -I00 -sS'value' -p13840 -S'PublishedFile' -p13841 -ssS'editable' -p13842 -(dp13843 -S'editable' -p13844 -I00 -sS'value' -p13845 -I00 -ssS'unique' -p13846 -(dp13847 -S'editable' -p13848 -I00 -sS'value' -p13849 -I00 -ssS'properties' -p13850 -(dp13851 -S'default_value' -p13852 -(dp13853 -S'editable' -p13854 -I00 -sS'value' -p13855 -NssS'summary_default' -p13856 -(dp13857 -S'editable' -p13858 -I01 -sS'value' -p13859 -S'none' -p13860 -sssS'description' -p13861 -(dp13862 -S'editable' -p13863 -I01 -sS'value' -p13864 -g47 -sssS'entity' -p13865 -(dp13866 -S'mandatory' -p13867 -(dp13868 -S'editable' -p13869 -I00 -sS'value' -p13870 -I00 -ssS'name' -p13871 -(dp13872 -S'editable' -p13873 -I01 -sS'value' -p13874 -S'Link' -p13875 -ssS'data_type' -p13876 -(dp13877 -S'editable' -p13878 -I00 -sS'value' -p13879 -S'entity' -p13880 -ssS'entity_type' -p13881 -(dp13882 -S'editable' -p13883 -I00 -sS'value' -p13884 -S'PublishedFile' -p13885 -ssS'editable' -p13886 -(dp13887 -S'editable' -p13888 -I00 -sS'value' -p13889 -I01 -ssS'unique' -p13890 -(dp13891 -S'editable' -p13892 -I00 -sS'value' -p13893 -I00 -ssS'properties' -p13894 -(dp13895 -S'default_value' -p13896 -(dp13897 -S'editable' -p13898 -I00 -sS'value' -p13899 -NssS'summary_default' -p13900 -(dp13901 -S'editable' -p13902 -I01 -sS'value' -p13903 -S'none' -p13904 -ssS'valid_types' -p13905 -(dp13906 -S'editable' -p13907 -I01 -sS'value' -p13908 -(lp13909 -S'Asset' -p13910 -aS'Shot' -p13911 -aS'Project' -p13912 -asssS'description' -p13913 -(dp13914 -S'editable' -p13915 -I01 -sS'value' -p13916 -g47 -sssS'cached_display_name' -p13917 -(dp13918 -S'mandatory' -p13919 -(dp13920 -S'editable' -p13921 -I00 -sS'value' -p13922 -I00 -ssS'name' -p13923 -(dp13924 -S'editable' -p13925 -I01 -sS'value' -p13926 -S'Cached Display Name' -p13927 -ssS'data_type' -p13928 -(dp13929 -S'editable' -p13930 -I00 -sS'value' -p13931 -S'text' -p13932 -ssS'entity_type' -p13933 -(dp13934 -S'editable' -p13935 -I00 -sS'value' -p13936 -S'PublishedFile' -p13937 -ssS'editable' -p13938 -(dp13939 -S'editable' -p13940 -I00 -sS'value' -p13941 -I01 -ssS'unique' -p13942 -(dp13943 -S'editable' -p13944 -I00 -sS'value' -p13945 -I00 -ssS'properties' -p13946 -(dp13947 -S'default_value' -p13948 -(dp13949 -S'editable' -p13950 -I00 -sS'value' -p13951 -NssS'summary_default' -p13952 -(dp13953 -S'editable' -p13954 -I00 -sS'value' -p13955 -S'none' -p13956 -sssS'description' -p13957 -(dp13958 -S'editable' -p13959 -I01 -sS'value' -p13960 -g47 -sssS'path_cache' -p13961 -(dp13962 -S'mandatory' -p13963 -(dp13964 -S'editable' -p13965 -I00 -sS'value' -p13966 -I00 -ssS'name' -p13967 -(dp13968 -S'editable' -p13969 -I01 -sS'value' -p13970 -S'Path Cache' -p13971 -ssS'data_type' -p13972 -(dp13973 -S'editable' -p13974 -I00 -sS'value' -p13975 -S'text' -p13976 -ssS'entity_type' -p13977 -(dp13978 -S'editable' -p13979 -I00 -sS'value' -p13980 -S'PublishedFile' -p13981 -ssS'editable' -p13982 -(dp13983 -S'editable' -p13984 -I00 -sS'value' -p13985 -I01 -ssS'unique' -p13986 -(dp13987 -S'editable' -p13988 -I00 -sS'value' -p13989 -I00 -ssS'properties' -p13990 -(dp13991 -S'default_value' -p13992 -(dp13993 -S'editable' -p13994 -I00 -sS'value' -p13995 -NssS'summary_default' -p13996 -(dp13997 -S'editable' -p13998 -I01 -sS'value' -p13999 -S'none' -p14000 -sssS'description' -p14001 -(dp14002 -S'editable' -p14003 -I01 -sS'value' -p14004 -g47 -sssS'id' -p14005 -(dp14006 -S'mandatory' -p14007 -(dp14008 -S'editable' -p14009 -I00 -sS'value' -p14010 -I00 -ssS'name' -p14011 -(dp14012 -S'editable' -p14013 -I01 -sS'value' -p14014 -S'Id' -p14015 -ssS'data_type' -p14016 -(dp14017 -S'editable' -p14018 -I00 -sS'value' -p14019 -S'number' -p14020 -ssS'entity_type' -p14021 -(dp14022 -S'editable' -p14023 -I00 -sS'value' -p14024 -S'PublishedFile' -p14025 -ssS'editable' -p14026 -(dp14027 -S'editable' -p14028 -I00 -sS'value' -p14029 -I00 -ssS'unique' -p14030 -(dp14031 -S'editable' -p14032 -I00 -sS'value' -p14033 -I00 -ssS'properties' -p14034 -(dp14035 -S'default_value' -p14036 -(dp14037 -S'editable' -p14038 -I00 -sS'value' -p14039 -NssS'summary_default' -p14040 -(dp14041 -S'editable' -p14042 -I01 -sS'value' -p14043 -S'none' -p14044 -sssS'description' -p14045 -(dp14046 -S'editable' -p14047 -I01 -sS'value' -p14048 -g47 -sssS'updated_by' -p14049 -(dp14050 -S'mandatory' -p14051 -(dp14052 -S'editable' -p14053 -I00 -sS'value' -p14054 -I00 -ssS'name' -p14055 -(dp14056 -S'editable' -p14057 -I01 -sS'value' -p14058 -S'Updated by' -p14059 -ssS'data_type' -p14060 -(dp14061 -S'editable' -p14062 -I00 -sS'value' -p14063 -S'entity' -p14064 -ssS'entity_type' -p14065 -(dp14066 -S'editable' -p14067 -I00 -sS'value' -p14068 -S'PublishedFile' -p14069 -ssS'editable' -p14070 -(dp14071 -S'editable' -p14072 -I00 -sS'value' -p14073 -I00 -ssS'unique' -p14074 -(dp14075 -S'editable' -p14076 -I00 -sS'value' -p14077 -I00 -ssS'properties' -p14078 -(dp14079 -S'default_value' -p14080 -(dp14081 -S'editable' -p14082 -I00 -sS'value' -p14083 -NssS'summary_default' -p14084 -(dp14085 -S'editable' -p14086 -I01 -sS'value' -p14087 -S'none' -p14088 -ssS'valid_types' -p14089 -(dp14090 -S'editable' -p14091 -I01 -sS'value' -p14092 -(lp14093 -S'HumanUser' -p14094 -aS'ApiUser' -p14095 -asssS'description' -p14096 -(dp14097 -S'editable' -p14098 -I01 -sS'value' -p14099 -g47 -sssS'open_notes' -p14100 -(dp14101 -S'mandatory' -p14102 -(dp14103 -S'editable' -p14104 -I00 -sS'value' -p14105 -I00 -ssS'name' -p14106 -(dp14107 -S'editable' -p14108 -I01 -sS'value' -p14109 -S'Open Notes' -p14110 -ssS'data_type' -p14111 -(dp14112 -S'editable' -p14113 -I00 -sS'value' -p14114 -S'multi_entity' -p14115 -ssS'entity_type' -p14116 -(dp14117 -S'editable' -p14118 -I00 -sS'value' -p14119 -S'PublishedFile' -p14120 -ssS'editable' -p14121 -(dp14122 -S'editable' -p14123 -I00 -sS'value' -p14124 -I00 -ssS'unique' -p14125 -(dp14126 -S'editable' -p14127 -I00 -sS'value' -p14128 -I00 -ssS'properties' -p14129 -(dp14130 -S'default_value' -p14131 -(dp14132 -S'editable' -p14133 -I00 -sS'value' -p14134 -NssS'summary_default' -p14135 -(dp14136 -S'editable' -p14137 -I01 -sS'value' -p14138 -S'none' -p14139 -ssS'valid_types' -p14140 -(dp14141 -S'editable' -p14142 -I01 -sS'value' -p14143 -(lp14144 -S'Note' -p14145 -asssS'description' -p14146 -(dp14147 -S'editable' -p14148 -I01 -sS'value' -p14149 -g47 -sssS'created_by' -p14150 -(dp14151 -S'mandatory' -p14152 -(dp14153 -S'editable' -p14154 -I00 -sS'value' -p14155 -I00 -ssS'name' -p14156 -(dp14157 -S'editable' -p14158 -I01 -sS'value' -p14159 -S'Created by' -p14160 -ssS'data_type' -p14161 -(dp14162 -S'editable' -p14163 -I00 -sS'value' -p14164 -S'entity' -p14165 -ssS'entity_type' -p14166 -(dp14167 -S'editable' -p14168 -I00 -sS'value' -p14169 -S'PublishedFile' -p14170 -ssS'editable' -p14171 -(dp14172 -S'editable' -p14173 -I00 -sS'value' -p14174 -I00 -ssS'unique' -p14175 -(dp14176 -S'editable' -p14177 -I00 -sS'value' -p14178 -I00 -ssS'properties' -p14179 -(dp14180 -S'default_value' -p14181 -(dp14182 -S'editable' -p14183 -I00 -sS'value' -p14184 -NssS'summary_default' -p14185 -(dp14186 -S'editable' -p14187 -I01 -sS'value' -p14188 -S'none' -p14189 -ssS'valid_types' -p14190 -(dp14191 -S'editable' -p14192 -I01 -sS'value' -p14193 -(lp14194 -S'HumanUser' -p14195 -aS'ApiUser' -p14196 -asssS'description' -p14197 -(dp14198 -S'editable' -p14199 -I01 -sS'value' -p14200 -g47 -sssS'version' -p14201 -(dp14202 -S'mandatory' -p14203 -(dp14204 -S'editable' -p14205 -I00 -sS'value' -p14206 -I00 -ssS'name' -p14207 -(dp14208 -S'editable' -p14209 -I01 -sS'value' -p14210 -S'Version' -p14211 -ssS'data_type' -p14212 -(dp14213 -S'editable' -p14214 -I00 -sS'value' -p14215 -S'entity' -p14216 -ssS'entity_type' -p14217 -(dp14218 -S'editable' -p14219 -I00 -sS'value' -p14220 -S'PublishedFile' -p14221 -ssS'editable' -p14222 -(dp14223 -S'editable' -p14224 -I00 -sS'value' -p14225 -I01 -ssS'unique' -p14226 -(dp14227 -S'editable' -p14228 -I00 -sS'value' -p14229 -I00 -ssS'properties' -p14230 -(dp14231 -S'default_value' -p14232 -(dp14233 -S'editable' -p14234 -I00 -sS'value' -p14235 -NssS'summary_default' -p14236 -(dp14237 -S'editable' -p14238 -I01 -sS'value' -p14239 -S'none' -p14240 -ssS'valid_types' -p14241 -(dp14242 -S'editable' -p14243 -I01 -sS'value' -p14244 -(lp14245 -S'Version' -p14246 -asssS'description' -p14247 -(dp14248 -S'editable' -p14249 -I01 -sS'value' -p14250 -g47 -sssS'upstream_published_files' -p14251 -(dp14252 -S'mandatory' -p14253 -(dp14254 -S'editable' -p14255 -I00 -sS'value' -p14256 -I00 -ssS'name' -p14257 -(dp14258 -S'editable' -p14259 -I01 -sS'value' -p14260 -S'Upstream Published Files' -p14261 -ssS'data_type' -p14262 -(dp14263 -S'editable' -p14264 -I00 -sS'value' -p14265 -S'multi_entity' -p14266 -ssS'entity_type' -p14267 -(dp14268 -S'editable' -p14269 -I00 -sS'value' -p14270 -S'PublishedFile' -p14271 -ssS'editable' -p14272 -(dp14273 -S'editable' -p14274 -I00 -sS'value' -p14275 -I01 -ssS'unique' -p14276 -(dp14277 -S'editable' -p14278 -I00 -sS'value' -p14279 -I00 -ssS'properties' -p14280 -(dp14281 -S'default_value' -p14282 -(dp14283 -S'editable' -p14284 -I00 -sS'value' -p14285 -NssS'summary_default' -p14286 -(dp14287 -S'editable' -p14288 -I00 -sS'value' -p14289 -S'none' -p14290 -ssS'valid_types' -p14291 -(dp14292 -S'editable' -p14293 -I00 -sS'value' -p14294 -(lp14295 -S'PublishedFile' -p14296 -asssS'description' -p14297 -(dp14298 -S'editable' -p14299 -I01 -sS'value' -p14300 -g47 -sssS'sg_status_list' -p14301 -(dp14302 -S'mandatory' -p14303 -(dp14304 -S'editable' -p14305 -I00 -sS'value' -p14306 -I00 -ssS'name' -p14307 -(dp14308 -S'editable' -p14309 -I01 -sS'value' -p14310 -S'Status' -p14311 -ssS'data_type' -p14312 -(dp14313 -S'editable' -p14314 -I00 -sS'value' -p14315 -S'status_list' -p14316 -ssS'entity_type' -p14317 -(dp14318 -S'editable' -p14319 -I00 -sS'value' -p14320 -S'PublishedFile' -p14321 -ssS'editable' -p14322 -(dp14323 -S'editable' -p14324 -I00 -sS'value' -p14325 -I01 -ssS'unique' -p14326 -(dp14327 -S'editable' -p14328 -I00 -sS'value' -p14329 -I00 -ssS'properties' -p14330 -(dp14331 -S'default_value' -p14332 -(dp14333 -S'editable' -p14334 -I01 -sS'value' -p14335 -S'wtg' -p14336 -ssS'valid_values' -p14337 -(dp14338 -S'editable' -p14339 -I01 -sS'value' -p14340 -(lp14341 -S'wtg' -p14342 -aS'ip' -p14343 -aS'cmpt' -p14344 -assS'summary_default' -p14345 -(dp14346 -S'editable' -p14347 -I01 -sS'value' -p14348 -S'none' -p14349 -sssS'description' -p14350 -(dp14351 -S'editable' -p14352 -I01 -sS'value' -p14353 -g47 -sssS'description' -p14354 -(dp14355 -S'mandatory' -p14356 -(dp14357 -S'editable' -p14358 -I00 -sS'value' -p14359 -I00 -ssS'name' -p14360 -(dp14361 -S'editable' -p14362 -I01 -sS'value' -p14363 -S'Description' -p14364 -ssS'data_type' -p14365 -(dp14366 -S'editable' -p14367 -I00 -sS'value' -p14368 -S'text' -p14369 -ssS'entity_type' -p14370 -(dp14371 -S'editable' -p14372 -I00 -sS'value' -p14373 -S'PublishedFile' -p14374 -ssS'editable' -p14375 -(dp14376 -S'editable' -p14377 -I00 -sS'value' -p14378 -I01 -ssS'unique' -p14379 -(dp14380 -S'editable' -p14381 -I00 -sS'value' -p14382 -I00 -ssS'properties' -p14383 -(dp14384 -S'default_value' -p14385 -(dp14386 -S'editable' -p14387 -I00 -sS'value' -p14388 -NssS'summary_default' -p14389 -(dp14390 -S'editable' -p14391 -I01 -sS'value' -p14392 -S'none' -p14393 -sssS'description' -p14394 -(dp14395 -S'editable' -p14396 -I01 -sS'value' -p14397 -g47 -sssS'path_cache_storage' -p14398 -(dp14399 -S'mandatory' -p14400 -(dp14401 -S'editable' -p14402 -I00 -sS'value' -p14403 -I00 -ssS'name' -p14404 -(dp14405 -S'editable' -p14406 -I01 -sS'value' -p14407 -S'Path Cache Storage' -p14408 -ssS'data_type' -p14409 -(dp14410 -S'editable' -p14411 -I00 -sS'value' -p14412 -S'entity' -p14413 -ssS'entity_type' -p14414 -(dp14415 -S'editable' -p14416 -I00 -sS'value' -p14417 -S'PublishedFile' -p14418 -ssS'editable' -p14419 -(dp14420 -S'editable' -p14421 -I00 -sS'value' -p14422 -I01 -ssS'unique' -p14423 -(dp14424 -S'editable' -p14425 -I00 -sS'value' -p14426 -I00 -ssS'properties' -p14427 -(dp14428 -S'default_value' -p14429 -(dp14430 -S'editable' -p14431 -I00 -sS'value' -p14432 -NssS'summary_default' -p14433 -(dp14434 -S'editable' -p14435 -I01 -sS'value' -p14436 -S'none' -p14437 -ssS'valid_types' -p14438 -(dp14439 -S'editable' -p14440 -I01 -sS'value' -p14441 -(lp14442 -S'LocalStorage' -p14443 -asssS'description' -p14444 -(dp14445 -S'editable' -p14446 -I01 -sS'value' -p14447 -g47 -sssS'downstream_published_files' -p14448 -(dp14449 -S'mandatory' -p14450 -(dp14451 -S'editable' -p14452 -I00 -sS'value' -p14453 -I00 -ssS'name' -p14454 -(dp14455 -S'editable' -p14456 -I01 -sS'value' -p14457 -S'Downstream Published Files' -p14458 -ssS'data_type' -p14459 -(dp14460 -S'editable' -p14461 -I00 -sS'value' -p14462 -S'multi_entity' -p14463 -ssS'entity_type' -p14464 -(dp14465 -S'editable' -p14466 -I00 -sS'value' -p14467 -S'PublishedFile' -p14468 -ssS'editable' -p14469 -(dp14470 -S'editable' -p14471 -I00 -sS'value' -p14472 -I01 -ssS'unique' -p14473 -(dp14474 -S'editable' -p14475 -I00 -sS'value' -p14476 -I00 -ssS'properties' -p14477 -(dp14478 -S'default_value' -p14479 -(dp14480 -S'editable' -p14481 -I00 -sS'value' -p14482 -NssS'summary_default' -p14483 -(dp14484 -S'editable' -p14485 -I00 -sS'value' -p14486 -S'none' -p14487 -ssS'valid_types' -p14488 -(dp14489 -S'editable' -p14490 -I00 -sS'value' -p14491 -(lp14492 -S'PublishedFile' -p14493 -asssS'description' -p14494 -(dp14495 -S'editable' -p14496 -I01 -sS'value' -p14497 -g47 -sssS'path' -p14498 -(dp14499 -S'mandatory' -p14500 -(dp14501 -S'editable' -p14502 -I00 -sS'value' -p14503 -I00 -ssS'name' -p14504 -(dp14505 -S'editable' -p14506 -I01 -sS'value' -p14507 -S'Path' -p14508 -ssS'data_type' -p14509 -(dp14510 -S'editable' -p14511 -I00 -sS'value' -p14512 -S'url' -p14513 -ssS'entity_type' -p14514 -(dp14515 -S'editable' -p14516 -I00 -sS'value' -p14517 -S'PublishedFile' -p14518 -ssS'editable' -p14519 -(dp14520 -S'editable' -p14521 -I00 -sS'value' -p14522 -I01 -ssS'unique' -p14523 -(dp14524 -S'editable' -p14525 -I00 -sS'value' -p14526 -I00 -ssS'properties' -p14527 -(dp14528 -S'default_value' -p14529 -(dp14530 -S'editable' -p14531 -I00 -sS'value' -p14532 -NssS'open_in_new_window' -p14533 -(dp14534 -S'editable' -p14535 -I01 -sS'value' -p14536 -I01 -ssS'summary_default' -p14537 -(dp14538 -S'editable' -p14539 -I01 -sS'value' -p14540 -S'none' -p14541 -sssS'description' -p14542 -(dp14543 -S'editable' -p14544 -I01 -sS'value' -p14545 -g47 -sssS'version_number' -p14546 -(dp14547 -S'mandatory' -p14548 -(dp14549 -S'editable' -p14550 -I00 -sS'value' -p14551 -I00 -ssS'name' -p14552 -(dp14553 -S'editable' -p14554 -I01 -sS'value' -p14555 -S'Version Number' -p14556 -ssS'data_type' -p14557 -(dp14558 -S'editable' -p14559 -I00 -sS'value' -p14560 -S'number' -p14561 -ssS'entity_type' -p14562 -(dp14563 -S'editable' -p14564 -I00 -sS'value' -p14565 -S'PublishedFile' -p14566 -ssS'editable' -p14567 -(dp14568 -S'editable' -p14569 -I00 -sS'value' -p14570 -I01 -ssS'unique' -p14571 -(dp14572 -S'editable' -p14573 -I00 -sS'value' -p14574 -I00 -ssS'properties' -p14575 -(dp14576 -S'default_value' -p14577 -(dp14578 -S'editable' -p14579 -I00 -sS'value' -p14580 -NssS'summary_default' -p14581 -(dp14582 -S'editable' -p14583 -I01 -sS'value' -p14584 -S'none' -p14585 -sssS'description' -p14586 -(dp14587 -S'editable' -p14588 -I01 -sS'value' -p14589 -g47 -sssS'task' -p14590 -(dp14591 -S'mandatory' -p14592 -(dp14593 -S'editable' -p14594 -I00 -sS'value' -p14595 -I00 -ssS'name' -p14596 -(dp14597 -S'editable' -p14598 -I01 -sS'value' -p14599 -S'Task' -p14600 -ssS'data_type' -p14601 -(dp14602 -S'editable' -p14603 -I00 -sS'value' -p14604 -S'entity' -p14605 -ssS'entity_type' -p14606 -(dp14607 -S'editable' -p14608 -I00 -sS'value' -p14609 -S'PublishedFile' -p14610 -ssS'editable' -p14611 -(dp14612 -S'editable' -p14613 -I00 -sS'value' -p14614 -I01 -ssS'unique' -p14615 -(dp14616 -S'editable' -p14617 -I00 -sS'value' -p14618 -I00 -ssS'properties' -p14619 -(dp14620 -S'default_value' -p14621 -(dp14622 -S'editable' -p14623 -I00 -sS'value' -p14624 -NssS'summary_default' -p14625 -(dp14626 -S'editable' -p14627 -I01 -sS'value' -p14628 -S'none' -p14629 -ssS'valid_types' -p14630 -(dp14631 -S'editable' -p14632 -I01 -sS'value' -p14633 -(lp14634 -S'Task' -p14635 -asssS'description' -p14636 -(dp14637 -S'editable' -p14638 -I01 -sS'value' -p14639 -g47 -sssS'name' -p14640 -(dp14641 -S'mandatory' -p14642 -(dp14643 -S'editable' -p14644 -I00 -sS'value' -p14645 -I00 -ssS'name' -p14646 -(dp14647 -S'editable' -p14648 -I01 -sS'value' -p14649 -S'Name' -p14650 -ssS'data_type' -p14651 -(dp14652 -S'editable' -p14653 -I00 -sS'value' -p14654 -S'text' -p14655 -ssS'entity_type' -p14656 -(dp14657 -S'editable' -p14658 -I00 -sS'value' -p14659 -S'PublishedFile' -p14660 -ssS'editable' -p14661 -(dp14662 -S'editable' -p14663 -I00 -sS'value' -p14664 -I01 -ssS'unique' -p14665 -(dp14666 -S'editable' -p14667 -I00 -sS'value' -p14668 -I00 -ssS'properties' -p14669 -(dp14670 -S'default_value' -p14671 -(dp14672 -S'editable' -p14673 -I00 -sS'value' -p14674 -NssS'summary_default' -p14675 -(dp14676 -S'editable' -p14677 -I01 -sS'value' -p14678 -S'none' -p14679 -sssS'description' -p14680 -(dp14681 -S'editable' -p14682 -I01 -sS'value' -p14683 -g47 -sssS'created_at' -p14684 -(dp14685 -S'mandatory' -p14686 -(dp14687 -S'editable' -p14688 -I00 -sS'value' -p14689 -I00 -ssS'name' -p14690 -(dp14691 -S'editable' -p14692 -I01 -sS'value' -p14693 -S'Date Created' -p14694 -ssS'data_type' -p14695 -(dp14696 -S'editable' -p14697 -I00 -sS'value' -p14698 -S'date_time' -p14699 -ssS'entity_type' -p14700 -(dp14701 -S'editable' -p14702 -I00 -sS'value' -p14703 -S'PublishedFile' -p14704 -ssS'editable' -p14705 -(dp14706 -S'editable' -p14707 -I00 -sS'value' -p14708 -I00 -ssS'unique' -p14709 -(dp14710 -S'editable' -p14711 -I00 -sS'value' -p14712 -I00 -ssS'properties' -p14713 -(dp14714 -S'default_value' -p14715 -(dp14716 -S'editable' -p14717 -I00 -sS'value' -p14718 -NssS'summary_default' -p14719 -(dp14720 -S'editable' -p14721 -I01 -sS'value' -p14722 -S'none' -p14723 -sssS'description' -p14724 -(dp14725 -S'editable' -p14726 -I01 -sS'value' -p14727 -g47 -sssS'published_file_type' -p14728 -(dp14729 -S'mandatory' -p14730 -(dp14731 -S'editable' -p14732 -I00 -sS'value' -p14733 -I00 -ssS'name' -p14734 -(dp14735 -S'editable' -p14736 -I01 -sS'value' -p14737 -S'Published File Type' -p14738 -ssS'data_type' -p14739 -(dp14740 -S'editable' -p14741 -I00 -sS'value' -p14742 -S'entity' -p14743 -ssS'entity_type' -p14744 -(dp14745 -S'editable' -p14746 -I00 -sS'value' -p14747 -S'PublishedFile' -p14748 -ssS'editable' -p14749 -(dp14750 -S'editable' -p14751 -I00 -sS'value' -p14752 -I01 -ssS'unique' -p14753 -(dp14754 -S'editable' -p14755 -I00 -sS'value' -p14756 -I00 -ssS'properties' -p14757 -(dp14758 -S'default_value' -p14759 -(dp14760 -S'editable' -p14761 -I00 -sS'value' -p14762 -NssS'summary_default' -p14763 -(dp14764 -S'editable' -p14765 -I01 -sS'value' -p14766 -S'none' -p14767 -ssS'valid_types' -p14768 -(dp14769 -S'editable' -p14770 -I01 -sS'value' -p14771 -(lp14772 -S'PublishedFileType' -p14773 -asssS'description' -p14774 -(dp14775 -S'editable' -p14776 -I01 -sS'value' -p14777 -g47 -sssS'project' -p14778 -(dp14779 -S'mandatory' -p14780 -(dp14781 -S'editable' -p14782 -I00 -sS'value' -p14783 -I00 -ssS'name' -p14784 -(dp14785 -S'editable' -p14786 -I01 -sS'value' -p14787 -S'Project' -p14788 -ssS'data_type' -p14789 -(dp14790 -S'editable' -p14791 -I00 -sS'value' -p14792 -S'entity' -p14793 -ssS'entity_type' -p14794 -(dp14795 -S'editable' -p14796 -I00 -sS'value' -p14797 -S'PublishedFile' -p14798 -ssS'editable' -p14799 -(dp14800 -S'editable' -p14801 -I00 -sS'value' -p14802 -I01 -ssS'unique' -p14803 -(dp14804 -S'editable' -p14805 -I00 -sS'value' -p14806 -I00 -ssS'properties' -p14807 -(dp14808 -S'default_value' -p14809 -(dp14810 -S'editable' -p14811 -I00 -sS'value' -p14812 -NssS'summary_default' -p14813 -(dp14814 -S'editable' -p14815 -I01 -sS'value' -p14816 -S'none' -p14817 -ssS'valid_types' -p14818 -(dp14819 -S'editable' -p14820 -I01 -sS'value' -p14821 -(lp14822 -S'Project' -p14823 -asssS'description' -p14824 -(dp14825 -S'editable' -p14826 -I01 -sS'value' -p14827 -g47 -sssS'tag_list' -p14828 -(dp14829 -S'mandatory' -p14830 -(dp14831 -S'editable' -p14832 -I00 -sS'value' -p14833 -I00 -ssS'name' -p14834 -(dp14835 -S'editable' -p14836 -I01 -sS'value' -p14837 -S'Tags' -p14838 -ssS'data_type' -p14839 -(dp14840 -S'editable' -p14841 -I00 -sS'value' -p14842 -S'tag_list' -p14843 -ssS'entity_type' -p14844 -(dp14845 -S'editable' -p14846 -I00 -sS'value' -p14847 -S'PublishedFile' -p14848 -ssS'editable' -p14849 -(dp14850 -S'editable' -p14851 -I00 -sS'value' -p14852 -I01 -ssS'unique' -p14853 -(dp14854 -S'editable' -p14855 -I00 -sS'value' -p14856 -I00 -ssS'properties' -p14857 -(dp14858 -S'default_value' -p14859 -(dp14860 -S'editable' -p14861 -I00 -sS'value' -p14862 -NssS'summary_default' -p14863 -(dp14864 -S'editable' -p14865 -I01 -sS'value' -p14866 -S'none' -p14867 -ssS'valid_types' -p14868 -(dp14869 -S'editable' -p14870 -I01 -sS'value' -p14871 -(lp14872 -S'Tag' -p14873 -asssS'description' -p14874 -(dp14875 -S'editable' -p14876 -I01 -sS'value' -p14877 -g47 -sssS'notes' -p14878 -(dp14879 -S'mandatory' -p14880 -(dp14881 -S'editable' -p14882 -I00 -sS'value' -p14883 -I00 -ssS'name' -p14884 -(dp14885 -S'editable' -p14886 -I01 -sS'value' -p14887 -S'Notes' -p14888 -ssS'data_type' -p14889 -(dp14890 -S'editable' -p14891 -I00 -sS'value' -p14892 -S'multi_entity' -p14893 -ssS'entity_type' -p14894 -(dp14895 -S'editable' -p14896 -I00 -sS'value' -p14897 -S'PublishedFile' -p14898 -ssS'editable' -p14899 -(dp14900 -S'editable' -p14901 -I00 -sS'value' -p14902 -I01 -ssS'unique' -p14903 -(dp14904 -S'editable' -p14905 -I00 -sS'value' -p14906 -I00 -ssS'properties' -p14907 -(dp14908 -S'default_value' -p14909 -(dp14910 -S'editable' -p14911 -I00 -sS'value' -p14912 -NssS'summary_default' -p14913 -(dp14914 -S'editable' -p14915 -I01 -sS'value' -p14916 -S'none' -p14917 -ssS'valid_types' -p14918 -(dp14919 -S'editable' -p14920 -I01 -sS'value' -p14921 -(lp14922 -S'Note' -p14923 -asssS'description' -p14924 -(dp14925 -S'editable' -p14926 -I01 -sS'value' -p14927 -g47 -ssssS'ShootDaySceneConnection' -p14928 -(dp14929 -S'cached_display_name' -p14930 -(dp14931 -S'mandatory' -p14932 -(dp14933 -S'editable' -p14934 -I00 -sS'value' -p14935 -I00 -ssS'name' -p14936 -(dp14937 -S'editable' -p14938 -I01 -sS'value' -p14939 -S'Cached Display Name' -p14940 -ssS'data_type' -p14941 -(dp14942 -S'editable' -p14943 -I00 -sS'value' -p14944 -S'text' -p14945 -ssS'entity_type' -p14946 -(dp14947 -S'editable' -p14948 -I00 -sS'value' -p14949 -S'ShootDaySceneConnection' -p14950 -ssS'editable' -p14951 -(dp14952 -S'editable' -p14953 -I00 -sS'value' -p14954 -I01 -ssS'unique' -p14955 -(dp14956 -S'editable' -p14957 -I00 -sS'value' -p14958 -I00 -ssS'properties' -p14959 -(dp14960 -S'default_value' -p14961 -(dp14962 -S'editable' -p14963 -I00 -sS'value' -p14964 -NssS'summary_default' -p14965 -(dp14966 -S'editable' -p14967 -I00 -sS'value' -p14968 -S'none' -p14969 -sssS'description' -p14970 -(dp14971 -S'editable' -p14972 -I01 -sS'value' -p14973 -g47 -sssS'scene' -p14974 -(dp14975 -S'mandatory' -p14976 -(dp14977 -S'editable' -p14978 -I00 -sS'value' -p14979 -I00 -ssS'name' -p14980 -(dp14981 -S'editable' -p14982 -I01 -sS'value' -p14983 -S'Scene' -p14984 -ssS'data_type' -p14985 -(dp14986 -S'editable' -p14987 -I00 -sS'value' -p14988 -S'entity' -p14989 -ssS'entity_type' -p14990 -(dp14991 -S'editable' -p14992 -I00 -sS'value' -p14993 -S'ShootDaySceneConnection' -p14994 -ssS'editable' -p14995 -(dp14996 -S'editable' -p14997 -I00 -sS'value' -p14998 -I00 -ssS'unique' -p14999 -(dp15000 -S'editable' -p15001 -I00 -sS'value' -p15002 -I00 -ssS'properties' -p15003 -(dp15004 -S'default_value' -p15005 -(dp15006 -S'editable' -p15007 -I00 -sS'value' -p15008 -NssS'summary_default' -p15009 -(dp15010 -S'editable' -p15011 -I00 -sS'value' -p15012 -S'none' -p15013 -ssS'valid_types' -p15014 -(dp15015 -S'editable' -p15016 -I00 -sS'value' -p15017 -(lp15018 -S'Scene' -p15019 -asssS'description' -p15020 -(dp15021 -S'editable' -p15022 -I01 -sS'value' -p15023 -g47 -sssS'id' -p15024 -(dp15025 -S'mandatory' -p15026 -(dp15027 -S'editable' -p15028 -I00 -sS'value' -p15029 -I01 -ssS'name' -p15030 -(dp15031 -S'editable' -p15032 -I01 -sS'value' -p15033 -S'Id' -p15034 -ssS'data_type' -p15035 -(dp15036 -S'editable' -p15037 -I00 -sS'value' -p15038 -S'number' -p15039 -ssS'entity_type' -p15040 -(dp15041 -S'editable' -p15042 -I00 -sS'value' -p15043 -S'ShootDaySceneConnection' -p15044 -ssS'editable' -p15045 -(dp15046 -S'editable' -p15047 -I00 -sS'value' -p15048 -I00 -ssS'unique' -p15049 -(dp15050 -S'editable' -p15051 -I00 -sS'value' -p15052 -I00 -ssS'properties' -p15053 -(dp15054 -S'default_value' -p15055 -(dp15056 -S'editable' -p15057 -I00 -sS'value' -p15058 -NssS'summary_default' -p15059 -(dp15060 -S'editable' -p15061 -I00 -sS'value' -p15062 -S'none' -p15063 -sssS'description' -p15064 -(dp15065 -S'editable' -p15066 -I01 -sS'value' -p15067 -g47 -sssS'shoot_day' -p15068 -(dp15069 -S'mandatory' -p15070 -(dp15071 -S'editable' -p15072 -I00 -sS'value' -p15073 -I00 -ssS'name' -p15074 -(dp15075 -S'editable' -p15076 -I01 -sS'value' -p15077 -S'Shoot Day' -p15078 -ssS'data_type' -p15079 -(dp15080 -S'editable' -p15081 -I00 -sS'value' -p15082 -S'entity' -p15083 -ssS'entity_type' -p15084 -(dp15085 -S'editable' -p15086 -I00 -sS'value' -p15087 -S'ShootDaySceneConnection' -p15088 -ssS'editable' -p15089 -(dp15090 -S'editable' -p15091 -I00 -sS'value' -p15092 -I00 -ssS'unique' -p15093 -(dp15094 -S'editable' -p15095 -I00 -sS'value' -p15096 -I00 -ssS'properties' -p15097 -(dp15098 -S'default_value' -p15099 -(dp15100 -S'editable' -p15101 -I00 -sS'value' -p15102 -NssS'summary_default' -p15103 -(dp15104 -S'editable' -p15105 -I00 -sS'value' -p15106 -S'none' -p15107 -ssS'valid_types' -p15108 -(dp15109 -S'editable' -p15110 -I00 -sS'value' -p15111 -(lp15112 -S'ShootDay' -p15113 -asssS'description' -p15114 -(dp15115 -S'editable' -p15116 -I01 -sS'value' -p15117 -g47 -ssssS'AssetShotConnection' -p15118 -(dp15119 -S'cached_display_name' -p15120 -(dp15121 -S'mandatory' -p15122 -(dp15123 -S'editable' -p15124 -I00 -sS'value' -p15125 -I00 -ssS'name' -p15126 -(dp15127 -S'editable' -p15128 -I01 -sS'value' -p15129 -S'Cached Display Name' -p15130 -ssS'data_type' -p15131 -(dp15132 -S'editable' -p15133 -I00 -sS'value' -p15134 -S'text' -p15135 -ssS'entity_type' -p15136 -(dp15137 -S'editable' -p15138 -I00 -sS'value' -p15139 -S'AssetShotConnection' -p15140 -ssS'editable' -p15141 -(dp15142 -S'editable' -p15143 -I00 -sS'value' -p15144 -I01 -ssS'unique' -p15145 -(dp15146 -S'editable' -p15147 -I00 -sS'value' -p15148 -I00 -ssS'properties' -p15149 -(dp15150 -S'default_value' -p15151 -(dp15152 -S'editable' -p15153 -I00 -sS'value' -p15154 -NssS'summary_default' -p15155 -(dp15156 -S'editable' -p15157 -I00 -sS'value' -p15158 -S'none' -p15159 -sssS'description' -p15160 -(dp15161 -S'editable' -p15162 -I01 -sS'value' -p15163 -g47 -sssS'shot' -p15164 -(dp15165 -S'mandatory' -p15166 -(dp15167 -S'editable' -p15168 -I00 -sS'value' -p15169 -I00 -ssS'name' -p15170 -(dp15171 -S'editable' -p15172 -I01 -sS'value' -p15173 -S'Shot' -p15174 -ssS'data_type' -p15175 -(dp15176 -S'editable' -p15177 -I00 -sS'value' -p15178 -S'entity' -p15179 -ssS'entity_type' -p15180 -(dp15181 -S'editable' -p15182 -I00 -sS'value' -p15183 -S'AssetShotConnection' -p15184 -ssS'editable' -p15185 -(dp15186 -S'editable' -p15187 -I00 -sS'value' -p15188 -I00 -ssS'unique' -p15189 -(dp15190 -S'editable' -p15191 -I00 -sS'value' -p15192 -I00 -ssS'properties' -p15193 -(dp15194 -S'default_value' -p15195 -(dp15196 -S'editable' -p15197 -I00 -sS'value' -p15198 -NssS'summary_default' -p15199 -(dp15200 -S'editable' -p15201 -I00 -sS'value' -p15202 -S'none' -p15203 -ssS'valid_types' -p15204 -(dp15205 -S'editable' -p15206 -I00 -sS'value' -p15207 -(lp15208 -S'Shot' -p15209 -asssS'description' -p15210 -(dp15211 -S'editable' -p15212 -I01 -sS'value' -p15213 -g47 -sssS'asset' -p15214 -(dp15215 -S'mandatory' -p15216 -(dp15217 -S'editable' -p15218 -I00 -sS'value' -p15219 -I00 -ssS'name' -p15220 -(dp15221 -S'editable' -p15222 -I01 -sS'value' -p15223 -S'Asset' -p15224 -ssS'data_type' -p15225 -(dp15226 -S'editable' -p15227 -I00 -sS'value' -p15228 -S'entity' -p15229 -ssS'entity_type' -p15230 -(dp15231 -S'editable' -p15232 -I00 -sS'value' -p15233 -S'AssetShotConnection' -p15234 -ssS'editable' -p15235 -(dp15236 -S'editable' -p15237 -I00 -sS'value' -p15238 -I00 -ssS'unique' -p15239 -(dp15240 -S'editable' -p15241 -I00 -sS'value' -p15242 -I00 -ssS'properties' -p15243 -(dp15244 -S'default_value' -p15245 -(dp15246 -S'editable' -p15247 -I00 -sS'value' -p15248 -NssS'summary_default' -p15249 -(dp15250 -S'editable' -p15251 -I00 -sS'value' -p15252 -S'none' -p15253 -ssS'valid_types' -p15254 -(dp15255 -S'editable' -p15256 -I00 -sS'value' -p15257 -(lp15258 -S'Asset' -p15259 -asssS'description' -p15260 -(dp15261 -S'editable' -p15262 -I01 -sS'value' -p15263 -g47 -sssS'id' -p15264 -(dp15265 -S'mandatory' -p15266 -(dp15267 -S'editable' -p15268 -I00 -sS'value' -p15269 -I01 -ssS'name' -p15270 -(dp15271 -S'editable' -p15272 -I01 -sS'value' -p15273 -S'Id' -p15274 -ssS'data_type' -p15275 -(dp15276 -S'editable' -p15277 -I00 -sS'value' -p15278 -S'number' -p15279 -ssS'entity_type' -p15280 -(dp15281 -S'editable' -p15282 -I00 -sS'value' -p15283 -S'AssetShotConnection' -p15284 -ssS'editable' -p15285 -(dp15286 -S'editable' -p15287 -I00 -sS'value' -p15288 -I00 -ssS'unique' -p15289 -(dp15290 -S'editable' -p15291 -I00 -sS'value' -p15292 -I00 -ssS'properties' -p15293 -(dp15294 -S'default_value' -p15295 -(dp15296 -S'editable' -p15297 -I00 -sS'value' -p15298 -NssS'summary_default' -p15299 -(dp15300 -S'editable' -p15301 -I00 -sS'value' -p15302 -S'none' -p15303 -sssS'description' -p15304 -(dp15305 -S'editable' -p15306 -I01 -sS'value' -p15307 -g47 -ssssS'TicketTicketConnection' -p15308 -(dp15309 -S'dest_ticket' -p15310 -(dp15311 -S'mandatory' -p15312 -(dp15313 -S'editable' -p15314 -I00 -sS'value' -p15315 -I00 -ssS'name' -p15316 -(dp15317 -S'editable' -p15318 -I01 -sS'value' -p15319 -S'Ticket' -p15320 -ssS'data_type' -p15321 -(dp15322 -S'editable' -p15323 -I00 -sS'value' -p15324 -S'entity' -p15325 -ssS'entity_type' -p15326 -(dp15327 -S'editable' -p15328 -I00 -sS'value' -p15329 -S'TicketTicketConnection' -p15330 -ssS'editable' -p15331 -(dp15332 -S'editable' -p15333 -I00 -sS'value' -p15334 -I00 -ssS'unique' -p15335 -(dp15336 -S'editable' -p15337 -I00 -sS'value' -p15338 -I00 -ssS'properties' -p15339 -(dp15340 -S'default_value' -p15341 -(dp15342 -S'editable' -p15343 -I00 -sS'value' -p15344 -NssS'summary_default' -p15345 -(dp15346 -S'editable' -p15347 -I00 -sS'value' -p15348 -S'none' -p15349 -ssS'valid_types' -p15350 -(dp15351 -S'editable' -p15352 -I00 -sS'value' -p15353 -(lp15354 -S'Ticket' -p15355 -asssS'description' -p15356 -(dp15357 -S'editable' -p15358 -I01 -sS'value' -p15359 -g47 -sssS'cached_display_name' -p15360 -(dp15361 -S'mandatory' -p15362 -(dp15363 -S'editable' -p15364 -I00 -sS'value' -p15365 -I00 -ssS'name' -p15366 -(dp15367 -S'editable' -p15368 -I01 -sS'value' -p15369 -S'Cached Display Name' -p15370 -ssS'data_type' -p15371 -(dp15372 -S'editable' -p15373 -I00 -sS'value' -p15374 -S'text' -p15375 -ssS'entity_type' -p15376 -(dp15377 -S'editable' -p15378 -I00 -sS'value' -p15379 -S'TicketTicketConnection' -p15380 -ssS'editable' -p15381 -(dp15382 -S'editable' -p15383 -I00 -sS'value' -p15384 -I01 -ssS'unique' -p15385 -(dp15386 -S'editable' -p15387 -I00 -sS'value' -p15388 -I00 -ssS'properties' -p15389 -(dp15390 -S'default_value' -p15391 -(dp15392 -S'editable' -p15393 -I00 -sS'value' -p15394 -NssS'summary_default' -p15395 -(dp15396 -S'editable' -p15397 -I00 -sS'value' -p15398 -S'none' -p15399 -sssS'description' -p15400 -(dp15401 -S'editable' -p15402 -I01 -sS'value' -p15403 -g47 -sssS'source_ticket' -p15404 -(dp15405 -S'mandatory' -p15406 -(dp15407 -S'editable' -p15408 -I00 -sS'value' -p15409 -I00 -ssS'name' -p15410 -(dp15411 -S'editable' -p15412 -I01 -sS'value' -p15413 -S'Ticket' -p15414 -ssS'data_type' -p15415 -(dp15416 -S'editable' -p15417 -I00 -sS'value' -p15418 -S'entity' -p15419 -ssS'entity_type' -p15420 -(dp15421 -S'editable' -p15422 -I00 -sS'value' -p15423 -S'TicketTicketConnection' -p15424 -ssS'editable' -p15425 -(dp15426 -S'editable' -p15427 -I00 -sS'value' -p15428 -I00 -ssS'unique' -p15429 -(dp15430 -S'editable' -p15431 -I00 -sS'value' -p15432 -I00 -ssS'properties' -p15433 -(dp15434 -S'default_value' -p15435 -(dp15436 -S'editable' -p15437 -I00 -sS'value' -p15438 -NssS'summary_default' -p15439 -(dp15440 -S'editable' -p15441 -I00 -sS'value' -p15442 -S'none' -p15443 -ssS'valid_types' -p15444 -(dp15445 -S'editable' -p15446 -I00 -sS'value' -p15447 -(lp15448 -S'Ticket' -p15449 -asssS'description' -p15450 -(dp15451 -S'editable' -p15452 -I01 -sS'value' -p15453 -g47 -sssS'id' -p15454 -(dp15455 -S'mandatory' -p15456 -(dp15457 -S'editable' -p15458 -I00 -sS'value' -p15459 -I01 -ssS'name' -p15460 -(dp15461 -S'editable' -p15462 -I01 -sS'value' -p15463 -S'Id' -p15464 -ssS'data_type' -p15465 -(dp15466 -S'editable' -p15467 -I00 -sS'value' -p15468 -S'number' -p15469 -ssS'entity_type' -p15470 -(dp15471 -S'editable' -p15472 -I00 -sS'value' -p15473 -S'TicketTicketConnection' -p15474 -ssS'editable' -p15475 -(dp15476 -S'editable' -p15477 -I00 -sS'value' -p15478 -I00 -ssS'unique' -p15479 -(dp15480 -S'editable' -p15481 -I00 -sS'value' -p15482 -I00 -ssS'properties' -p15483 -(dp15484 -S'default_value' -p15485 -(dp15486 -S'editable' -p15487 -I00 -sS'value' -p15488 -NssS'summary_default' -p15489 -(dp15490 -S'editable' -p15491 -I00 -sS'value' -p15492 -S'none' -p15493 -sssS'description' -p15494 -(dp15495 -S'editable' -p15496 -I01 -sS'value' -p15497 -g47 -ssssS'AssetBlendshapeConnection' -p15498 -(dp15499 -S'cached_display_name' -p15500 -(dp15501 -S'mandatory' -p15502 -(dp15503 -S'editable' -p15504 -I00 -sS'value' -p15505 -I00 -ssS'name' -p15506 -(dp15507 -S'editable' -p15508 -I01 -sS'value' -p15509 -S'Cached Display Name' -p15510 -ssS'data_type' -p15511 -(dp15512 -S'editable' -p15513 -I00 -sS'value' -p15514 -S'text' -p15515 -ssS'entity_type' -p15516 -(dp15517 -S'editable' -p15518 -I00 -sS'value' -p15519 -S'AssetBlendshapeConnection' -p15520 -ssS'editable' -p15521 -(dp15522 -S'editable' -p15523 -I00 -sS'value' -p15524 -I01 -ssS'unique' -p15525 -(dp15526 -S'editable' -p15527 -I00 -sS'value' -p15528 -I00 -ssS'properties' -p15529 -(dp15530 -S'default_value' -p15531 -(dp15532 -S'editable' -p15533 -I00 -sS'value' -p15534 -NssS'summary_default' -p15535 -(dp15536 -S'editable' -p15537 -I00 -sS'value' -p15538 -S'none' -p15539 -sssS'description' -p15540 -(dp15541 -S'editable' -p15542 -I01 -sS'value' -p15543 -g47 -sssS'asset' -p15544 -(dp15545 -S'mandatory' -p15546 -(dp15547 -S'editable' -p15548 -I00 -sS'value' -p15549 -I00 -ssS'name' -p15550 -(dp15551 -S'editable' -p15552 -I01 -sS'value' -p15553 -S'Asset' -p15554 -ssS'data_type' -p15555 -(dp15556 -S'editable' -p15557 -I00 -sS'value' -p15558 -S'entity' -p15559 -ssS'entity_type' -p15560 -(dp15561 -S'editable' -p15562 -I00 -sS'value' -p15563 -S'AssetBlendshapeConnection' -p15564 -ssS'editable' -p15565 -(dp15566 -S'editable' -p15567 -I00 -sS'value' -p15568 -I00 -ssS'unique' -p15569 -(dp15570 -S'editable' -p15571 -I00 -sS'value' -p15572 -I00 -ssS'properties' -p15573 -(dp15574 -S'default_value' -p15575 -(dp15576 -S'editable' -p15577 -I00 -sS'value' -p15578 -NssS'summary_default' -p15579 -(dp15580 -S'editable' -p15581 -I00 -sS'value' -p15582 -S'none' -p15583 -ssS'valid_types' -p15584 -(dp15585 -S'editable' -p15586 -I00 -sS'value' -p15587 -(lp15588 -S'Asset' -p15589 -asssS'description' -p15590 -(dp15591 -S'editable' -p15592 -I01 -sS'value' -p15593 -g47 -sssS'blendshape' -p15594 -(dp15595 -S'mandatory' -p15596 -(dp15597 -S'editable' -p15598 -I00 -sS'value' -p15599 -I00 -ssS'name' -p15600 -(dp15601 -S'editable' -p15602 -I01 -sS'value' -p15603 -S'Blendshape' -p15604 -ssS'data_type' -p15605 -(dp15606 -S'editable' -p15607 -I00 -sS'value' -p15608 -S'entity' -p15609 -ssS'entity_type' -p15610 -(dp15611 -S'editable' -p15612 -I00 -sS'value' -p15613 -S'AssetBlendshapeConnection' -p15614 -ssS'editable' -p15615 -(dp15616 -S'editable' -p15617 -I00 -sS'value' -p15618 -I00 -ssS'unique' -p15619 -(dp15620 -S'editable' -p15621 -I00 -sS'value' -p15622 -I00 -ssS'properties' -p15623 -(dp15624 -S'default_value' -p15625 -(dp15626 -S'editable' -p15627 -I00 -sS'value' -p15628 -NssS'summary_default' -p15629 -(dp15630 -S'editable' -p15631 -I00 -sS'value' -p15632 -S'none' -p15633 -ssS'valid_types' -p15634 -(dp15635 -S'editable' -p15636 -I00 -sS'value' -p15637 -(lp15638 -S'Blendshape' -p15639 -asssS'description' -p15640 -(dp15641 -S'editable' -p15642 -I01 -sS'value' -p15643 -g47 -sssS'id' -p15644 -(dp15645 -S'mandatory' -p15646 -(dp15647 -S'editable' -p15648 -I00 -sS'value' -p15649 -I01 -ssS'name' -p15650 -(dp15651 -S'editable' -p15652 -I01 -sS'value' -p15653 -S'Id' -p15654 -ssS'data_type' -p15655 -(dp15656 -S'editable' -p15657 -I00 -sS'value' -p15658 -S'number' -p15659 -ssS'entity_type' -p15660 -(dp15661 -S'editable' -p15662 -I00 -sS'value' -p15663 -S'AssetBlendshapeConnection' -p15664 -ssS'editable' -p15665 -(dp15666 -S'editable' -p15667 -I00 -sS'value' -p15668 -I00 -ssS'unique' -p15669 -(dp15670 -S'editable' -p15671 -I00 -sS'value' -p15672 -I00 -ssS'properties' -p15673 -(dp15674 -S'default_value' -p15675 -(dp15676 -S'editable' -p15677 -I00 -sS'value' -p15678 -NssS'summary_default' -p15679 -(dp15680 -S'editable' -p15681 -I00 -sS'value' -p15682 -S'none' -p15683 -sssS'description' -p15684 -(dp15685 -S'editable' -p15686 -I01 -sS'value' -p15687 -g47 -ssssS'PageSetting' -p15688 -(dp15689 -S'created_at' -p15690 -(dp15691 -S'mandatory' -p15692 -(dp15693 -S'editable' -p15694 -I00 -sS'value' -p15695 -I00 -ssS'name' -p15696 -(dp15697 -S'editable' -p15698 -I01 -sS'value' -p15699 -S'Date Created' -p15700 -ssS'data_type' -p15701 -(dp15702 -S'editable' -p15703 -I00 -sS'value' -p15704 -S'date_time' -p15705 -ssS'entity_type' -p15706 -(dp15707 -S'editable' -p15708 -I00 -sS'value' -p15709 -S'PageSetting' -p15710 -ssS'editable' -p15711 -(dp15712 -S'editable' -p15713 -I00 -sS'value' -p15714 -I00 -ssS'unique' -p15715 -(dp15716 -S'editable' -p15717 -I00 -sS'value' -p15718 -I00 -ssS'properties' -p15719 -(dp15720 -S'default_value' -p15721 -(dp15722 -S'editable' -p15723 -I00 -sS'value' -p15724 -NssS'summary_default' -p15725 -(dp15726 -S'editable' -p15727 -I01 -sS'value' -p15728 -S'none' -p15729 -sssS'description' -p15730 -(dp15731 -S'editable' -p15732 -I01 -sS'value' -p15733 -g47 -sssS'settings_json' -p15734 -(dp15735 -S'mandatory' -p15736 -(dp15737 -S'editable' -p15738 -I00 -sS'value' -p15739 -I00 -ssS'name' -p15740 -(dp15741 -S'editable' -p15742 -I01 -sS'value' -p15743 -S'Settings' -p15744 -ssS'data_type' -p15745 -(dp15746 -S'editable' -p15747 -I00 -sS'value' -p15748 -S'text' -p15749 -ssS'entity_type' -p15750 -(dp15751 -S'editable' -p15752 -I00 -sS'value' -p15753 -S'PageSetting' -p15754 -ssS'editable' -p15755 -(dp15756 -S'editable' -p15757 -I00 -sS'value' -p15758 -I01 -ssS'unique' -p15759 -(dp15760 -S'editable' -p15761 -I00 -sS'value' -p15762 -I00 -ssS'properties' -p15763 -(dp15764 -S'default_value' -p15765 -(dp15766 -S'editable' -p15767 -I00 -sS'value' -p15768 -NssS'summary_default' -p15769 -(dp15770 -S'editable' -p15771 -I01 -sS'value' -p15772 -S'none' -p15773 -sssS'description' -p15774 -(dp15775 -S'editable' -p15776 -I01 -sS'value' -p15777 -g47 -sssS'page' -p15778 -(dp15779 -S'mandatory' -p15780 -(dp15781 -S'editable' -p15782 -I00 -sS'value' -p15783 -I00 -ssS'name' -p15784 -(dp15785 -S'editable' -p15786 -I01 -sS'value' -p15787 -S'Page' -p15788 -ssS'data_type' -p15789 -(dp15790 -S'editable' -p15791 -I00 -sS'value' -p15792 -S'entity' -p15793 -ssS'entity_type' -p15794 -(dp15795 -S'editable' -p15796 -I00 -sS'value' -p15797 -S'PageSetting' -p15798 -ssS'editable' -p15799 -(dp15800 -S'editable' -p15801 -I00 -sS'value' -p15802 -I01 -ssS'unique' -p15803 -(dp15804 -S'editable' -p15805 -I00 -sS'value' -p15806 -I00 -ssS'properties' -p15807 -(dp15808 -S'default_value' -p15809 -(dp15810 -S'editable' -p15811 -I00 -sS'value' -p15812 -NssS'summary_default' -p15813 -(dp15814 -S'editable' -p15815 -I01 -sS'value' -p15816 -S'none' -p15817 -ssS'valid_types' -p15818 -(dp15819 -S'editable' -p15820 -I01 -sS'value' -p15821 -(lp15822 -S'Page' -p15823 -asssS'description' -p15824 -(dp15825 -S'editable' -p15826 -I01 -sS'value' -p15827 -g47 -sssS'user' -p15828 -(dp15829 -S'mandatory' -p15830 -(dp15831 -S'editable' -p15832 -I00 -sS'value' -p15833 -I00 -ssS'name' -p15834 -(dp15835 -S'editable' -p15836 -I01 -sS'value' -p15837 -S'User' -p15838 -ssS'data_type' -p15839 -(dp15840 -S'editable' -p15841 -I00 -sS'value' -p15842 -S'entity' -p15843 -ssS'entity_type' -p15844 -(dp15845 -S'editable' -p15846 -I00 -sS'value' -p15847 -S'PageSetting' -p15848 -ssS'editable' -p15849 -(dp15850 -S'editable' -p15851 -I00 -sS'value' -p15852 -I01 -ssS'unique' -p15853 -(dp15854 -S'editable' -p15855 -I00 -sS'value' -p15856 -I00 -ssS'properties' -p15857 -(dp15858 -S'default_value' -p15859 -(dp15860 -S'editable' -p15861 -I00 -sS'value' -p15862 -NssS'summary_default' -p15863 -(dp15864 -S'editable' -p15865 -I01 -sS'value' -p15866 -S'none' -p15867 -ssS'valid_types' -p15868 -(dp15869 -S'editable' -p15870 -I01 -sS'value' -p15871 -(lp15872 -S'HumanUser' -p15873 -asssS'description' -p15874 -(dp15875 -S'editable' -p15876 -I01 -sS'value' -p15877 -g47 -sssS'cached_display_name' -p15878 -(dp15879 -S'mandatory' -p15880 -(dp15881 -S'editable' -p15882 -I00 -sS'value' -p15883 -I00 -ssS'name' -p15884 -(dp15885 -S'editable' -p15886 -I01 -sS'value' -p15887 -S'Cached Display Name' -p15888 -ssS'data_type' -p15889 -(dp15890 -S'editable' -p15891 -I00 -sS'value' -p15892 -S'text' -p15893 -ssS'entity_type' -p15894 -(dp15895 -S'editable' -p15896 -I00 -sS'value' -p15897 -S'PageSetting' -p15898 -ssS'editable' -p15899 -(dp15900 -S'editable' -p15901 -I00 -sS'value' -p15902 -I01 -ssS'unique' -p15903 -(dp15904 -S'editable' -p15905 -I00 -sS'value' -p15906 -I00 -ssS'properties' -p15907 -(dp15908 -S'default_value' -p15909 -(dp15910 -S'editable' -p15911 -I00 -sS'value' -p15912 -NssS'summary_default' -p15913 -(dp15914 -S'editable' -p15915 -I00 -sS'value' -p15916 -S'none' -p15917 -sssS'description' -p15918 -(dp15919 -S'editable' -p15920 -I01 -sS'value' -p15921 -g47 -sssS'id' -p15922 -(dp15923 -S'mandatory' -p15924 -(dp15925 -S'editable' -p15926 -I00 -sS'value' -p15927 -I00 -ssS'name' -p15928 -(dp15929 -S'editable' -p15930 -I01 -sS'value' -p15931 -S'Id' -p15932 -ssS'data_type' -p15933 -(dp15934 -S'editable' -p15935 -I00 -sS'value' -p15936 -S'number' -p15937 -ssS'entity_type' -p15938 -(dp15939 -S'editable' -p15940 -I00 -sS'value' -p15941 -S'PageSetting' -p15942 -ssS'editable' -p15943 -(dp15944 -S'editable' -p15945 -I00 -sS'value' -p15946 -I00 -ssS'unique' -p15947 -(dp15948 -S'editable' -p15949 -I00 -sS'value' -p15950 -I00 -ssS'properties' -p15951 -(dp15952 -S'default_value' -p15953 -(dp15954 -S'editable' -p15955 -I00 -sS'value' -p15956 -NssS'summary_default' -p15957 -(dp15958 -S'editable' -p15959 -I01 -sS'value' -p15960 -S'none' -p15961 -sssS'description' -p15962 -(dp15963 -S'editable' -p15964 -I01 -sS'value' -p15965 -g47 -ssssS'Status' -p15966 -(dp15967 -S'code' -p15968 -(dp15969 -S'mandatory' -p15970 -(dp15971 -S'editable' -p15972 -I00 -sS'value' -p15973 -I00 -ssS'name' -p15974 -(dp15975 -S'editable' -p15976 -I01 -sS'value' -p15977 -S'Short Code' -p15978 -ssS'data_type' -p15979 -(dp15980 -S'editable' -p15981 -I00 -sS'value' -p15982 -S'text' -p15983 -ssS'entity_type' -p15984 -(dp15985 -S'editable' -p15986 -I00 -sS'value' -p15987 -S'Status' -p15988 -ssS'editable' -p15989 -(dp15990 -S'editable' -p15991 -I00 -sS'value' -p15992 -I00 -ssS'unique' -p15993 -(dp15994 -S'editable' -p15995 -I00 -sS'value' -p15996 -I00 -ssS'properties' -p15997 -(dp15998 -S'default_value' -p15999 -(dp16000 -S'editable' -p16001 -I00 -sS'value' -p16002 -NssS'summary_default' -p16003 -(dp16004 -S'editable' -p16005 -I01 -sS'value' -p16006 -S'none' -p16007 -sssS'description' -p16008 -(dp16009 -S'editable' -p16010 -I01 -sS'value' -p16011 -g47 -sssS'name' -p16012 -(dp16013 -S'mandatory' -p16014 -(dp16015 -S'editable' -p16016 -I00 -sS'value' -p16017 -I01 -ssS'name' -p16018 -(dp16019 -S'editable' -p16020 -I01 -sS'value' -p16021 -S'Status Name' -p16022 -ssS'data_type' -p16023 -(dp16024 -S'editable' -p16025 -I00 -sS'value' -p16026 -S'text' -p16027 -ssS'entity_type' -p16028 -(dp16029 -S'editable' -p16030 -I00 -sS'value' -p16031 -S'Status' -p16032 -ssS'editable' -p16033 -(dp16034 -S'editable' -p16035 -I00 -sS'value' -p16036 -I01 -ssS'unique' -p16037 -(dp16038 -S'editable' -p16039 -I00 -sS'value' -p16040 -I00 -ssS'properties' -p16041 -(dp16042 -S'default_value' -p16043 -(dp16044 -S'editable' -p16045 -I00 -sS'value' -p16046 -NssS'summary_default' -p16047 -(dp16048 -S'editable' -p16049 -I01 -sS'value' -p16050 -S'none' -p16051 -sssS'description' -p16052 -(dp16053 -S'editable' -p16054 -I01 -sS'value' -p16055 -g47 -sssS'created_at' -p16056 -(dp16057 -S'mandatory' -p16058 -(dp16059 -S'editable' -p16060 -I00 -sS'value' -p16061 -I00 -ssS'name' -p16062 -(dp16063 -S'editable' -p16064 -I01 -sS'value' -p16065 -S'Date Created' -p16066 -ssS'data_type' -p16067 -(dp16068 -S'editable' -p16069 -I00 -sS'value' -p16070 -S'date_time' -p16071 -ssS'entity_type' -p16072 -(dp16073 -S'editable' -p16074 -I00 -sS'value' -p16075 -S'Status' -p16076 -ssS'editable' -p16077 -(dp16078 -S'editable' -p16079 -I00 -sS'value' -p16080 -I00 -ssS'unique' -p16081 -(dp16082 -S'editable' -p16083 -I00 -sS'value' -p16084 -I00 -ssS'properties' -p16085 -(dp16086 -S'default_value' -p16087 -(dp16088 -S'editable' -p16089 -I00 -sS'value' -p16090 -NssS'summary_default' -p16091 -(dp16092 -S'editable' -p16093 -I00 -sS'value' -p16094 -S'none' -p16095 -sssS'description' -p16096 -(dp16097 -S'editable' -p16098 -I01 -sS'value' -p16099 -g47 -sssS'updated_at' -p16100 -(dp16101 -S'mandatory' -p16102 -(dp16103 -S'editable' -p16104 -I00 -sS'value' -p16105 -I00 -ssS'name' -p16106 -(dp16107 -S'editable' -p16108 -I01 -sS'value' -p16109 -S'Date Updated' -p16110 -ssS'data_type' -p16111 -(dp16112 -S'editable' -p16113 -I00 -sS'value' -p16114 -S'date_time' -p16115 -ssS'entity_type' -p16116 -(dp16117 -S'editable' -p16118 -I00 -sS'value' -p16119 -S'Status' -p16120 -ssS'editable' -p16121 -(dp16122 -S'editable' -p16123 -I00 -sS'value' -p16124 -I00 -ssS'unique' -p16125 -(dp16126 -S'editable' -p16127 -I00 -sS'value' -p16128 -I00 -ssS'properties' -p16129 -(dp16130 -S'default_value' -p16131 -(dp16132 -S'editable' -p16133 -I00 -sS'value' -p16134 -NssS'summary_default' -p16135 -(dp16136 -S'editable' -p16137 -I00 -sS'value' -p16138 -S'none' -p16139 -sssS'description' -p16140 -(dp16141 -S'editable' -p16142 -I01 -sS'value' -p16143 -g47 -sssS'created_by' -p16144 -(dp16145 -S'mandatory' -p16146 -(dp16147 -S'editable' -p16148 -I00 -sS'value' -p16149 -I00 -ssS'name' -p16150 -(dp16151 -S'editable' -p16152 -I01 -sS'value' -p16153 -S'Created by' -p16154 -ssS'data_type' -p16155 -(dp16156 -S'editable' -p16157 -I00 -sS'value' -p16158 -S'entity' -p16159 -ssS'entity_type' -p16160 -(dp16161 -S'editable' -p16162 -I00 -sS'value' -p16163 -S'Status' -p16164 -ssS'editable' -p16165 -(dp16166 -S'editable' -p16167 -I00 -sS'value' -p16168 -I00 -ssS'unique' -p16169 -(dp16170 -S'editable' -p16171 -I00 -sS'value' -p16172 -I00 -ssS'properties' -p16173 -(dp16174 -S'default_value' -p16175 -(dp16176 -S'editable' -p16177 -I00 -sS'value' -p16178 -NssS'summary_default' -p16179 -(dp16180 -S'editable' -p16181 -I00 -sS'value' -p16182 -S'none' -p16183 -ssS'valid_types' -p16184 -(dp16185 -S'editable' -p16186 -I00 -sS'value' -p16187 -(lp16188 -S'HumanUser' -p16189 -aS'ApiUser' -p16190 -asssS'description' -p16191 -(dp16192 -S'editable' -p16193 -I01 -sS'value' -p16194 -g47 -sssS'system' -p16195 -(dp16196 -S'mandatory' -p16197 -(dp16198 -S'editable' -p16199 -I00 -sS'value' -p16200 -I00 -ssS'name' -p16201 -(dp16202 -S'editable' -p16203 -I01 -sS'value' -p16204 -S'Locked by System' -p16205 -ssS'data_type' -p16206 -(dp16207 -S'editable' -p16208 -I00 -sS'value' -p16209 -S'checkbox' -p16210 -ssS'entity_type' -p16211 -(dp16212 -S'editable' -p16213 -I00 -sS'value' -p16214 -S'Status' -p16215 -ssS'editable' -p16216 -(dp16217 -S'editable' -p16218 -I00 -sS'value' -p16219 -I00 -ssS'unique' -p16220 -(dp16221 -S'editable' -p16222 -I00 -sS'value' -p16223 -I00 -ssS'properties' -p16224 -(dp16225 -S'default_value' -p16226 -(dp16227 -S'editable' -p16228 -I00 -sS'value' -p16229 -I00 -ssS'summary_default' -p16230 -(dp16231 -S'editable' -p16232 -I00 -sS'value' -p16233 -S'none' -p16234 -sssS'description' -p16235 -(dp16236 -S'editable' -p16237 -I01 -sS'value' -p16238 -g47 -sssS'bg_color' -p16239 -(dp16240 -S'mandatory' -p16241 -(dp16242 -S'editable' -p16243 -I00 -sS'value' -p16244 -I00 -ssS'name' -p16245 -(dp16246 -S'editable' -p16247 -I01 -sS'value' -p16248 -S'Background Color' -p16249 -ssS'data_type' -p16250 -(dp16251 -S'editable' -p16252 -I00 -sS'value' -p16253 -S'color' -p16254 -ssS'entity_type' -p16255 -(dp16256 -S'editable' -p16257 -I00 -sS'value' -p16258 -S'Status' -p16259 -ssS'editable' -p16260 -(dp16261 -S'editable' -p16262 -I00 -sS'value' -p16263 -I01 -ssS'unique' -p16264 -(dp16265 -S'editable' -p16266 -I00 -sS'value' -p16267 -I00 -ssS'properties' -p16268 -(dp16269 -S'default_value' -p16270 -(dp16271 -S'editable' -p16272 -I00 -sS'value' -p16273 -NssS'summary_default' -p16274 -(dp16275 -S'editable' -p16276 -I00 -sS'value' -p16277 -S'none' -p16278 -sssS'description' -p16279 -(dp16280 -S'editable' -p16281 -I01 -sS'value' -p16282 -g47 -sssS'updated_by' -p16283 -(dp16284 -S'mandatory' -p16285 -(dp16286 -S'editable' -p16287 -I00 -sS'value' -p16288 -I00 -ssS'name' -p16289 -(dp16290 -S'editable' -p16291 -I01 -sS'value' -p16292 -S'Updated by' -p16293 -ssS'data_type' -p16294 -(dp16295 -S'editable' -p16296 -I00 -sS'value' -p16297 -S'entity' -p16298 -ssS'entity_type' -p16299 -(dp16300 -S'editable' -p16301 -I00 -sS'value' -p16302 -S'Status' -p16303 -ssS'editable' -p16304 -(dp16305 -S'editable' -p16306 -I00 -sS'value' -p16307 -I00 -ssS'unique' -p16308 -(dp16309 -S'editable' -p16310 -I00 -sS'value' -p16311 -I00 -ssS'properties' -p16312 -(dp16313 -S'default_value' -p16314 -(dp16315 -S'editable' -p16316 -I00 -sS'value' -p16317 -NssS'summary_default' -p16318 -(dp16319 -S'editable' -p16320 -I00 -sS'value' -p16321 -S'none' -p16322 -ssS'valid_types' -p16323 -(dp16324 -S'editable' -p16325 -I00 -sS'value' -p16326 -(lp16327 -S'HumanUser' -p16328 -aS'ApiUser' -p16329 -asssS'description' -p16330 -(dp16331 -S'editable' -p16332 -I01 -sS'value' -p16333 -g47 -sssS'cached_display_name' -p16334 -(dp16335 -S'mandatory' -p16336 -(dp16337 -S'editable' -p16338 -I00 -sS'value' -p16339 -I00 -ssS'name' -p16340 -(dp16341 -S'editable' -p16342 -I01 -sS'value' -p16343 -S'Cached Display Name' -p16344 -ssS'data_type' -p16345 -(dp16346 -S'editable' -p16347 -I00 -sS'value' -p16348 -S'text' -p16349 -ssS'entity_type' -p16350 -(dp16351 -S'editable' -p16352 -I00 -sS'value' -p16353 -S'Status' -p16354 -ssS'editable' -p16355 -(dp16356 -S'editable' -p16357 -I00 -sS'value' -p16358 -I01 -ssS'unique' -p16359 -(dp16360 -S'editable' -p16361 -I00 -sS'value' -p16362 -I00 -ssS'properties' -p16363 -(dp16364 -S'default_value' -p16365 -(dp16366 -S'editable' -p16367 -I00 -sS'value' -p16368 -NssS'summary_default' -p16369 -(dp16370 -S'editable' -p16371 -I00 -sS'value' -p16372 -S'none' -p16373 -sssS'description' -p16374 -(dp16375 -S'editable' -p16376 -I01 -sS'value' -p16377 -g47 -sssS'id' -p16378 -(dp16379 -S'mandatory' -p16380 -(dp16381 -S'editable' -p16382 -I00 -sS'value' -p16383 -I00 -ssS'name' -p16384 -(dp16385 -S'editable' -p16386 -I01 -sS'value' -p16387 -S'Id' -p16388 -ssS'data_type' -p16389 -(dp16390 -S'editable' -p16391 -I00 -sS'value' -p16392 -S'number' -p16393 -ssS'entity_type' -p16394 -(dp16395 -S'editable' -p16396 -I00 -sS'value' -p16397 -S'Status' -p16398 -ssS'editable' -p16399 -(dp16400 -S'editable' -p16401 -I00 -sS'value' -p16402 -I00 -ssS'unique' -p16403 -(dp16404 -S'editable' -p16405 -I00 -sS'value' -p16406 -I00 -ssS'properties' -p16407 -(dp16408 -S'default_value' -p16409 -(dp16410 -S'editable' -p16411 -I00 -sS'value' -p16412 -NssS'summary_default' -p16413 -(dp16414 -S'editable' -p16415 -I00 -sS'value' -p16416 -S'none' -p16417 -sssS'description' -p16418 -(dp16419 -S'editable' -p16420 -I01 -sS'value' -p16421 -g47 -sssS'icon' -p16422 -(dp16423 -S'mandatory' -p16424 -(dp16425 -S'editable' -p16426 -I00 -sS'value' -p16427 -I01 -ssS'name' -p16428 -(dp16429 -S'editable' -p16430 -I01 -sS'value' -p16431 -S'Icon' -p16432 -ssS'data_type' -p16433 -(dp16434 -S'editable' -p16435 -I00 -sS'value' -p16436 -S'entity' -p16437 -ssS'entity_type' -p16438 -(dp16439 -S'editable' -p16440 -I00 -sS'value' -p16441 -S'Status' -p16442 -ssS'editable' -p16443 -(dp16444 -S'editable' -p16445 -I00 -sS'value' -p16446 -I01 -ssS'unique' -p16447 -(dp16448 -S'editable' -p16449 -I00 -sS'value' -p16450 -I00 -ssS'properties' -p16451 -(dp16452 -S'default_value' -p16453 -(dp16454 -S'editable' -p16455 -I00 -sS'value' -p16456 -NssS'summary_default' -p16457 -(dp16458 -S'editable' -p16459 -I00 -sS'value' -p16460 -S'none' -p16461 -ssS'valid_types' -p16462 -(dp16463 -S'editable' -p16464 -I00 -sS'value' -p16465 -(lp16466 -S'Icon' -p16467 -asssS'description' -p16468 -(dp16469 -S'editable' -p16470 -I01 -sS'value' -p16471 -g47 -ssssS'Reply' -p16472 -(dp16473 -S'created_at' -p16474 -(dp16475 -S'mandatory' -p16476 -(dp16477 -S'editable' -p16478 -I00 -sS'value' -p16479 -I00 -ssS'name' -p16480 -(dp16481 -S'editable' -p16482 -I01 -sS'value' -p16483 -S'Date Created' -p16484 -ssS'data_type' -p16485 -(dp16486 -S'editable' -p16487 -I00 -sS'value' -p16488 -S'date_time' -p16489 -ssS'entity_type' -p16490 -(dp16491 -S'editable' -p16492 -I00 -sS'value' -p16493 -S'Reply' -p16494 -ssS'editable' -p16495 -(dp16496 -S'editable' -p16497 -I00 -sS'value' -p16498 -I00 -ssS'unique' -p16499 -(dp16500 -S'editable' -p16501 -I00 -sS'value' -p16502 -I00 -ssS'properties' -p16503 -(dp16504 -S'default_value' -p16505 -(dp16506 -S'editable' -p16507 -I00 -sS'value' -p16508 -NssS'summary_default' -p16509 -(dp16510 -S'editable' -p16511 -I01 -sS'value' -p16512 -S'none' -p16513 -sssS'description' -p16514 -(dp16515 -S'editable' -p16516 -I01 -sS'value' -p16517 -g47 -sssS'entity' -p16518 -(dp16519 -S'mandatory' -p16520 -(dp16521 -S'editable' -p16522 -I00 -sS'value' -p16523 -I00 -ssS'name' -p16524 -(dp16525 -S'editable' -p16526 -I01 -sS'value' -p16527 -S'Link' -p16528 -ssS'data_type' -p16529 -(dp16530 -S'editable' -p16531 -I00 -sS'value' -p16532 -S'entity' -p16533 -ssS'entity_type' -p16534 -(dp16535 -S'editable' -p16536 -I00 -sS'value' -p16537 -S'Reply' -p16538 -ssS'editable' -p16539 -(dp16540 -S'editable' -p16541 -I00 -sS'value' -p16542 -I01 -ssS'unique' -p16543 -(dp16544 -S'editable' -p16545 -I00 -sS'value' -p16546 -I00 -ssS'properties' -p16547 -(dp16548 -S'default_value' -p16549 -(dp16550 -S'editable' -p16551 -I00 -sS'value' -p16552 -NssS'summary_default' -p16553 -(dp16554 -S'editable' -p16555 -I01 -sS'value' -p16556 -S'none' -p16557 -ssS'valid_types' -p16558 -(dp16559 -S'editable' -p16560 -I01 -sS'value' -p16561 -(lp16562 -S'ApiUser' -p16563 -aS'AppWelcome' -p16564 -aS'Asset' -p16565 -aS'AssetLibrary' -p16566 -aS'Attachment' -p16567 -aS'Banner' -p16568 -aS'Booking' -p16569 -aS'CustomEntity01' -p16570 -aS'CustomEntity02' -p16571 -aS'CustomEntity03' -p16572 -aS'CustomEntity04' -p16573 -aS'CustomEntity05' -p16574 -aS'CustomNonProjectEntity01' -p16575 -aS'CustomNonProjectEntity02' -p16576 -aS'CustomNonProjectEntity03' -p16577 -aS'Department' -p16578 -aS'Element' -p16579 -aS'Group' -p16580 -aS'HumanUser' -p16581 -aS'Icon' -p16582 -aS'LocalStorage' -p16583 -aS'Note' -p16584 -aS'Page' -p16585 -aS'PermissionRuleSet' -p16586 -aS'Phase' -p16587 -aS'PipelineConfiguration' -p16588 -aS'Playlist' -p16589 -aS'Project' -p16590 -aS'PublishedFile' -p16591 -aS'PublishedFileDependency' -p16592 -aS'PublishedFileType' -p16593 -aS'Scene' -p16594 -aS'Sequence' -p16595 -aS'Shot' -p16596 -aS'Status' -p16597 -aS'Step' -p16598 -aS'Tag' -p16599 -aS'TankDependency' -p16600 -aS'TankPublishedFile' -p16601 -aS'TankType' -p16602 -aS'Task' -p16603 -aS'TaskTemplate' -p16604 -aS'Version' -p16605 -asssS'description' -p16606 -(dp16607 -S'editable' -p16608 -I01 -sS'value' -p16609 -g47 -sssS'content' -p16610 -(dp16611 -S'mandatory' -p16612 -(dp16613 -S'editable' -p16614 -I00 -sS'value' -p16615 -I01 -ssS'name' -p16616 -(dp16617 -S'editable' -p16618 -I01 -sS'value' -p16619 -S'Reply Text' -p16620 -ssS'data_type' -p16621 -(dp16622 -S'editable' -p16623 -I00 -sS'value' -p16624 -S'text' -p16625 -ssS'entity_type' -p16626 -(dp16627 -S'editable' -p16628 -I00 -sS'value' -p16629 -S'Reply' -p16630 -ssS'editable' -p16631 -(dp16632 -S'editable' -p16633 -I00 -sS'value' -p16634 -I01 -ssS'unique' -p16635 -(dp16636 -S'editable' -p16637 -I00 -sS'value' -p16638 -I00 -ssS'properties' -p16639 -(dp16640 -S'default_value' -p16641 -(dp16642 -S'editable' -p16643 -I00 -sS'value' -p16644 -NssS'summary_default' -p16645 -(dp16646 -S'editable' -p16647 -I01 -sS'value' -p16648 -S'none' -p16649 -sssS'description' -p16650 -(dp16651 -S'editable' -p16652 -I01 -sS'value' -p16653 -g47 -sssS'user' -p16654 -(dp16655 -S'mandatory' -p16656 -(dp16657 -S'editable' -p16658 -I00 -sS'value' -p16659 -I00 -ssS'name' -p16660 -(dp16661 -S'editable' -p16662 -I01 -sS'value' -p16663 -S'User' -p16664 -ssS'data_type' -p16665 -(dp16666 -S'editable' -p16667 -I00 -sS'value' -p16668 -S'entity' -p16669 -ssS'entity_type' -p16670 -(dp16671 -S'editable' -p16672 -I00 -sS'value' -p16673 -S'Reply' -p16674 -ssS'editable' -p16675 -(dp16676 -S'editable' -p16677 -I00 -sS'value' -p16678 -I01 -ssS'unique' -p16679 -(dp16680 -S'editable' -p16681 -I00 -sS'value' -p16682 -I00 -ssS'properties' -p16683 -(dp16684 -S'default_value' -p16685 -(dp16686 -S'editable' -p16687 -I00 -sS'value' -p16688 -NssS'summary_default' -p16689 -(dp16690 -S'editable' -p16691 -I01 -sS'value' -p16692 -S'none' -p16693 -ssS'valid_types' -p16694 -(dp16695 -S'editable' -p16696 -I01 -sS'value' -p16697 -(lp16698 -S'HumanUser' -p16699 -aS'ApiUser' -p16700 -asssS'description' -p16701 -(dp16702 -S'editable' -p16703 -I01 -sS'value' -p16704 -g47 -sssS'cached_display_name' -p16705 -(dp16706 -S'mandatory' -p16707 -(dp16708 -S'editable' -p16709 -I00 -sS'value' -p16710 -I00 -ssS'name' -p16711 -(dp16712 -S'editable' -p16713 -I01 -sS'value' -p16714 -S'Cached Display Name' -p16715 -ssS'data_type' -p16716 -(dp16717 -S'editable' -p16718 -I00 -sS'value' -p16719 -S'text' -p16720 -ssS'entity_type' -p16721 -(dp16722 -S'editable' -p16723 -I00 -sS'value' -p16724 -S'Reply' -p16725 -ssS'editable' -p16726 -(dp16727 -S'editable' -p16728 -I00 -sS'value' -p16729 -I01 -ssS'unique' -p16730 -(dp16731 -S'editable' -p16732 -I00 -sS'value' -p16733 -I00 -ssS'properties' -p16734 -(dp16735 -S'default_value' -p16736 -(dp16737 -S'editable' -p16738 -I00 -sS'value' -p16739 -NssS'summary_default' -p16740 -(dp16741 -S'editable' -p16742 -I00 -sS'value' -p16743 -S'none' -p16744 -sssS'description' -p16745 -(dp16746 -S'editable' -p16747 -I01 -sS'value' -p16748 -g47 -sssS'id' -p16749 -(dp16750 -S'mandatory' -p16751 -(dp16752 -S'editable' -p16753 -I00 -sS'value' -p16754 -I00 -ssS'name' -p16755 -(dp16756 -S'editable' -p16757 -I01 -sS'value' -p16758 -S'Id' -p16759 -ssS'data_type' -p16760 -(dp16761 -S'editable' -p16762 -I00 -sS'value' -p16763 -S'number' -p16764 -ssS'entity_type' -p16765 -(dp16766 -S'editable' -p16767 -I00 -sS'value' -p16768 -S'Reply' -p16769 -ssS'editable' -p16770 -(dp16771 -S'editable' -p16772 -I00 -sS'value' -p16773 -I00 -ssS'unique' -p16774 -(dp16775 -S'editable' -p16776 -I00 -sS'value' -p16777 -I00 -ssS'properties' -p16778 -(dp16779 -S'default_value' -p16780 -(dp16781 -S'editable' -p16782 -I00 -sS'value' -p16783 -NssS'summary_default' -p16784 -(dp16785 -S'editable' -p16786 -I01 -sS'value' -p16787 -S'none' -p16788 -sssS'description' -p16789 -(dp16790 -S'editable' -p16791 -I01 -sS'value' -p16792 -g47 -ssssS'Task' -p16793 -(dp16794 -S'open_notes_count' -p16795 -(dp16796 -S'mandatory' -p16797 -(dp16798 -S'editable' -p16799 -I00 -sS'value' -p16800 -I00 -ssS'name' -p16801 -(dp16802 -S'editable' -p16803 -I01 -sS'value' -p16804 -S'Open Notes Count' -p16805 -ssS'data_type' -p16806 -(dp16807 -S'editable' -p16808 -I00 -sS'value' -p16809 -S'text' -p16810 -ssS'entity_type' -p16811 -(dp16812 -S'editable' -p16813 -I00 -sS'value' -p16814 -S'Task' -p16815 -ssS'editable' -p16816 -(dp16817 -S'editable' -p16818 -I00 -sS'value' -p16819 -I00 -ssS'unique' -p16820 -(dp16821 -S'editable' -p16822 -I00 -sS'value' -p16823 -I00 -ssS'properties' -p16824 -(dp16825 -S'default_value' -p16826 -(dp16827 -S'editable' -p16828 -I00 -sS'value' -p16829 -NssS'summary_default' -p16830 -(dp16831 -S'editable' -p16832 -I01 -sS'value' -p16833 -S'none' -p16834 -sssS'description' -p16835 -(dp16836 -S'editable' -p16837 -I01 -sS'value' -p16838 -g47 -sssS'color' -p16839 -(dp16840 -S'mandatory' -p16841 -(dp16842 -S'editable' -p16843 -I00 -sS'value' -p16844 -I00 -ssS'name' -p16845 -(dp16846 -S'editable' -p16847 -I01 -sS'value' -p16848 -S'Gantt Bar Color' -p16849 -ssS'data_type' -p16850 -(dp16851 -S'editable' -p16852 -I00 -sS'value' -p16853 -S'color' -p16854 -ssS'entity_type' -p16855 -(dp16856 -S'editable' -p16857 -I00 -sS'value' -p16858 -S'Task' -p16859 -ssS'editable' -p16860 -(dp16861 -S'editable' -p16862 -I00 -sS'value' -p16863 -I01 -ssS'unique' -p16864 -(dp16865 -S'editable' -p16866 -I00 -sS'value' -p16867 -I00 -ssS'properties' -p16868 -(dp16869 -S'default_value' -p16870 -(dp16871 -S'editable' -p16872 -I00 -sS'value' -p16873 -NssS'summary_default' -p16874 -(dp16875 -S'editable' -p16876 -I01 -sS'value' -p16877 -S'none' -p16878 -sssS'description' -p16879 -(dp16880 -S'editable' -p16881 -I01 -sS'value' -p16882 -g47 -sssS'split_durations' -p16883 -(dp16884 -S'mandatory' -p16885 -(dp16886 -S'editable' -p16887 -I00 -sS'value' -p16888 -I00 -ssS'name' -p16889 -(dp16890 -S'editable' -p16891 -I01 -sS'value' -p16892 -S'Split Durations' -p16893 -ssS'data_type' -p16894 -(dp16895 -S'editable' -p16896 -I00 -sS'value' -p16897 -S'serializable' -p16898 -ssS'entity_type' -p16899 -(dp16900 -S'editable' -p16901 -I00 -sS'value' -p16902 -S'Task' -p16903 -ssS'editable' -p16904 -(dp16905 -S'editable' -p16906 -I00 -sS'value' -p16907 -I00 -ssS'unique' -p16908 -(dp16909 -S'editable' -p16910 -I00 -sS'value' -p16911 -I00 -ssS'properties' -p16912 -(dp16913 -S'default_value' -p16914 -(dp16915 -S'editable' -p16916 -I00 -sS'value' -p16917 -NssS'summary_default' -p16918 -(dp16919 -S'editable' -p16920 -I00 -sS'value' -p16921 -S'none' -p16922 -sssS'description' -p16923 -(dp16924 -S'editable' -p16925 -I01 -sS'value' -p16926 -g47 -sssS'image' -p16927 -(dp16928 -S'mandatory' -p16929 -(dp16930 -S'editable' -p16931 -I00 -sS'value' -p16932 -I00 -ssS'name' -p16933 -(dp16934 -S'editable' -p16935 -I01 -sS'value' -p16936 -S'Thumbnail' -p16937 -ssS'data_type' -p16938 -(dp16939 -S'editable' -p16940 -I00 -sS'value' -p16941 -S'image' -p16942 -ssS'entity_type' -p16943 -(dp16944 -S'editable' -p16945 -I00 -sS'value' -p16946 -S'Task' -p16947 -ssS'editable' -p16948 -(dp16949 -S'editable' -p16950 -I00 -sS'value' -p16951 -I01 -ssS'unique' -p16952 -(dp16953 -S'editable' -p16954 -I00 -sS'value' -p16955 -I00 -ssS'properties' -p16956 -(dp16957 -S'default_value' -p16958 -(dp16959 -S'editable' -p16960 -I00 -sS'value' -p16961 -NssS'summary_default' -p16962 -(dp16963 -S'editable' -p16964 -I01 -sS'value' -p16965 -S'none' -p16966 -sssS'description' -p16967 -(dp16968 -S'editable' -p16969 -I01 -sS'value' -p16970 -g47 -sssS'updated_at' -p16971 -(dp16972 -S'mandatory' -p16973 -(dp16974 -S'editable' -p16975 -I00 -sS'value' -p16976 -I00 -ssS'name' -p16977 -(dp16978 -S'editable' -p16979 -I01 -sS'value' -p16980 -S'Date Updated' -p16981 -ssS'data_type' -p16982 -(dp16983 -S'editable' -p16984 -I00 -sS'value' -p16985 -S'date_time' -p16986 -ssS'entity_type' -p16987 -(dp16988 -S'editable' -p16989 -I00 -sS'value' -p16990 -S'Task' -p16991 -ssS'editable' -p16992 -(dp16993 -S'editable' -p16994 -I00 -sS'value' -p16995 -I00 -ssS'unique' -p16996 -(dp16997 -S'editable' -p16998 -I00 -sS'value' -p16999 -I00 -ssS'properties' -p17000 -(dp17001 -S'default_value' -p17002 -(dp17003 -S'editable' -p17004 -I00 -sS'value' -p17005 -NssS'summary_default' -p17006 -(dp17007 -S'editable' -p17008 -I01 -sS'value' -p17009 -S'none' -p17010 -sssS'description' -p17011 -(dp17012 -S'editable' -p17013 -I01 -sS'value' -p17014 -g47 -sssS'entity' -p17015 -(dp17016 -S'mandatory' -p17017 -(dp17018 -S'editable' -p17019 -I00 -sS'value' -p17020 -I00 -ssS'name' -p17021 -(dp17022 -S'editable' -p17023 -I01 -sS'value' -p17024 -S'Link' -p17025 -ssS'data_type' -p17026 -(dp17027 -S'editable' -p17028 -I00 -sS'value' -p17029 -S'entity' -p17030 -ssS'entity_type' -p17031 -(dp17032 -S'editable' -p17033 -I00 -sS'value' -p17034 -S'Task' -p17035 -ssS'editable' -p17036 -(dp17037 -S'editable' -p17038 -I00 -sS'value' -p17039 -I01 -ssS'unique' -p17040 -(dp17041 -S'editable' -p17042 -I00 -sS'value' -p17043 -I00 -ssS'properties' -p17044 -(dp17045 -S'default_value' -p17046 -(dp17047 -S'editable' -p17048 -I00 -sS'value' -p17049 -NssS'summary_default' -p17050 -(dp17051 -S'editable' -p17052 -I01 -sS'value' -p17053 -S'none' -p17054 -ssS'valid_types' -p17055 -(dp17056 -S'editable' -p17057 -I01 -sS'value' -p17058 -(lp17059 -S'Asset' -p17060 -aS'Element' -p17061 -aS'Scene' -p17062 -aS'Sequence' -p17063 -aS'Shot' -p17064 -aS'Project' -p17065 -asssS'description' -p17066 -(dp17067 -S'editable' -p17068 -I01 -sS'value' -p17069 -g47 -sssS'task_assignees' -p17070 -(dp17071 -S'mandatory' -p17072 -(dp17073 -S'editable' -p17074 -I00 -sS'value' -p17075 -I00 -ssS'name' -p17076 -(dp17077 -S'editable' -p17078 -I01 -sS'value' -p17079 -S'Assigned To' -p17080 -ssS'data_type' -p17081 -(dp17082 -S'editable' -p17083 -I00 -sS'value' -p17084 -S'multi_entity' -p17085 -ssS'entity_type' -p17086 -(dp17087 -S'editable' -p17088 -I00 -sS'value' -p17089 -S'Task' -p17090 -ssS'editable' -p17091 -(dp17092 -S'editable' -p17093 -I00 -sS'value' -p17094 -I01 -ssS'unique' -p17095 -(dp17096 -S'editable' -p17097 -I00 -sS'value' -p17098 -I00 -ssS'properties' -p17099 -(dp17100 -S'default_value' -p17101 -(dp17102 -S'editable' -p17103 -I00 -sS'value' -p17104 -NssS'summary_default' -p17105 -(dp17106 -S'editable' -p17107 -I01 -sS'value' -p17108 -S'none' -p17109 -ssS'valid_types' -p17110 -(dp17111 -S'editable' -p17112 -I01 -sS'value' -p17113 -(lp17114 -S'Group' -p17115 -aS'HumanUser' -p17116 -asssS'description' -p17117 -(dp17118 -S'editable' -p17119 -I01 -sS'value' -p17120 -g47 -sssS'duration' -p17121 -(dp17122 -S'mandatory' -p17123 -(dp17124 -S'editable' -p17125 -I00 -sS'value' -p17126 -I00 -ssS'name' -p17127 -(dp17128 -S'editable' -p17129 -I01 -sS'value' -p17130 -S'Duration' -p17131 -ssS'data_type' -p17132 -(dp17133 -S'editable' -p17134 -I00 -sS'value' -p17135 -S'duration' -p17136 -ssS'entity_type' -p17137 -(dp17138 -S'editable' -p17139 -I00 -sS'value' -p17140 -S'Task' -p17141 -ssS'editable' -p17142 -(dp17143 -S'editable' -p17144 -I00 -sS'value' -p17145 -I01 -ssS'unique' -p17146 -(dp17147 -S'editable' -p17148 -I00 -sS'value' -p17149 -I00 -ssS'properties' -p17150 -(dp17151 -S'default_value' -p17152 -(dp17153 -S'editable' -p17154 -I00 -sS'value' -p17155 -NssS'summary_default' -p17156 -(dp17157 -S'editable' -p17158 -I01 -sS'value' -p17159 -S'sum' -p17160 -sssS'description' -p17161 -(dp17162 -S'editable' -p17163 -I01 -sS'value' -p17164 -g47 -sssS'cached_display_name' -p17165 -(dp17166 -S'mandatory' -p17167 -(dp17168 -S'editable' -p17169 -I00 -sS'value' -p17170 -I00 -ssS'name' -p17171 -(dp17172 -S'editable' -p17173 -I01 -sS'value' -p17174 -S'Cached Display Name' -p17175 -ssS'data_type' -p17176 -(dp17177 -S'editable' -p17178 -I00 -sS'value' -p17179 -S'text' -p17180 -ssS'entity_type' -p17181 -(dp17182 -S'editable' -p17183 -I00 -sS'value' -p17184 -S'Task' -p17185 -ssS'editable' -p17186 -(dp17187 -S'editable' -p17188 -I00 -sS'value' -p17189 -I01 -ssS'unique' -p17190 -(dp17191 -S'editable' -p17192 -I00 -sS'value' -p17193 -I00 -ssS'properties' -p17194 -(dp17195 -S'default_value' -p17196 -(dp17197 -S'editable' -p17198 -I00 -sS'value' -p17199 -NssS'summary_default' -p17200 -(dp17201 -S'editable' -p17202 -I00 -sS'value' -p17203 -S'none' -p17204 -sssS'description' -p17205 -(dp17206 -S'editable' -p17207 -I01 -sS'value' -p17208 -g47 -sssS'id' -p17209 -(dp17210 -S'mandatory' -p17211 -(dp17212 -S'editable' -p17213 -I00 -sS'value' -p17214 -I00 -ssS'name' -p17215 -(dp17216 -S'editable' -p17217 -I01 -sS'value' -p17218 -S'Id' -p17219 -ssS'data_type' -p17220 -(dp17221 -S'editable' -p17222 -I00 -sS'value' -p17223 -S'number' -p17224 -ssS'entity_type' -p17225 -(dp17226 -S'editable' -p17227 -I00 -sS'value' -p17228 -S'Task' -p17229 -ssS'editable' -p17230 -(dp17231 -S'editable' -p17232 -I00 -sS'value' -p17233 -I00 -ssS'unique' -p17234 -(dp17235 -S'editable' -p17236 -I00 -sS'value' -p17237 -I00 -ssS'properties' -p17238 -(dp17239 -S'default_value' -p17240 -(dp17241 -S'editable' -p17242 -I00 -sS'value' -p17243 -NssS'summary_default' -p17244 -(dp17245 -S'editable' -p17246 -I01 -sS'value' -p17247 -S'none' -p17248 -sssS'description' -p17249 -(dp17250 -S'editable' -p17251 -I01 -sS'value' -p17252 -g47 -sssS'pinned' -p17253 -(dp17254 -S'mandatory' -p17255 -(dp17256 -S'editable' -p17257 -I00 -sS'value' -p17258 -I00 -ssS'name' -p17259 -(dp17260 -S'editable' -p17261 -I01 -sS'value' -p17262 -S'Pinned' -p17263 -ssS'data_type' -p17264 -(dp17265 -S'editable' -p17266 -I00 -sS'value' -p17267 -S'checkbox' -p17268 -ssS'entity_type' -p17269 -(dp17270 -S'editable' -p17271 -I00 -sS'value' -p17272 -S'Task' -p17273 -ssS'editable' -p17274 -(dp17275 -S'editable' -p17276 -I00 -sS'value' -p17277 -I01 -ssS'unique' -p17278 -(dp17279 -S'editable' -p17280 -I00 -sS'value' -p17281 -I00 -ssS'properties' -p17282 -(dp17283 -S'default_value' -p17284 -(dp17285 -S'editable' -p17286 -I00 -sS'value' -p17287 -I00 -ssS'summary_default' -p17288 -(dp17289 -S'editable' -p17290 -I01 -sS'value' -p17291 -S'none' -p17292 -sssS'description' -p17293 -(dp17294 -S'editable' -p17295 -I01 -sS'value' -p17296 -g47 -sssS'sg_task_order' -p17297 -(dp17298 -S'mandatory' -p17299 -(dp17300 -S'editable' -p17301 -I00 -sS'value' -p17302 -I00 -ssS'name' -p17303 -(dp17304 -S'editable' -p17305 -I01 -sS'value' -p17306 -S'Task Order' -p17307 -ssS'data_type' -p17308 -(dp17309 -S'editable' -p17310 -I00 -sS'value' -p17311 -S'number' -p17312 -ssS'entity_type' -p17313 -(dp17314 -S'editable' -p17315 -I00 -sS'value' -p17316 -S'Task' -p17317 -ssS'editable' -p17318 -(dp17319 -S'editable' -p17320 -I00 -sS'value' -p17321 -I01 -ssS'unique' -p17322 -(dp17323 -S'editable' -p17324 -I00 -sS'value' -p17325 -I00 -ssS'properties' -p17326 -(dp17327 -S'default_value' -p17328 -(dp17329 -S'editable' -p17330 -I00 -sS'value' -p17331 -NssS'summary_default' -p17332 -(dp17333 -S'editable' -p17334 -I01 -sS'value' -p17335 -S'none' -p17336 -sssS'description' -p17337 -(dp17338 -S'editable' -p17339 -I01 -sS'value' -p17340 -g47 -sssS'downstream_tasks' -p17341 -(dp17342 -S'mandatory' -p17343 -(dp17344 -S'editable' -p17345 -I00 -sS'value' -p17346 -I00 -ssS'name' -p17347 -(dp17348 -S'editable' -p17349 -I01 -sS'value' -p17350 -S'Downstream Dependency' -p17351 -ssS'data_type' -p17352 -(dp17353 -S'editable' -p17354 -I00 -sS'value' -p17355 -S'multi_entity' -p17356 -ssS'entity_type' -p17357 -(dp17358 -S'editable' -p17359 -I00 -sS'value' -p17360 -S'Task' -p17361 -ssS'editable' -p17362 -(dp17363 -S'editable' -p17364 -I00 -sS'value' -p17365 -I01 -ssS'unique' -p17366 -(dp17367 -S'editable' -p17368 -I00 -sS'value' -p17369 -I00 -ssS'properties' -p17370 -(dp17371 -S'default_value' -p17372 -(dp17373 -S'editable' -p17374 -I00 -sS'value' -p17375 -NssS'summary_default' -p17376 -(dp17377 -S'editable' -p17378 -I00 -sS'value' -p17379 -S'none' -p17380 -ssS'valid_types' -p17381 -(dp17382 -S'editable' -p17383 -I00 -sS'value' -p17384 -(lp17385 -S'Task' -p17386 -asssS'description' -p17387 -(dp17388 -S'editable' -p17389 -I01 -sS'value' -p17390 -g47 -sssS'open_notes' -p17391 -(dp17392 -S'mandatory' -p17393 -(dp17394 -S'editable' -p17395 -I00 -sS'value' -p17396 -I00 -ssS'name' -p17397 -(dp17398 -S'editable' -p17399 -I01 -sS'value' -p17400 -S'Open Notes' -p17401 -ssS'data_type' -p17402 -(dp17403 -S'editable' -p17404 -I00 -sS'value' -p17405 -S'multi_entity' -p17406 -ssS'entity_type' -p17407 -(dp17408 -S'editable' -p17409 -I00 -sS'value' -p17410 -S'Task' -p17411 -ssS'editable' -p17412 -(dp17413 -S'editable' -p17414 -I00 -sS'value' -p17415 -I00 -ssS'unique' -p17416 -(dp17417 -S'editable' -p17418 -I00 -sS'value' -p17419 -I00 -ssS'properties' -p17420 -(dp17421 -S'default_value' -p17422 -(dp17423 -S'editable' -p17424 -I00 -sS'value' -p17425 -NssS'summary_default' -p17426 -(dp17427 -S'editable' -p17428 -I01 -sS'value' -p17429 -S'none' -p17430 -ssS'valid_types' -p17431 -(dp17432 -S'editable' -p17433 -I01 -sS'value' -p17434 -(lp17435 -S'Note' -p17436 -asssS'description' -p17437 -(dp17438 -S'editable' -p17439 -I01 -sS'value' -p17440 -g47 -sssS'addressings_cc' -p17441 -(dp17442 -S'mandatory' -p17443 -(dp17444 -S'editable' -p17445 -I00 -sS'value' -p17446 -I00 -ssS'name' -p17447 -(dp17448 -S'editable' -p17449 -I01 -sS'value' -p17450 -S'Cc' -p17451 -ssS'data_type' -p17452 -(dp17453 -S'editable' -p17454 -I00 -sS'value' -p17455 -S'multi_entity' -p17456 -ssS'entity_type' -p17457 -(dp17458 -S'editable' -p17459 -I00 -sS'value' -p17460 -S'Task' -p17461 -ssS'editable' -p17462 -(dp17463 -S'editable' -p17464 -I00 -sS'value' -p17465 -I01 -ssS'unique' -p17466 -(dp17467 -S'editable' -p17468 -I00 -sS'value' -p17469 -I00 -ssS'properties' -p17470 -(dp17471 -S'default_value' -p17472 -(dp17473 -S'editable' -p17474 -I00 -sS'value' -p17475 -NssS'summary_default' -p17476 -(dp17477 -S'editable' -p17478 -I01 -sS'value' -p17479 -S'none' -p17480 -ssS'valid_types' -p17481 -(dp17482 -S'editable' -p17483 -I01 -sS'value' -p17484 -(lp17485 -S'Group' -p17486 -aS'HumanUser' -p17487 -asssS'description' -p17488 -(dp17489 -S'editable' -p17490 -I01 -sS'value' -p17491 -g47 -sssS'inventory_date' -p17492 -(dp17493 -S'mandatory' -p17494 -(dp17495 -S'editable' -p17496 -I00 -sS'value' -p17497 -I00 -ssS'name' -p17498 -(dp17499 -S'editable' -p17500 -I01 -sS'value' -p17501 -S'Inventory Date' -p17502 -ssS'data_type' -p17503 -(dp17504 -S'editable' -p17505 -I00 -sS'value' -p17506 -S'date' -p17507 -ssS'entity_type' -p17508 -(dp17509 -S'editable' -p17510 -I00 -sS'value' -p17511 -S'Task' -p17512 -ssS'editable' -p17513 -(dp17514 -S'editable' -p17515 -I00 -sS'value' -p17516 -I00 -ssS'unique' -p17517 -(dp17518 -S'editable' -p17519 -I00 -sS'value' -p17520 -I00 -ssS'properties' -p17521 -(dp17522 -S'default_value' -p17523 -(dp17524 -S'editable' -p17525 -I00 -sS'value' -p17526 -NssS'summary_default' -p17527 -(dp17528 -S'editable' -p17529 -I00 -sS'value' -p17530 -S'none' -p17531 -sssS'description' -p17532 -(dp17533 -S'editable' -p17534 -I01 -sS'value' -p17535 -g47 -sssS'task_template' -p17536 -(dp17537 -S'mandatory' -p17538 -(dp17539 -S'editable' -p17540 -I00 -sS'value' -p17541 -I00 -ssS'name' -p17542 -(dp17543 -S'editable' -p17544 -I01 -sS'value' -p17545 -S'Task Template' -p17546 -ssS'data_type' -p17547 -(dp17548 -S'editable' -p17549 -I00 -sS'value' -p17550 -S'entity' -p17551 -ssS'entity_type' -p17552 -(dp17553 -S'editable' -p17554 -I00 -sS'value' -p17555 -S'Task' -p17556 -ssS'editable' -p17557 -(dp17558 -S'editable' -p17559 -I00 -sS'value' -p17560 -I01 -ssS'unique' -p17561 -(dp17562 -S'editable' -p17563 -I00 -sS'value' -p17564 -I00 -ssS'properties' -p17565 -(dp17566 -S'default_value' -p17567 -(dp17568 -S'editable' -p17569 -I00 -sS'value' -p17570 -NssS'summary_default' -p17571 -(dp17572 -S'editable' -p17573 -I01 -sS'value' -p17574 -S'none' -p17575 -ssS'valid_types' -p17576 -(dp17577 -S'editable' -p17578 -I01 -sS'value' -p17579 -(lp17580 -S'TaskTemplate' -p17581 -asssS'description' -p17582 -(dp17583 -S'editable' -p17584 -I01 -sS'value' -p17585 -g47 -sssS'created_by' -p17586 -(dp17587 -S'mandatory' -p17588 -(dp17589 -S'editable' -p17590 -I00 -sS'value' -p17591 -I00 -ssS'name' -p17592 -(dp17593 -S'editable' -p17594 -I01 -sS'value' -p17595 -S'Created by' -p17596 -ssS'data_type' -p17597 -(dp17598 -S'editable' -p17599 -I00 -sS'value' -p17600 -S'entity' -p17601 -ssS'entity_type' -p17602 -(dp17603 -S'editable' -p17604 -I00 -sS'value' -p17605 -S'Task' -p17606 -ssS'editable' -p17607 -(dp17608 -S'editable' -p17609 -I00 -sS'value' -p17610 -I00 -ssS'unique' -p17611 -(dp17612 -S'editable' -p17613 -I00 -sS'value' -p17614 -I00 -ssS'properties' -p17615 -(dp17616 -S'default_value' -p17617 -(dp17618 -S'editable' -p17619 -I00 -sS'value' -p17620 -NssS'summary_default' -p17621 -(dp17622 -S'editable' -p17623 -I01 -sS'value' -p17624 -S'none' -p17625 -ssS'valid_types' -p17626 -(dp17627 -S'editable' -p17628 -I01 -sS'value' -p17629 -(lp17630 -S'HumanUser' -p17631 -aS'ApiUser' -p17632 -asssS'description' -p17633 -(dp17634 -S'editable' -p17635 -I01 -sS'value' -p17636 -g47 -sssS'content' -p17637 -(dp17638 -S'mandatory' -p17639 -(dp17640 -S'editable' -p17641 -I00 -sS'value' -p17642 -I01 -ssS'name' -p17643 -(dp17644 -S'editable' -p17645 -I01 -sS'value' -p17646 -S'Task Name' -p17647 -ssS'data_type' -p17648 -(dp17649 -S'editable' -p17650 -I00 -sS'value' -p17651 -S'text' -p17652 -ssS'entity_type' -p17653 -(dp17654 -S'editable' -p17655 -I00 -sS'value' -p17656 -S'Task' -p17657 -ssS'editable' -p17658 -(dp17659 -S'editable' -p17660 -I00 -sS'value' -p17661 -I01 -ssS'unique' -p17662 -(dp17663 -S'editable' -p17664 -I00 -sS'value' -p17665 -I00 -ssS'properties' -p17666 -(dp17667 -S'default_value' -p17668 -(dp17669 -S'editable' -p17670 -I00 -sS'value' -p17671 -NssS'summary_default' -p17672 -(dp17673 -S'editable' -p17674 -I01 -sS'value' -p17675 -S'record_count' -p17676 -sssS'description' -p17677 -(dp17678 -S'editable' -p17679 -I01 -sS'value' -p17680 -g47 -sssS'sg_status_list' -p17681 -(dp17682 -S'mandatory' -p17683 -(dp17684 -S'editable' -p17685 -I00 -sS'value' -p17686 -I00 -ssS'name' -p17687 -(dp17688 -S'editable' -p17689 -I01 -sS'value' -p17690 -S'Status' -p17691 -ssS'data_type' -p17692 -(dp17693 -S'editable' -p17694 -I00 -sS'value' -p17695 -S'status_list' -p17696 -ssS'entity_type' -p17697 -(dp17698 -S'editable' -p17699 -I00 -sS'value' -p17700 -S'Task' -p17701 -ssS'editable' -p17702 -(dp17703 -S'editable' -p17704 -I00 -sS'value' -p17705 -I01 -ssS'unique' -p17706 -(dp17707 -S'editable' -p17708 -I00 -sS'value' -p17709 -I00 -ssS'properties' -p17710 -(dp17711 -S'default_value' -p17712 -(dp17713 -S'editable' -p17714 -I01 -sS'value' -p17715 -S'wtg' -p17716 -ssS'valid_values' -p17717 -(dp17718 -S'editable' -p17719 -I01 -sS'value' -p17720 -(lp17721 -S'fin' -p17722 -aS'ip' -p17723 -aS'hld' -p17724 -aS'rdy' -p17725 -aS'wtg' -p17726 -assS'summary_default' -p17727 -(dp17728 -S'editable' -p17729 -I01 -sS'value' -p17730 -S'status_percentage' -p17731 -sssS'description' -p17732 -(dp17733 -S'editable' -p17734 -I01 -sS'value' -p17735 -g47 -sssS'time_logs_sum' -p17736 -(dp17737 -S'mandatory' -p17738 -(dp17739 -S'editable' -p17740 -I00 -sS'value' -p17741 -I00 -ssS'name' -p17742 -(dp17743 -S'editable' -p17744 -I01 -sS'value' -p17745 -S'Time Logged' -p17746 -ssS'data_type' -p17747 -(dp17748 -S'editable' -p17749 -I00 -sS'value' -p17750 -S'duration' -p17751 -ssS'entity_type' -p17752 -(dp17753 -S'editable' -p17754 -I00 -sS'value' -p17755 -S'Task' -p17756 -ssS'editable' -p17757 -(dp17758 -S'editable' -p17759 -I00 -sS'value' -p17760 -I00 -ssS'unique' -p17761 -(dp17762 -S'editable' -p17763 -I00 -sS'value' -p17764 -I00 -ssS'properties' -p17765 -(dp17766 -S'default_value' -p17767 -(dp17768 -S'editable' -p17769 -I00 -sS'value' -p17770 -I0 -ssS'summary_default' -p17771 -(dp17772 -S'editable' -p17773 -I01 -sS'value' -p17774 -S'sum' -p17775 -sssS'description' -p17776 -(dp17777 -S'editable' -p17778 -I01 -sS'value' -p17779 -g47 -sssS'start_date' -p17780 -(dp17781 -S'mandatory' -p17782 -(dp17783 -S'editable' -p17784 -I00 -sS'value' -p17785 -I00 -ssS'name' -p17786 -(dp17787 -S'editable' -p17788 -I01 -sS'value' -p17789 -S'Start Date' -p17790 -ssS'data_type' -p17791 -(dp17792 -S'editable' -p17793 -I00 -sS'value' -p17794 -S'date' -p17795 -ssS'entity_type' -p17796 -(dp17797 -S'editable' -p17798 -I00 -sS'value' -p17799 -S'Task' -p17800 -ssS'editable' -p17801 -(dp17802 -S'editable' -p17803 -I00 -sS'value' -p17804 -I01 -ssS'unique' -p17805 -(dp17806 -S'editable' -p17807 -I00 -sS'value' -p17808 -I00 -ssS'properties' -p17809 -(dp17810 -S'default_value' -p17811 -(dp17812 -S'editable' -p17813 -I00 -sS'value' -p17814 -NssS'summary_default' -p17815 -(dp17816 -S'editable' -p17817 -I01 -sS'value' -p17818 -S'earliest' -p17819 -sssS'description' -p17820 -(dp17821 -S'editable' -p17822 -I01 -sS'value' -p17823 -g47 -sssS'sibling_tasks' -p17824 -(dp17825 -S'mandatory' -p17826 -(dp17827 -S'editable' -p17828 -I00 -sS'value' -p17829 -I00 -ssS'name' -p17830 -(dp17831 -S'editable' -p17832 -I01 -sS'value' -p17833 -S'Sibling Tasks' -p17834 -ssS'data_type' -p17835 -(dp17836 -S'editable' -p17837 -I00 -sS'value' -p17838 -S'multi_entity' -p17839 -ssS'entity_type' -p17840 -(dp17841 -S'editable' -p17842 -I00 -sS'value' -p17843 -S'Task' -p17844 -ssS'editable' -p17845 -(dp17846 -S'editable' -p17847 -I00 -sS'value' -p17848 -I00 -ssS'unique' -p17849 -(dp17850 -S'editable' -p17851 -I00 -sS'value' -p17852 -I00 -ssS'properties' -p17853 -(dp17854 -S'default_value' -p17855 -(dp17856 -S'editable' -p17857 -I00 -sS'value' -p17858 -NssS'summary_default' -p17859 -(dp17860 -S'editable' -p17861 -I01 -sS'value' -p17862 -S'none' -p17863 -ssS'valid_types' -p17864 -(dp17865 -S'editable' -p17866 -I01 -sS'value' -p17867 -(lp17868 -S'Task' -p17869 -asssS'description' -p17870 -(dp17871 -S'editable' -p17872 -I01 -sS'value' -p17873 -g47 -sssS'due_date' -p17874 -(dp17875 -S'mandatory' -p17876 -(dp17877 -S'editable' -p17878 -I00 -sS'value' -p17879 -I00 -ssS'name' -p17880 -(dp17881 -S'editable' -p17882 -I01 -sS'value' -p17883 -S'Due Date' -p17884 -ssS'data_type' -p17885 -(dp17886 -S'editable' -p17887 -I00 -sS'value' -p17888 -S'date' -p17889 -ssS'entity_type' -p17890 -(dp17891 -S'editable' -p17892 -I00 -sS'value' -p17893 -S'Task' -p17894 -ssS'editable' -p17895 -(dp17896 -S'editable' -p17897 -I00 -sS'value' -p17898 -I01 -ssS'unique' -p17899 -(dp17900 -S'editable' -p17901 -I00 -sS'value' -p17902 -I00 -ssS'properties' -p17903 -(dp17904 -S'default_value' -p17905 -(dp17906 -S'editable' -p17907 -I00 -sS'value' -p17908 -NssS'summary_default' -p17909 -(dp17910 -S'editable' -p17911 -I01 -sS'value' -p17912 -S'latest' -p17913 -sssS'description' -p17914 -(dp17915 -S'editable' -p17916 -I01 -sS'value' -p17917 -g47 -sssS'updated_by' -p17918 -(dp17919 -S'mandatory' -p17920 -(dp17921 -S'editable' -p17922 -I00 -sS'value' -p17923 -I00 -ssS'name' -p17924 -(dp17925 -S'editable' -p17926 -I01 -sS'value' -p17927 -S'Updated by' -p17928 -ssS'data_type' -p17929 -(dp17930 -S'editable' -p17931 -I00 -sS'value' -p17932 -S'entity' -p17933 -ssS'entity_type' -p17934 -(dp17935 -S'editable' -p17936 -I00 -sS'value' -p17937 -S'Task' -p17938 -ssS'editable' -p17939 -(dp17940 -S'editable' -p17941 -I00 -sS'value' -p17942 -I00 -ssS'unique' -p17943 -(dp17944 -S'editable' -p17945 -I00 -sS'value' -p17946 -I00 -ssS'properties' -p17947 -(dp17948 -S'default_value' -p17949 -(dp17950 -S'editable' -p17951 -I00 -sS'value' -p17952 -NssS'summary_default' -p17953 -(dp17954 -S'editable' -p17955 -I01 -sS'value' -p17956 -S'none' -p17957 -ssS'valid_types' -p17958 -(dp17959 -S'editable' -p17960 -I01 -sS'value' -p17961 -(lp17962 -S'HumanUser' -p17963 -aS'ApiUser' -p17964 -asssS'description' -p17965 -(dp17966 -S'editable' -p17967 -I01 -sS'value' -p17968 -g47 -sssS'upstream_tasks' -p17969 -(dp17970 -S'mandatory' -p17971 -(dp17972 -S'editable' -p17973 -I00 -sS'value' -p17974 -I00 -ssS'name' -p17975 -(dp17976 -S'editable' -p17977 -I01 -sS'value' -p17978 -S'Upstream Dependency' -p17979 -ssS'data_type' -p17980 -(dp17981 -S'editable' -p17982 -I00 -sS'value' -p17983 -S'multi_entity' -p17984 -ssS'entity_type' -p17985 -(dp17986 -S'editable' -p17987 -I00 -sS'value' -p17988 -S'Task' -p17989 -ssS'editable' -p17990 -(dp17991 -S'editable' -p17992 -I00 -sS'value' -p17993 -I01 -ssS'unique' -p17994 -(dp17995 -S'editable' -p17996 -I00 -sS'value' -p17997 -I00 -ssS'properties' -p17998 -(dp17999 -S'default_value' -p18000 -(dp18001 -S'editable' -p18002 -I00 -sS'value' -p18003 -NssS'summary_default' -p18004 -(dp18005 -S'editable' -p18006 -I00 -sS'value' -p18007 -S'none' -p18008 -ssS'valid_types' -p18009 -(dp18010 -S'editable' -p18011 -I00 -sS'value' -p18012 -(lp18013 -S'Task' -p18014 -asssS'description' -p18015 -(dp18016 -S'editable' -p18017 -I01 -sS'value' -p18018 -g47 -sssS'dependency_violation' -p18019 -(dp18020 -S'mandatory' -p18021 -(dp18022 -S'editable' -p18023 -I00 -sS'value' -p18024 -I00 -ssS'name' -p18025 -(dp18026 -S'editable' -p18027 -I01 -sS'value' -p18028 -S'Dependency Violation' -p18029 -ssS'data_type' -p18030 -(dp18031 -S'editable' -p18032 -I00 -sS'value' -p18033 -S'checkbox' -p18034 -ssS'entity_type' -p18035 -(dp18036 -S'editable' -p18037 -I00 -sS'value' -p18038 -S'Task' -p18039 -ssS'editable' -p18040 -(dp18041 -S'editable' -p18042 -I00 -sS'value' -p18043 -I00 -ssS'unique' -p18044 -(dp18045 -S'editable' -p18046 -I00 -sS'value' -p18047 -I00 -ssS'properties' -p18048 -(dp18049 -S'default_value' -p18050 -(dp18051 -S'editable' -p18052 -I00 -sS'value' -p18053 -I00 -ssS'summary_default' -p18054 -(dp18055 -S'editable' -p18056 -I00 -sS'value' -p18057 -S'none' -p18058 -sssS'description' -p18059 -(dp18060 -S'editable' -p18061 -I01 -sS'value' -p18062 -g47 -sssS'time_vs_est' -p18063 -(dp18064 -S'mandatory' -p18065 -(dp18066 -S'editable' -p18067 -I00 -sS'value' -p18068 -I00 -ssS'name' -p18069 -(dp18070 -S'editable' -p18071 -I01 -sS'value' -p18072 -S'Time Logged - Over/Under Bid' -p18073 -ssS'data_type' -p18074 -(dp18075 -S'editable' -p18076 -I00 -sS'value' -p18077 -S'duration' -p18078 -ssS'entity_type' -p18079 -(dp18080 -S'editable' -p18081 -I00 -sS'value' -p18082 -S'Task' -p18083 -ssS'editable' -p18084 -(dp18085 -S'editable' -p18086 -I00 -sS'value' -p18087 -I00 -ssS'unique' -p18088 -(dp18089 -S'editable' -p18090 -I00 -sS'value' -p18091 -I00 -ssS'properties' -p18092 -(dp18093 -S'default_value' -p18094 -(dp18095 -S'editable' -p18096 -I00 -sS'value' -p18097 -NssS'summary_default' -p18098 -(dp18099 -S'editable' -p18100 -I01 -sS'value' -p18101 -S'sum' -p18102 -sssS'description' -p18103 -(dp18104 -S'editable' -p18105 -I01 -sS'value' -p18106 -g47 -sssS'template_task' -p18107 -(dp18108 -S'mandatory' -p18109 -(dp18110 -S'editable' -p18111 -I00 -sS'value' -p18112 -I00 -ssS'name' -p18113 -(dp18114 -S'editable' -p18115 -I01 -sS'value' -p18116 -S'Template Task' -p18117 -ssS'data_type' -p18118 -(dp18119 -S'editable' -p18120 -I00 -sS'value' -p18121 -S'entity' -p18122 -ssS'entity_type' -p18123 -(dp18124 -S'editable' -p18125 -I00 -sS'value' -p18126 -S'Task' -p18127 -ssS'editable' -p18128 -(dp18129 -S'editable' -p18130 -I00 -sS'value' -p18131 -I00 -ssS'unique' -p18132 -(dp18133 -S'editable' -p18134 -I00 -sS'value' -p18135 -I00 -ssS'properties' -p18136 -(dp18137 -S'default_value' -p18138 -(dp18139 -S'editable' -p18140 -I00 -sS'value' -p18141 -NssS'summary_default' -p18142 -(dp18143 -S'editable' -p18144 -I01 -sS'value' -p18145 -S'none' -p18146 -ssS'valid_types' -p18147 -(dp18148 -S'editable' -p18149 -I01 -sS'value' -p18150 -(lp18151 -S'Task' -p18152 -asssS'description' -p18153 -(dp18154 -S'editable' -p18155 -I01 -sS'value' -p18156 -g47 -sssS'step' -p18157 -(dp18158 -S'mandatory' -p18159 -(dp18160 -S'editable' -p18161 -I00 -sS'value' -p18162 -I00 -ssS'name' -p18163 -(dp18164 -S'editable' -p18165 -I01 -sS'value' -p18166 -S'Pipeline Step' -p18167 -ssS'data_type' -p18168 -(dp18169 -S'editable' -p18170 -I00 -sS'value' -p18171 -S'entity' -p18172 -ssS'entity_type' -p18173 -(dp18174 -S'editable' -p18175 -I00 -sS'value' -p18176 -S'Task' -p18177 -ssS'editable' -p18178 -(dp18179 -S'editable' -p18180 -I00 -sS'value' -p18181 -I01 -ssS'unique' -p18182 -(dp18183 -S'editable' -p18184 -I00 -sS'value' -p18185 -I00 -ssS'properties' -p18186 -(dp18187 -S'default_value' -p18188 -(dp18189 -S'editable' -p18190 -I00 -sS'value' -p18191 -NssS'summary_default' -p18192 -(dp18193 -S'editable' -p18194 -I01 -sS'value' -p18195 -S'none' -p18196 -ssS'valid_types' -p18197 -(dp18198 -S'editable' -p18199 -I01 -sS'value' -p18200 -(lp18201 -S'Step' -p18202 -asssS'description' -p18203 -(dp18204 -S'editable' -p18205 -I01 -sS'value' -p18206 -g47 -sssS'milestone' -p18207 -(dp18208 -S'mandatory' -p18209 -(dp18210 -S'editable' -p18211 -I00 -sS'value' -p18212 -I00 -ssS'name' -p18213 -(dp18214 -S'editable' -p18215 -I01 -sS'value' -p18216 -S'Milestone' -p18217 -ssS'data_type' -p18218 -(dp18219 -S'editable' -p18220 -I00 -sS'value' -p18221 -S'checkbox' -p18222 -ssS'entity_type' -p18223 -(dp18224 -S'editable' -p18225 -I00 -sS'value' -p18226 -S'Task' -p18227 -ssS'editable' -p18228 -(dp18229 -S'editable' -p18230 -I00 -sS'value' -p18231 -I01 -ssS'unique' -p18232 -(dp18233 -S'editable' -p18234 -I00 -sS'value' -p18235 -I00 -ssS'properties' -p18236 -(dp18237 -S'default_value' -p18238 -(dp18239 -S'editable' -p18240 -I00 -sS'value' -p18241 -I00 -ssS'summary_default' -p18242 -(dp18243 -S'editable' -p18244 -I01 -sS'value' -p18245 -S'none' -p18246 -sssS'description' -p18247 -(dp18248 -S'editable' -p18249 -I01 -sS'value' -p18250 -g47 -sssS'time_percent_of_est' -p18251 -(dp18252 -S'mandatory' -p18253 -(dp18254 -S'editable' -p18255 -I00 -sS'value' -p18256 -I00 -ssS'name' -p18257 -(dp18258 -S'editable' -p18259 -I01 -sS'value' -p18260 -S'Time Logged - % of Bid' -p18261 -ssS'data_type' -p18262 -(dp18263 -S'editable' -p18264 -I00 -sS'value' -p18265 -S'percent' -p18266 -ssS'entity_type' -p18267 -(dp18268 -S'editable' -p18269 -I00 -sS'value' -p18270 -S'Task' -p18271 -ssS'editable' -p18272 -(dp18273 -S'editable' -p18274 -I00 -sS'value' -p18275 -I00 -ssS'unique' -p18276 -(dp18277 -S'editable' -p18278 -I00 -sS'value' -p18279 -I00 -ssS'properties' -p18280 -(dp18281 -S'default_value' -p18282 -(dp18283 -S'editable' -p18284 -I00 -sS'value' -p18285 -NssS'summary_default' -p18286 -(dp18287 -S'editable' -p18288 -I01 -sS'value' -p18289 -S'none' -p18290 -sssS'description' -p18291 -(dp18292 -S'editable' -p18293 -I01 -sS'value' -p18294 -g47 -sssS'splits' -p18295 -(dp18296 -S'mandatory' -p18297 -(dp18298 -S'editable' -p18299 -I00 -sS'value' -p18300 -I00 -ssS'name' -p18301 -(dp18302 -S'editable' -p18303 -I01 -sS'value' -p18304 -S'Splits' -p18305 -ssS'data_type' -p18306 -(dp18307 -S'editable' -p18308 -I00 -sS'value' -p18309 -S'serializable' -p18310 -ssS'entity_type' -p18311 -(dp18312 -S'editable' -p18313 -I00 -sS'value' -p18314 -S'Task' -p18315 -ssS'editable' -p18316 -(dp18317 -S'editable' -p18318 -I00 -sS'value' -p18319 -I01 -ssS'unique' -p18320 -(dp18321 -S'editable' -p18322 -I00 -sS'value' -p18323 -I00 -ssS'properties' -p18324 -(dp18325 -S'default_value' -p18326 -(dp18327 -S'editable' -p18328 -I00 -sS'value' -p18329 -NssS'summary_default' -p18330 -(dp18331 -S'editable' -p18332 -I00 -sS'value' -p18333 -S'none' -p18334 -sssS'description' -p18335 -(dp18336 -S'editable' -p18337 -I01 -sS'value' -p18338 -g47 -sssS'created_at' -p18339 -(dp18340 -S'mandatory' -p18341 -(dp18342 -S'editable' -p18343 -I00 -sS'value' -p18344 -I00 -ssS'name' -p18345 -(dp18346 -S'editable' -p18347 -I01 -sS'value' -p18348 -S'Date Created' -p18349 -ssS'data_type' -p18350 -(dp18351 -S'editable' -p18352 -I00 -sS'value' -p18353 -S'date_time' -p18354 -ssS'entity_type' -p18355 -(dp18356 -S'editable' -p18357 -I00 -sS'value' -p18358 -S'Task' -p18359 -ssS'editable' -p18360 -(dp18361 -S'editable' -p18362 -I00 -sS'value' -p18363 -I00 -ssS'unique' -p18364 -(dp18365 -S'editable' -p18366 -I00 -sS'value' -p18367 -I00 -ssS'properties' -p18368 -(dp18369 -S'default_value' -p18370 -(dp18371 -S'editable' -p18372 -I00 -sS'value' -p18373 -NssS'summary_default' -p18374 -(dp18375 -S'editable' -p18376 -I01 -sS'value' -p18377 -S'none' -p18378 -sssS'description' -p18379 -(dp18380 -S'editable' -p18381 -I01 -sS'value' -p18382 -g47 -sssS'project' -p18383 -(dp18384 -S'mandatory' -p18385 -(dp18386 -S'editable' -p18387 -I00 -sS'value' -p18388 -I00 -ssS'name' -p18389 -(dp18390 -S'editable' -p18391 -I01 -sS'value' -p18392 -S'Project' -p18393 -ssS'data_type' -p18394 -(dp18395 -S'editable' -p18396 -I00 -sS'value' -p18397 -S'entity' -p18398 -ssS'entity_type' -p18399 -(dp18400 -S'editable' -p18401 -I00 -sS'value' -p18402 -S'Task' -p18403 -ssS'editable' -p18404 -(dp18405 -S'editable' -p18406 -I00 -sS'value' -p18407 -I01 -ssS'unique' -p18408 -(dp18409 -S'editable' -p18410 -I00 -sS'value' -p18411 -I00 -ssS'properties' -p18412 -(dp18413 -S'default_value' -p18414 -(dp18415 -S'editable' -p18416 -I00 -sS'value' -p18417 -NssS'summary_default' -p18418 -(dp18419 -S'editable' -p18420 -I01 -sS'value' -p18421 -S'none' -p18422 -ssS'valid_types' -p18423 -(dp18424 -S'editable' -p18425 -I01 -sS'value' -p18426 -(lp18427 -S'Project' -p18428 -asssS'description' -p18429 -(dp18430 -S'editable' -p18431 -I01 -sS'value' -p18432 -g47 -sssS'filmstrip_image' -p18433 -(dp18434 -S'mandatory' -p18435 -(dp18436 -S'editable' -p18437 -I00 -sS'value' -p18438 -I00 -ssS'name' -p18439 -(dp18440 -S'editable' -p18441 -I01 -sS'value' -p18442 -S'Filmstrip Thumbnail' -p18443 -ssS'data_type' -p18444 -(dp18445 -S'editable' -p18446 -I00 -sS'value' -p18447 -S'image' -p18448 -ssS'entity_type' -p18449 -(dp18450 -S'editable' -p18451 -I00 -sS'value' -p18452 -S'Task' -p18453 -ssS'editable' -p18454 -(dp18455 -S'editable' -p18456 -I00 -sS'value' -p18457 -I01 -ssS'unique' -p18458 -(dp18459 -S'editable' -p18460 -I00 -sS'value' -p18461 -I00 -ssS'properties' -p18462 -(dp18463 -S'default_value' -p18464 -(dp18465 -S'editable' -p18466 -I00 -sS'value' -p18467 -NssS'summary_default' -p18468 -(dp18469 -S'editable' -p18470 -I01 -sS'value' -p18471 -S'none' -p18472 -sssS'description' -p18473 -(dp18474 -S'editable' -p18475 -I01 -sS'value' -p18476 -g47 -sssS'est_in_mins' -p18477 -(dp18478 -S'mandatory' -p18479 -(dp18480 -S'editable' -p18481 -I00 -sS'value' -p18482 -I00 -ssS'name' -p18483 -(dp18484 -S'editable' -p18485 -I01 -sS'value' -p18486 -S'Bid' -p18487 -ssS'data_type' -p18488 -(dp18489 -S'editable' -p18490 -I00 -sS'value' -p18491 -S'duration' -p18492 -ssS'entity_type' -p18493 -(dp18494 -S'editable' -p18495 -I00 -sS'value' -p18496 -S'Task' -p18497 -ssS'editable' -p18498 -(dp18499 -S'editable' -p18500 -I00 -sS'value' -p18501 -I01 -ssS'unique' -p18502 -(dp18503 -S'editable' -p18504 -I00 -sS'value' -p18505 -I00 -ssS'properties' -p18506 -(dp18507 -S'default_value' -p18508 -(dp18509 -S'editable' -p18510 -I00 -sS'value' -p18511 -NssS'summary_default' -p18512 -(dp18513 -S'editable' -p18514 -I01 -sS'value' -p18515 -S'sum' -p18516 -sssS'description' -p18517 -(dp18518 -S'editable' -p18519 -I01 -sS'value' -p18520 -g47 -sssS'tag_list' -p18521 -(dp18522 -S'mandatory' -p18523 -(dp18524 -S'editable' -p18525 -I00 -sS'value' -p18526 -I00 -ssS'name' -p18527 -(dp18528 -S'editable' -p18529 -I01 -sS'value' -p18530 -S'Tags' -p18531 -ssS'data_type' -p18532 -(dp18533 -S'editable' -p18534 -I00 -sS'value' -p18535 -S'tag_list' -p18536 -ssS'entity_type' -p18537 -(dp18538 -S'editable' -p18539 -I00 -sS'value' -p18540 -S'Task' -p18541 -ssS'editable' -p18542 -(dp18543 -S'editable' -p18544 -I00 -sS'value' -p18545 -I01 -ssS'unique' -p18546 -(dp18547 -S'editable' -p18548 -I00 -sS'value' -p18549 -I00 -ssS'properties' -p18550 -(dp18551 -S'default_value' -p18552 -(dp18553 -S'editable' -p18554 -I00 -sS'value' -p18555 -NssS'summary_default' -p18556 -(dp18557 -S'editable' -p18558 -I01 -sS'value' -p18559 -S'none' -p18560 -ssS'valid_types' -p18561 -(dp18562 -S'editable' -p18563 -I01 -sS'value' -p18564 -(lp18565 -S'Tag' -p18566 -asssS'description' -p18567 -(dp18568 -S'editable' -p18569 -I01 -sS'value' -p18570 -g47 -sssS'notes' -p18571 -(dp18572 -S'mandatory' -p18573 -(dp18574 -S'editable' -p18575 -I00 -sS'value' -p18576 -I00 -ssS'name' -p18577 -(dp18578 -S'editable' -p18579 -I01 -sS'value' -p18580 -S'Notes' -p18581 -ssS'data_type' -p18582 -(dp18583 -S'editable' -p18584 -I00 -sS'value' -p18585 -S'multi_entity' -p18586 -ssS'entity_type' -p18587 -(dp18588 -S'editable' -p18589 -I00 -sS'value' -p18590 -S'Task' -p18591 -ssS'editable' -p18592 -(dp18593 -S'editable' -p18594 -I00 -sS'value' -p18595 -I01 -ssS'unique' -p18596 -(dp18597 -S'editable' -p18598 -I00 -sS'value' -p18599 -I00 -ssS'properties' -p18600 -(dp18601 -S'default_value' -p18602 -(dp18603 -S'editable' -p18604 -I00 -sS'value' -p18605 -NssS'summary_default' -p18606 -(dp18607 -S'editable' -p18608 -I01 -sS'value' -p18609 -S'none' -p18610 -ssS'valid_types' -p18611 -(dp18612 -S'editable' -p18613 -I01 -sS'value' -p18614 -(lp18615 -S'Note' -p18616 -asssS'description' -p18617 -(dp18618 -S'editable' -p18619 -I01 -sS'value' -p18620 -g47 -ssssS'CustomNonProjectEntity01' -p18621 -(dp18622 -S'created_at' -p18623 -(dp18624 -S'mandatory' -p18625 -(dp18626 -S'editable' -p18627 -I00 -sS'value' -p18628 -I00 -ssS'name' -p18629 -(dp18630 -S'editable' -p18631 -I01 -sS'value' -p18632 -S'Date Created' -p18633 -ssS'data_type' -p18634 -(dp18635 -S'editable' -p18636 -I00 -sS'value' -p18637 -S'date_time' -p18638 -ssS'entity_type' -p18639 -(dp18640 -S'editable' -p18641 -I00 -sS'value' -p18642 -S'CustomNonProjectEntity01' -p18643 -ssS'editable' -p18644 -(dp18645 -S'editable' -p18646 -I00 -sS'value' -p18647 -I00 -ssS'unique' -p18648 -(dp18649 -S'editable' -p18650 -I00 -sS'value' -p18651 -I00 -ssS'properties' -p18652 -(dp18653 -S'default_value' -p18654 -(dp18655 -S'editable' -p18656 -I00 -sS'value' -p18657 -NssS'summary_default' -p18658 -(dp18659 -S'editable' -p18660 -I01 -sS'value' -p18661 -S'none' -p18662 -sssS'description' -p18663 -(dp18664 -S'editable' -p18665 -I01 -sS'value' -p18666 -g47 -sssS'open_notes_count' -p18667 -(dp18668 -S'mandatory' -p18669 -(dp18670 -S'editable' -p18671 -I00 -sS'value' -p18672 -I00 -ssS'name' -p18673 -(dp18674 -S'editable' -p18675 -I01 -sS'value' -p18676 -S'Open Notes Count' -p18677 -ssS'data_type' -p18678 -(dp18679 -S'editable' -p18680 -I00 -sS'value' -p18681 -S'text' -p18682 -ssS'entity_type' -p18683 -(dp18684 -S'editable' -p18685 -I00 -sS'value' -p18686 -S'CustomNonProjectEntity01' -p18687 -ssS'editable' -p18688 -(dp18689 -S'editable' -p18690 -I00 -sS'value' -p18691 -I00 -ssS'unique' -p18692 -(dp18693 -S'editable' -p18694 -I00 -sS'value' -p18695 -I00 -ssS'properties' -p18696 -(dp18697 -S'default_value' -p18698 -(dp18699 -S'editable' -p18700 -I00 -sS'value' -p18701 -NssS'summary_default' -p18702 -(dp18703 -S'editable' -p18704 -I01 -sS'value' -p18705 -S'none' -p18706 -sssS'description' -p18707 -(dp18708 -S'editable' -p18709 -I01 -sS'value' -p18710 -g47 -sssS'code' -p18711 -(dp18712 -S'mandatory' -p18713 -(dp18714 -S'editable' -p18715 -I00 -sS'value' -p18716 -I01 -ssS'name' -p18717 -(dp18718 -S'editable' -p18719 -I01 -sS'value' -p18720 -S'Custom Non Project Entity01 Name' -p18721 -ssS'data_type' -p18722 -(dp18723 -S'editable' -p18724 -I00 -sS'value' -p18725 -S'text' -p18726 -ssS'entity_type' -p18727 -(dp18728 -S'editable' -p18729 -I00 -sS'value' -p18730 -S'CustomNonProjectEntity01' -p18731 -ssS'editable' -p18732 -(dp18733 -S'editable' -p18734 -I00 -sS'value' -p18735 -I01 -ssS'unique' -p18736 -(dp18737 -S'editable' -p18738 -I00 -sS'value' -p18739 -I00 -ssS'properties' -p18740 -(dp18741 -S'default_value' -p18742 -(dp18743 -S'editable' -p18744 -I00 -sS'value' -p18745 -NssS'summary_default' -p18746 -(dp18747 -S'editable' -p18748 -I01 -sS'value' -p18749 -S'none' -p18750 -sssS'description' -p18751 -(dp18752 -S'editable' -p18753 -I01 -sS'value' -p18754 -g47 -sssS'open_notes' -p18755 -(dp18756 -S'mandatory' -p18757 -(dp18758 -S'editable' -p18759 -I00 -sS'value' -p18760 -I00 -ssS'name' -p18761 -(dp18762 -S'editable' -p18763 -I01 -sS'value' -p18764 -S'Open Notes' -p18765 -ssS'data_type' -p18766 -(dp18767 -S'editable' -p18768 -I00 -sS'value' -p18769 -S'multi_entity' -p18770 -ssS'entity_type' -p18771 -(dp18772 -S'editable' -p18773 -I00 -sS'value' -p18774 -S'CustomNonProjectEntity01' -p18775 -ssS'editable' -p18776 -(dp18777 -S'editable' -p18778 -I00 -sS'value' -p18779 -I00 -ssS'unique' -p18780 -(dp18781 -S'editable' -p18782 -I00 -sS'value' -p18783 -I00 -ssS'properties' -p18784 -(dp18785 -S'default_value' -p18786 -(dp18787 -S'editable' -p18788 -I00 -sS'value' -p18789 -NssS'summary_default' -p18790 -(dp18791 -S'editable' -p18792 -I01 -sS'value' -p18793 -S'none' -p18794 -ssS'valid_types' -p18795 -(dp18796 -S'editable' -p18797 -I01 -sS'value' -p18798 -(lp18799 -S'Note' -p18800 -asssS'description' -p18801 -(dp18802 -S'editable' -p18803 -I01 -sS'value' -p18804 -g47 -sssS'description' -p18805 -(dp18806 -S'mandatory' -p18807 -(dp18808 -S'editable' -p18809 -I00 -sS'value' -p18810 -I00 -ssS'name' -p18811 -(dp18812 -S'editable' -p18813 -I01 -sS'value' -p18814 -S'Description' -p18815 -ssS'data_type' -p18816 -(dp18817 -S'editable' -p18818 -I00 -sS'value' -p18819 -S'text' -p18820 -ssS'entity_type' -p18821 -(dp18822 -S'editable' -p18823 -I00 -sS'value' -p18824 -S'CustomNonProjectEntity01' -p18825 -ssS'editable' -p18826 -(dp18827 -S'editable' -p18828 -I00 -sS'value' -p18829 -I01 -ssS'unique' -p18830 -(dp18831 -S'editable' -p18832 -I00 -sS'value' -p18833 -I00 -ssS'properties' -p18834 -(dp18835 -S'default_value' -p18836 -(dp18837 -S'editable' -p18838 -I00 -sS'value' -p18839 -NssS'summary_default' -p18840 -(dp18841 -S'editable' -p18842 -I01 -sS'value' -p18843 -S'none' -p18844 -sssS'description' -p18845 -(dp18846 -S'editable' -p18847 -I01 -sS'value' -p18848 -g47 -sssS'notes' -p18849 -(dp18850 -S'mandatory' -p18851 -(dp18852 -S'editable' -p18853 -I00 -sS'value' -p18854 -I00 -ssS'name' -p18855 -(dp18856 -S'editable' -p18857 -I01 -sS'value' -p18858 -S'Notes' -p18859 -ssS'data_type' -p18860 -(dp18861 -S'editable' -p18862 -I00 -sS'value' -p18863 -S'multi_entity' -p18864 -ssS'entity_type' -p18865 -(dp18866 -S'editable' -p18867 -I00 -sS'value' -p18868 -S'CustomNonProjectEntity01' -p18869 -ssS'editable' -p18870 -(dp18871 -S'editable' -p18872 -I00 -sS'value' -p18873 -I01 -ssS'unique' -p18874 -(dp18875 -S'editable' -p18876 -I00 -sS'value' -p18877 -I00 -ssS'properties' -p18878 -(dp18879 -S'default_value' -p18880 -(dp18881 -S'editable' -p18882 -I00 -sS'value' -p18883 -NssS'summary_default' -p18884 -(dp18885 -S'editable' -p18886 -I01 -sS'value' -p18887 -S'none' -p18888 -ssS'valid_types' -p18889 -(dp18890 -S'editable' -p18891 -I01 -sS'value' -p18892 -(lp18893 -S'Note' -p18894 -asssS'description' -p18895 -(dp18896 -S'editable' -p18897 -I01 -sS'value' -p18898 -g47 -sssS'updated_at' -p18899 -(dp18900 -S'mandatory' -p18901 -(dp18902 -S'editable' -p18903 -I00 -sS'value' -p18904 -I00 -ssS'name' -p18905 -(dp18906 -S'editable' -p18907 -I01 -sS'value' -p18908 -S'Date Updated' -p18909 -ssS'data_type' -p18910 -(dp18911 -S'editable' -p18912 -I00 -sS'value' -p18913 -S'date_time' -p18914 -ssS'entity_type' -p18915 -(dp18916 -S'editable' -p18917 -I00 -sS'value' -p18918 -S'CustomNonProjectEntity01' -p18919 -ssS'editable' -p18920 -(dp18921 -S'editable' -p18922 -I00 -sS'value' -p18923 -I00 -ssS'unique' -p18924 -(dp18925 -S'editable' -p18926 -I00 -sS'value' -p18927 -I00 -ssS'properties' -p18928 -(dp18929 -S'default_value' -p18930 -(dp18931 -S'editable' -p18932 -I00 -sS'value' -p18933 -NssS'summary_default' -p18934 -(dp18935 -S'editable' -p18936 -I01 -sS'value' -p18937 -S'none' -p18938 -sssS'description' -p18939 -(dp18940 -S'editable' -p18941 -I01 -sS'value' -p18942 -g47 -sssS'created_by' -p18943 -(dp18944 -S'mandatory' -p18945 -(dp18946 -S'editable' -p18947 -I00 -sS'value' -p18948 -I00 -ssS'name' -p18949 -(dp18950 -S'editable' -p18951 -I01 -sS'value' -p18952 -S'Created by' -p18953 -ssS'data_type' -p18954 -(dp18955 -S'editable' -p18956 -I00 -sS'value' -p18957 -S'entity' -p18958 -ssS'entity_type' -p18959 -(dp18960 -S'editable' -p18961 -I00 -sS'value' -p18962 -S'CustomNonProjectEntity01' -p18963 -ssS'editable' -p18964 -(dp18965 -S'editable' -p18966 -I00 -sS'value' -p18967 -I00 -ssS'unique' -p18968 -(dp18969 -S'editable' -p18970 -I00 -sS'value' -p18971 -I00 -ssS'properties' -p18972 -(dp18973 -S'default_value' -p18974 -(dp18975 -S'editable' -p18976 -I00 -sS'value' -p18977 -NssS'summary_default' -p18978 -(dp18979 -S'editable' -p18980 -I01 -sS'value' -p18981 -S'none' -p18982 -ssS'valid_types' -p18983 -(dp18984 -S'editable' -p18985 -I01 -sS'value' -p18986 -(lp18987 -S'HumanUser' -p18988 -aS'ApiUser' -p18989 -asssS'description' -p18990 -(dp18991 -S'editable' -p18992 -I01 -sS'value' -p18993 -g47 -sssS'filmstrip_image' -p18994 -(dp18995 -S'mandatory' -p18996 -(dp18997 -S'editable' -p18998 -I00 -sS'value' -p18999 -I00 -ssS'name' -p19000 -(dp19001 -S'editable' -p19002 -I01 -sS'value' -p19003 -S'Filmstrip Thumbnail' -p19004 -ssS'data_type' -p19005 -(dp19006 -S'editable' -p19007 -I00 -sS'value' -p19008 -S'image' -p19009 -ssS'entity_type' -p19010 -(dp19011 -S'editable' -p19012 -I00 -sS'value' -p19013 -S'CustomNonProjectEntity01' -p19014 -ssS'editable' -p19015 -(dp19016 -S'editable' -p19017 -I00 -sS'value' -p19018 -I01 -ssS'unique' -p19019 -(dp19020 -S'editable' -p19021 -I00 -sS'value' -p19022 -I00 -ssS'properties' -p19023 -(dp19024 -S'default_value' -p19025 -(dp19026 -S'editable' -p19027 -I00 -sS'value' -p19028 -NssS'summary_default' -p19029 -(dp19030 -S'editable' -p19031 -I01 -sS'value' -p19032 -S'none' -p19033 -sssS'description' -p19034 -(dp19035 -S'editable' -p19036 -I01 -sS'value' -p19037 -g47 -sssS'sg_status_list' -p19038 -(dp19039 -S'mandatory' -p19040 -(dp19041 -S'editable' -p19042 -I00 -sS'value' -p19043 -I00 -ssS'name' -p19044 -(dp19045 -S'editable' -p19046 -I01 -sS'value' -p19047 -S'Status' -p19048 -ssS'data_type' -p19049 -(dp19050 -S'editable' -p19051 -I00 -sS'value' -p19052 -S'status_list' -p19053 -ssS'entity_type' -p19054 -(dp19055 -S'editable' -p19056 -I00 -sS'value' -p19057 -S'CustomNonProjectEntity01' -p19058 -ssS'editable' -p19059 -(dp19060 -S'editable' -p19061 -I00 -sS'value' -p19062 -I01 -ssS'unique' -p19063 -(dp19064 -S'editable' -p19065 -I00 -sS'value' -p19066 -I00 -ssS'properties' -p19067 -(dp19068 -S'default_value' -p19069 -(dp19070 -S'editable' -p19071 -I01 -sS'value' -p19072 -S'wtg' -p19073 -ssS'valid_values' -p19074 -(dp19075 -S'editable' -p19076 -I01 -sS'value' -p19077 -(lp19078 -S'cmpt' -p19079 -aS'ip' -p19080 -aS'wtg' -p19081 -assS'summary_default' -p19082 -(dp19083 -S'editable' -p19084 -I01 -sS'value' -p19085 -S'none' -p19086 -sssS'description' -p19087 -(dp19088 -S'editable' -p19089 -I01 -sS'value' -p19090 -g47 -sssS'image' -p19091 -(dp19092 -S'mandatory' -p19093 -(dp19094 -S'editable' -p19095 -I00 -sS'value' -p19096 -I00 -ssS'name' -p19097 -(dp19098 -S'editable' -p19099 -I01 -sS'value' -p19100 -S'Thumbnail' -p19101 -ssS'data_type' -p19102 -(dp19103 -S'editable' -p19104 -I00 -sS'value' -p19105 -S'image' -p19106 -ssS'entity_type' -p19107 -(dp19108 -S'editable' -p19109 -I00 -sS'value' -p19110 -S'CustomNonProjectEntity01' -p19111 -ssS'editable' -p19112 -(dp19113 -S'editable' -p19114 -I00 -sS'value' -p19115 -I01 -ssS'unique' -p19116 -(dp19117 -S'editable' -p19118 -I00 -sS'value' -p19119 -I00 -ssS'properties' -p19120 -(dp19121 -S'default_value' -p19122 -(dp19123 -S'editable' -p19124 -I00 -sS'value' -p19125 -NssS'summary_default' -p19126 -(dp19127 -S'editable' -p19128 -I01 -sS'value' -p19129 -S'none' -p19130 -sssS'description' -p19131 -(dp19132 -S'editable' -p19133 -I01 -sS'value' -p19134 -g47 -sssS'cached_display_name' -p19135 -(dp19136 -S'mandatory' -p19137 -(dp19138 -S'editable' -p19139 -I00 -sS'value' -p19140 -I00 -ssS'name' -p19141 -(dp19142 -S'editable' -p19143 -I01 -sS'value' -p19144 -S'Cached Display Name' -p19145 -ssS'data_type' -p19146 -(dp19147 -S'editable' -p19148 -I00 -sS'value' -p19149 -S'text' -p19150 -ssS'entity_type' -p19151 -(dp19152 -S'editable' -p19153 -I00 -sS'value' -p19154 -S'CustomNonProjectEntity01' -p19155 -ssS'editable' -p19156 -(dp19157 -S'editable' -p19158 -I00 -sS'value' -p19159 -I01 -ssS'unique' -p19160 -(dp19161 -S'editable' -p19162 -I00 -sS'value' -p19163 -I00 -ssS'properties' -p19164 -(dp19165 -S'default_value' -p19166 -(dp19167 -S'editable' -p19168 -I00 -sS'value' -p19169 -NssS'summary_default' -p19170 -(dp19171 -S'editable' -p19172 -I00 -sS'value' -p19173 -S'none' -p19174 -sssS'description' -p19175 -(dp19176 -S'editable' -p19177 -I01 -sS'value' -p19178 -g47 -sssS'tag_list' -p19179 -(dp19180 -S'mandatory' -p19181 -(dp19182 -S'editable' -p19183 -I00 -sS'value' -p19184 -I00 -ssS'name' -p19185 -(dp19186 -S'editable' -p19187 -I01 -sS'value' -p19188 -S'Tags' -p19189 -ssS'data_type' -p19190 -(dp19191 -S'editable' -p19192 -I00 -sS'value' -p19193 -S'tag_list' -p19194 -ssS'entity_type' -p19195 -(dp19196 -S'editable' -p19197 -I00 -sS'value' -p19198 -S'CustomNonProjectEntity01' -p19199 -ssS'editable' -p19200 -(dp19201 -S'editable' -p19202 -I00 -sS'value' -p19203 -I01 -ssS'unique' -p19204 -(dp19205 -S'editable' -p19206 -I00 -sS'value' -p19207 -I00 -ssS'properties' -p19208 -(dp19209 -S'default_value' -p19210 -(dp19211 -S'editable' -p19212 -I00 -sS'value' -p19213 -NssS'summary_default' -p19214 -(dp19215 -S'editable' -p19216 -I01 -sS'value' -p19217 -S'none' -p19218 -ssS'valid_types' -p19219 -(dp19220 -S'editable' -p19221 -I01 -sS'value' -p19222 -(lp19223 -S'Tag' -p19224 -asssS'description' -p19225 -(dp19226 -S'editable' -p19227 -I01 -sS'value' -p19228 -g47 -sssS'id' -p19229 -(dp19230 -S'mandatory' -p19231 -(dp19232 -S'editable' -p19233 -I00 -sS'value' -p19234 -I00 -ssS'name' -p19235 -(dp19236 -S'editable' -p19237 -I01 -sS'value' -p19238 -S'Id' -p19239 -ssS'data_type' -p19240 -(dp19241 -S'editable' -p19242 -I00 -sS'value' -p19243 -S'number' -p19244 -ssS'entity_type' -p19245 -(dp19246 -S'editable' -p19247 -I00 -sS'value' -p19248 -S'CustomNonProjectEntity01' -p19249 -ssS'editable' -p19250 -(dp19251 -S'editable' -p19252 -I00 -sS'value' -p19253 -I00 -ssS'unique' -p19254 -(dp19255 -S'editable' -p19256 -I00 -sS'value' -p19257 -I00 -ssS'properties' -p19258 -(dp19259 -S'default_value' -p19260 -(dp19261 -S'editable' -p19262 -I00 -sS'value' -p19263 -NssS'summary_default' -p19264 -(dp19265 -S'editable' -p19266 -I01 -sS'value' -p19267 -S'none' -p19268 -sssS'description' -p19269 -(dp19270 -S'editable' -p19271 -I01 -sS'value' -p19272 -g47 -sssS'updated_by' -p19273 -(dp19274 -S'mandatory' -p19275 -(dp19276 -S'editable' -p19277 -I00 -sS'value' -p19278 -I00 -ssS'name' -p19279 -(dp19280 -S'editable' -p19281 -I01 -sS'value' -p19282 -S'Updated by' -p19283 -ssS'data_type' -p19284 -(dp19285 -S'editable' -p19286 -I00 -sS'value' -p19287 -S'entity' -p19288 -ssS'entity_type' -p19289 -(dp19290 -S'editable' -p19291 -I00 -sS'value' -p19292 -S'CustomNonProjectEntity01' -p19293 -ssS'editable' -p19294 -(dp19295 -S'editable' -p19296 -I00 -sS'value' -p19297 -I00 -ssS'unique' -p19298 -(dp19299 -S'editable' -p19300 -I00 -sS'value' -p19301 -I00 -ssS'properties' -p19302 -(dp19303 -S'default_value' -p19304 -(dp19305 -S'editable' -p19306 -I00 -sS'value' -p19307 -NssS'summary_default' -p19308 -(dp19309 -S'editable' -p19310 -I01 -sS'value' -p19311 -S'none' -p19312 -ssS'valid_types' -p19313 -(dp19314 -S'editable' -p19315 -I01 -sS'value' -p19316 -(lp19317 -S'HumanUser' -p19318 -aS'ApiUser' -p19319 -asssS'description' -p19320 -(dp19321 -S'editable' -p19322 -I01 -sS'value' -p19323 -g47 -ssssS'ApiUser' -p19324 -(dp19325 -S'description' -p19326 -(dp19327 -S'mandatory' -p19328 -(dp19329 -S'editable' -p19330 -I00 -sS'value' -p19331 -I00 -ssS'name' -p19332 -(dp19333 -S'editable' -p19334 -I01 -sS'value' -p19335 -S'Description' -p19336 -ssS'data_type' -p19337 -(dp19338 -S'editable' -p19339 -I00 -sS'value' -p19340 -S'text' -p19341 -ssS'entity_type' -p19342 -(dp19343 -S'editable' -p19344 -I00 -sS'value' -p19345 -S'ApiUser' -p19346 -ssS'editable' -p19347 -(dp19348 -S'editable' -p19349 -I00 -sS'value' -p19350 -I01 -ssS'unique' -p19351 -(dp19352 -S'editable' -p19353 -I00 -sS'value' -p19354 -I00 -ssS'properties' -p19355 -(dp19356 -S'default_value' -p19357 -(dp19358 -S'editable' -p19359 -I00 -sS'value' -p19360 -NssS'summary_default' -p19361 -(dp19362 -S'editable' -p19363 -I01 -sS'value' -p19364 -S'none' -p19365 -sssS'description' -p19366 -(dp19367 -S'editable' -p19368 -I01 -sS'value' -p19369 -g47 -sssS'firstname' -p19370 -(dp19371 -S'mandatory' -p19372 -(dp19373 -S'editable' -p19374 -I00 -sS'value' -p19375 -I01 -ssS'name' -p19376 -(dp19377 -S'editable' -p19378 -I01 -sS'value' -p19379 -S'Script Name' -p19380 -ssS'data_type' -p19381 -(dp19382 -S'editable' -p19383 -I00 -sS'value' -p19384 -S'text' -p19385 -ssS'entity_type' -p19386 -(dp19387 -S'editable' -p19388 -I00 -sS'value' -p19389 -S'ApiUser' -p19390 -ssS'editable' -p19391 -(dp19392 -S'editable' -p19393 -I00 -sS'value' -p19394 -I01 -ssS'unique' -p19395 -(dp19396 -S'editable' -p19397 -I00 -sS'value' -p19398 -I00 -ssS'properties' -p19399 -(dp19400 -S'default_value' -p19401 -(dp19402 -S'editable' -p19403 -I00 -sS'value' -p19404 -NssS'summary_default' -p19405 -(dp19406 -S'editable' -p19407 -I01 -sS'value' -p19408 -S'none' -p19409 -sssS'description' -p19410 -(dp19411 -S'editable' -p19412 -I01 -sS'value' -p19413 -g47 -sssS'lastname' -p19414 -(dp19415 -S'mandatory' -p19416 -(dp19417 -S'editable' -p19418 -I00 -sS'value' -p19419 -I00 -ssS'name' -p19420 -(dp19421 -S'editable' -p19422 -I01 -sS'value' -p19423 -S'Version' -p19424 -ssS'data_type' -p19425 -(dp19426 -S'editable' -p19427 -I00 -sS'value' -p19428 -S'text' -p19429 -ssS'entity_type' -p19430 -(dp19431 -S'editable' -p19432 -I00 -sS'value' -p19433 -S'ApiUser' -p19434 -ssS'editable' -p19435 -(dp19436 -S'editable' -p19437 -I00 -sS'value' -p19438 -I01 -ssS'unique' -p19439 -(dp19440 -S'editable' -p19441 -I00 -sS'value' -p19442 -I00 -ssS'properties' -p19443 -(dp19444 -S'default_value' -p19445 -(dp19446 -S'editable' -p19447 -I00 -sS'value' -p19448 -NssS'summary_default' -p19449 -(dp19450 -S'editable' -p19451 -I01 -sS'value' -p19452 -S'none' -p19453 -sssS'description' -p19454 -(dp19455 -S'editable' -p19456 -I01 -sS'value' -p19457 -g47 -sssS'created_at' -p19458 -(dp19459 -S'mandatory' -p19460 -(dp19461 -S'editable' -p19462 -I00 -sS'value' -p19463 -I00 -ssS'name' -p19464 -(dp19465 -S'editable' -p19466 -I01 -sS'value' -p19467 -S'Date Created' -p19468 -ssS'data_type' -p19469 -(dp19470 -S'editable' -p19471 -I00 -sS'value' -p19472 -S'date_time' -p19473 -ssS'entity_type' -p19474 -(dp19475 -S'editable' -p19476 -I00 -sS'value' -p19477 -S'ApiUser' -p19478 -ssS'editable' -p19479 -(dp19480 -S'editable' -p19481 -I00 -sS'value' -p19482 -I00 -ssS'unique' -p19483 -(dp19484 -S'editable' -p19485 -I00 -sS'value' -p19486 -I00 -ssS'properties' -p19487 -(dp19488 -S'default_value' -p19489 -(dp19490 -S'editable' -p19491 -I00 -sS'value' -p19492 -NssS'summary_default' -p19493 -(dp19494 -S'editable' -p19495 -I01 -sS'value' -p19496 -S'none' -p19497 -sssS'description' -p19498 -(dp19499 -S'editable' -p19500 -I01 -sS'value' -p19501 -g47 -sssS'generate_event_log_entries' -p19502 -(dp19503 -S'mandatory' -p19504 -(dp19505 -S'editable' -p19506 -I00 -sS'value' -p19507 -I00 -ssS'name' -p19508 -(dp19509 -S'editable' -p19510 -I01 -sS'value' -p19511 -S'Generate Events' -p19512 -ssS'data_type' -p19513 -(dp19514 -S'editable' -p19515 -I00 -sS'value' -p19516 -S'checkbox' -p19517 -ssS'entity_type' -p19518 -(dp19519 -S'editable' -p19520 -I00 -sS'value' -p19521 -S'ApiUser' -p19522 -ssS'editable' -p19523 -(dp19524 -S'editable' -p19525 -I00 -sS'value' -p19526 -I01 -ssS'unique' -p19527 -(dp19528 -S'editable' -p19529 -I00 -sS'value' -p19530 -I00 -ssS'properties' -p19531 -(dp19532 -S'default_value' -p19533 -(dp19534 -S'editable' -p19535 -I00 -sS'value' -p19536 -I01 -ssS'summary_default' -p19537 -(dp19538 -S'editable' -p19539 -I01 -sS'value' -p19540 -S'none' -p19541 -sssS'description' -p19542 -(dp19543 -S'editable' -p19544 -I01 -sS'value' -p19545 -g47 -sssS'updated_at' -p19546 -(dp19547 -S'mandatory' -p19548 -(dp19549 -S'editable' -p19550 -I00 -sS'value' -p19551 -I00 -ssS'name' -p19552 -(dp19553 -S'editable' -p19554 -I01 -sS'value' -p19555 -S'Date Updated' -p19556 -ssS'data_type' -p19557 -(dp19558 -S'editable' -p19559 -I00 -sS'value' -p19560 -S'date_time' -p19561 -ssS'entity_type' -p19562 -(dp19563 -S'editable' -p19564 -I00 -sS'value' -p19565 -S'ApiUser' -p19566 -ssS'editable' -p19567 -(dp19568 -S'editable' -p19569 -I00 -sS'value' -p19570 -I00 -ssS'unique' -p19571 -(dp19572 -S'editable' -p19573 -I00 -sS'value' -p19574 -I00 -ssS'properties' -p19575 -(dp19576 -S'default_value' -p19577 -(dp19578 -S'editable' -p19579 -I00 -sS'value' -p19580 -NssS'summary_default' -p19581 -(dp19582 -S'editable' -p19583 -I01 -sS'value' -p19584 -S'none' -p19585 -sssS'description' -p19586 -(dp19587 -S'editable' -p19588 -I01 -sS'value' -p19589 -g47 -sssS'created_by' -p19590 -(dp19591 -S'mandatory' -p19592 -(dp19593 -S'editable' -p19594 -I00 -sS'value' -p19595 -I00 -ssS'name' -p19596 -(dp19597 -S'editable' -p19598 -I01 -sS'value' -p19599 -S'Created by' -p19600 -ssS'data_type' -p19601 -(dp19602 -S'editable' -p19603 -I00 -sS'value' -p19604 -S'entity' -p19605 -ssS'entity_type' -p19606 -(dp19607 -S'editable' -p19608 -I00 -sS'value' -p19609 -S'ApiUser' -p19610 -ssS'editable' -p19611 -(dp19612 -S'editable' -p19613 -I00 -sS'value' -p19614 -I00 -ssS'unique' -p19615 -(dp19616 -S'editable' -p19617 -I00 -sS'value' -p19618 -I00 -ssS'properties' -p19619 -(dp19620 -S'default_value' -p19621 -(dp19622 -S'editable' -p19623 -I00 -sS'value' -p19624 -NssS'summary_default' -p19625 -(dp19626 -S'editable' -p19627 -I01 -sS'value' -p19628 -S'none' -p19629 -ssS'valid_types' -p19630 -(dp19631 -S'editable' -p19632 -I01 -sS'value' -p19633 -(lp19634 -S'HumanUser' -p19635 -aS'ApiUser' -p19636 -asssS'description' -p19637 -(dp19638 -S'editable' -p19639 -I01 -sS'value' -p19640 -g47 -sssS'email' -p19641 -(dp19642 -S'mandatory' -p19643 -(dp19644 -S'editable' -p19645 -I00 -sS'value' -p19646 -I00 -ssS'name' -p19647 -(dp19648 -S'editable' -p19649 -I01 -sS'value' -p19650 -S'Maintainer' -p19651 -ssS'data_type' -p19652 -(dp19653 -S'editable' -p19654 -I00 -sS'value' -p19655 -S'text' -p19656 -ssS'entity_type' -p19657 -(dp19658 -S'editable' -p19659 -I00 -sS'value' -p19660 -S'ApiUser' -p19661 -ssS'editable' -p19662 -(dp19663 -S'editable' -p19664 -I00 -sS'value' -p19665 -I01 -ssS'unique' -p19666 -(dp19667 -S'editable' -p19668 -I00 -sS'value' -p19669 -I00 -ssS'properties' -p19670 -(dp19671 -S'default_value' -p19672 -(dp19673 -S'editable' -p19674 -I00 -sS'value' -p19675 -g47 -ssS'summary_default' -p19676 -(dp19677 -S'editable' -p19678 -I01 -sS'value' -p19679 -S'none' -p19680 -sssS'description' -p19681 -(dp19682 -S'editable' -p19683 -I01 -sS'value' -p19684 -g47 -sssS'permission_rule_set' -p19685 -(dp19686 -S'mandatory' -p19687 -(dp19688 -S'editable' -p19689 -I00 -sS'value' -p19690 -I00 -ssS'name' -p19691 -(dp19692 -S'editable' -p19693 -I01 -sS'value' -p19694 -S'Permission Group' -p19695 -ssS'data_type' -p19696 -(dp19697 -S'editable' -p19698 -I00 -sS'value' -p19699 -S'entity' -p19700 -ssS'entity_type' -p19701 -(dp19702 -S'editable' -p19703 -I00 -sS'value' -p19704 -S'ApiUser' -p19705 -ssS'editable' -p19706 -(dp19707 -S'editable' -p19708 -I00 -sS'value' -p19709 -I00 -ssS'unique' -p19710 -(dp19711 -S'editable' -p19712 -I00 -sS'value' -p19713 -I00 -ssS'properties' -p19714 -(dp19715 -S'default_value' -p19716 -(dp19717 -S'editable' -p19718 -I00 -sS'value' -p19719 -NssS'summary_default' -p19720 -(dp19721 -S'editable' -p19722 -I01 -sS'value' -p19723 -S'none' -p19724 -ssS'valid_types' -p19725 -(dp19726 -S'editable' -p19727 -I01 -sS'value' -p19728 -(lp19729 -S'PermissionRuleSet' -p19730 -asssS'description' -p19731 -(dp19732 -S'editable' -p19733 -I01 -sS'value' -p19734 -g47 -sssS'filmstrip_image' -p19735 -(dp19736 -S'mandatory' -p19737 -(dp19738 -S'editable' -p19739 -I00 -sS'value' -p19740 -I00 -ssS'name' -p19741 -(dp19742 -S'editable' -p19743 -I01 -sS'value' -p19744 -S'Filmstrip Thumbnail' -p19745 -ssS'data_type' -p19746 -(dp19747 -S'editable' -p19748 -I00 -sS'value' -p19749 -S'image' -p19750 -ssS'entity_type' -p19751 -(dp19752 -S'editable' -p19753 -I00 -sS'value' -p19754 -S'ApiUser' -p19755 -ssS'editable' -p19756 -(dp19757 -S'editable' -p19758 -I00 -sS'value' -p19759 -I01 -ssS'unique' -p19760 -(dp19761 -S'editable' -p19762 -I00 -sS'value' -p19763 -I00 -ssS'properties' -p19764 -(dp19765 -S'default_value' -p19766 -(dp19767 -S'editable' -p19768 -I00 -sS'value' -p19769 -NssS'summary_default' -p19770 -(dp19771 -S'editable' -p19772 -I01 -sS'value' -p19773 -S'none' -p19774 -sssS'description' -p19775 -(dp19776 -S'editable' -p19777 -I01 -sS'value' -p19778 -g47 -sssS'image' -p19779 -(dp19780 -S'mandatory' -p19781 -(dp19782 -S'editable' -p19783 -I00 -sS'value' -p19784 -I00 -ssS'name' -p19785 -(dp19786 -S'editable' -p19787 -I01 -sS'value' -p19788 -S'Thumbnail' -p19789 -ssS'data_type' -p19790 -(dp19791 -S'editable' -p19792 -I00 -sS'value' -p19793 -S'image' -p19794 -ssS'entity_type' -p19795 -(dp19796 -S'editable' -p19797 -I00 -sS'value' -p19798 -S'ApiUser' -p19799 -ssS'editable' -p19800 -(dp19801 -S'editable' -p19802 -I00 -sS'value' -p19803 -I01 -ssS'unique' -p19804 -(dp19805 -S'editable' -p19806 -I00 -sS'value' -p19807 -I00 -ssS'properties' -p19808 -(dp19809 -S'default_value' -p19810 -(dp19811 -S'editable' -p19812 -I00 -sS'value' -p19813 -NssS'summary_default' -p19814 -(dp19815 -S'editable' -p19816 -I01 -sS'value' -p19817 -S'none' -p19818 -sssS'description' -p19819 -(dp19820 -S'editable' -p19821 -I01 -sS'value' -p19822 -g47 -sssS'cached_display_name' -p19823 -(dp19824 -S'mandatory' -p19825 -(dp19826 -S'editable' -p19827 -I00 -sS'value' -p19828 -I00 -ssS'name' -p19829 -(dp19830 -S'editable' -p19831 -I01 -sS'value' -p19832 -S'Cached Display Name' -p19833 -ssS'data_type' -p19834 -(dp19835 -S'editable' -p19836 -I00 -sS'value' -p19837 -S'text' -p19838 -ssS'entity_type' -p19839 -(dp19840 -S'editable' -p19841 -I00 -sS'value' -p19842 -S'ApiUser' -p19843 -ssS'editable' -p19844 -(dp19845 -S'editable' -p19846 -I00 -sS'value' -p19847 -I01 -ssS'unique' -p19848 -(dp19849 -S'editable' -p19850 -I00 -sS'value' -p19851 -I00 -ssS'properties' -p19852 -(dp19853 -S'default_value' -p19854 -(dp19855 -S'editable' -p19856 -I00 -sS'value' -p19857 -NssS'summary_default' -p19858 -(dp19859 -S'editable' -p19860 -I00 -sS'value' -p19861 -S'none' -p19862 -sssS'description' -p19863 -(dp19864 -S'editable' -p19865 -I01 -sS'value' -p19866 -g47 -sssS'tag_list' -p19867 -(dp19868 -S'mandatory' -p19869 -(dp19870 -S'editable' -p19871 -I00 -sS'value' -p19872 -I00 -ssS'name' -p19873 -(dp19874 -S'editable' -p19875 -I01 -sS'value' -p19876 -S'Tags' -p19877 -ssS'data_type' -p19878 -(dp19879 -S'editable' -p19880 -I00 -sS'value' -p19881 -S'tag_list' -p19882 -ssS'entity_type' -p19883 -(dp19884 -S'editable' -p19885 -I00 -sS'value' -p19886 -S'ApiUser' -p19887 -ssS'editable' -p19888 -(dp19889 -S'editable' -p19890 -I00 -sS'value' -p19891 -I01 -ssS'unique' -p19892 -(dp19893 -S'editable' -p19894 -I00 -sS'value' -p19895 -I00 -ssS'properties' -p19896 -(dp19897 -S'default_value' -p19898 -(dp19899 -S'editable' -p19900 -I00 -sS'value' -p19901 -NssS'summary_default' -p19902 -(dp19903 -S'editable' -p19904 -I01 -sS'value' -p19905 -S'none' -p19906 -ssS'valid_types' -p19907 -(dp19908 -S'editable' -p19909 -I01 -sS'value' -p19910 -(lp19911 -S'Tag' -p19912 -asssS'description' -p19913 -(dp19914 -S'editable' -p19915 -I01 -sS'value' -p19916 -g47 -sssS'id' -p19917 -(dp19918 -S'mandatory' -p19919 -(dp19920 -S'editable' -p19921 -I00 -sS'value' -p19922 -I00 -ssS'name' -p19923 -(dp19924 -S'editable' -p19925 -I01 -sS'value' -p19926 -S'Id' -p19927 -ssS'data_type' -p19928 -(dp19929 -S'editable' -p19930 -I00 -sS'value' -p19931 -S'number' -p19932 -ssS'entity_type' -p19933 -(dp19934 -S'editable' -p19935 -I00 -sS'value' -p19936 -S'ApiUser' -p19937 -ssS'editable' -p19938 -(dp19939 -S'editable' -p19940 -I00 -sS'value' -p19941 -I00 -ssS'unique' -p19942 -(dp19943 -S'editable' -p19944 -I00 -sS'value' -p19945 -I00 -ssS'properties' -p19946 -(dp19947 -S'default_value' -p19948 -(dp19949 -S'editable' -p19950 -I00 -sS'value' -p19951 -NssS'summary_default' -p19952 -(dp19953 -S'editable' -p19954 -I01 -sS'value' -p19955 -S'none' -p19956 -sssS'description' -p19957 -(dp19958 -S'editable' -p19959 -I01 -sS'value' -p19960 -g47 -sssS'salted_password' -p19961 -(dp19962 -S'mandatory' -p19963 -(dp19964 -S'editable' -p19965 -I00 -sS'value' -p19966 -I00 -ssS'name' -p19967 -(dp19968 -S'editable' -p19969 -I01 -sS'value' -p19970 -S'Application Key' -p19971 -ssS'data_type' -p19972 -(dp19973 -S'editable' -p19974 -I00 -sS'value' -p19975 -S'text' -p19976 -ssS'entity_type' -p19977 -(dp19978 -S'editable' -p19979 -I00 -sS'value' -p19980 -S'ApiUser' -p19981 -ssS'editable' -p19982 -(dp19983 -S'editable' -p19984 -I00 -sS'value' -p19985 -I00 -ssS'unique' -p19986 -(dp19987 -S'editable' -p19988 -I00 -sS'value' -p19989 -I00 -ssS'properties' -p19990 -(dp19991 -S'default_value' -p19992 -(dp19993 -S'editable' -p19994 -I00 -sS'value' -p19995 -g47 -ssS'summary_default' -p19996 -(dp19997 -S'editable' -p19998 -I01 -sS'value' -p19999 -S'none' -p20000 -sssS'description' -p20001 -(dp20002 -S'editable' -p20003 -I01 -sS'value' -p20004 -g47 -sssS'updated_by' -p20005 -(dp20006 -S'mandatory' -p20007 -(dp20008 -S'editable' -p20009 -I00 -sS'value' -p20010 -I00 -ssS'name' -p20011 -(dp20012 -S'editable' -p20013 -I01 -sS'value' -p20014 -S'Updated by' -p20015 -ssS'data_type' -p20016 -(dp20017 -S'editable' -p20018 -I00 -sS'value' -p20019 -S'entity' -p20020 -ssS'entity_type' -p20021 -(dp20022 -S'editable' -p20023 -I00 -sS'value' -p20024 -S'ApiUser' -p20025 -ssS'editable' -p20026 -(dp20027 -S'editable' -p20028 -I00 -sS'value' -p20029 -I00 -ssS'unique' -p20030 -(dp20031 -S'editable' -p20032 -I00 -sS'value' -p20033 -I00 -ssS'properties' -p20034 -(dp20035 -S'default_value' -p20036 -(dp20037 -S'editable' -p20038 -I00 -sS'value' -p20039 -NssS'summary_default' -p20040 -(dp20041 -S'editable' -p20042 -I01 -sS'value' -p20043 -S'none' -p20044 -ssS'valid_types' -p20045 -(dp20046 -S'editable' -p20047 -I01 -sS'value' -p20048 -(lp20049 -S'HumanUser' -p20050 -aS'ApiUser' -p20051 -asssS'description' -p20052 -(dp20053 -S'editable' -p20054 -I01 -sS'value' -p20055 -g47 -ssssS'CustomNonProjectEntity03' -p20056 -(dp20057 -S'open_notes_count' -p20058 -(dp20059 -S'mandatory' -p20060 -(dp20061 -S'editable' -p20062 -I00 -sS'value' -p20063 -I00 -ssS'name' -p20064 -(dp20065 -S'editable' -p20066 -I01 -sS'value' -p20067 -S'Open Notes Count' -p20068 -ssS'data_type' -p20069 -(dp20070 -S'editable' -p20071 -I00 -sS'value' -p20072 -S'text' -p20073 -ssS'entity_type' -p20074 -(dp20075 -S'editable' -p20076 -I00 -sS'value' -p20077 -S'CustomNonProjectEntity03' -p20078 -ssS'editable' -p20079 -(dp20080 -S'editable' -p20081 -I00 -sS'value' -p20082 -I00 -ssS'unique' -p20083 -(dp20084 -S'editable' -p20085 -I00 -sS'value' -p20086 -I00 -ssS'properties' -p20087 -(dp20088 -S'default_value' -p20089 -(dp20090 -S'editable' -p20091 -I00 -sS'value' -p20092 -NssS'summary_default' -p20093 -(dp20094 -S'editable' -p20095 -I01 -sS'value' -p20096 -S'none' -p20097 -sssS'description' -p20098 -(dp20099 -S'editable' -p20100 -I01 -sS'value' -p20101 -g47 -sssS'code' -p20102 -(dp20103 -S'mandatory' -p20104 -(dp20105 -S'editable' -p20106 -I00 -sS'value' -p20107 -I01 -ssS'name' -p20108 -(dp20109 -S'editable' -p20110 -I01 -sS'value' -p20111 -S'Custom Non Project Entity03 Name' -p20112 -ssS'data_type' -p20113 -(dp20114 -S'editable' -p20115 -I00 -sS'value' -p20116 -S'text' -p20117 -ssS'entity_type' -p20118 -(dp20119 -S'editable' -p20120 -I00 -sS'value' -p20121 -S'CustomNonProjectEntity03' -p20122 -ssS'editable' -p20123 -(dp20124 -S'editable' -p20125 -I00 -sS'value' -p20126 -I01 -ssS'unique' -p20127 -(dp20128 -S'editable' -p20129 -I00 -sS'value' -p20130 -I00 -ssS'properties' -p20131 -(dp20132 -S'default_value' -p20133 -(dp20134 -S'editable' -p20135 -I00 -sS'value' -p20136 -NssS'summary_default' -p20137 -(dp20138 -S'editable' -p20139 -I01 -sS'value' -p20140 -S'none' -p20141 -sssS'description' -p20142 -(dp20143 -S'editable' -p20144 -I01 -sS'value' -p20145 -g47 -sssS'open_notes' -p20146 -(dp20147 -S'mandatory' -p20148 -(dp20149 -S'editable' -p20150 -I00 -sS'value' -p20151 -I00 -ssS'name' -p20152 -(dp20153 -S'editable' -p20154 -I01 -sS'value' -p20155 -S'Open Notes' -p20156 -ssS'data_type' -p20157 -(dp20158 -S'editable' -p20159 -I00 -sS'value' -p20160 -S'multi_entity' -p20161 -ssS'entity_type' -p20162 -(dp20163 -S'editable' -p20164 -I00 -sS'value' -p20165 -S'CustomNonProjectEntity03' -p20166 -ssS'editable' -p20167 -(dp20168 -S'editable' -p20169 -I00 -sS'value' -p20170 -I00 -ssS'unique' -p20171 -(dp20172 -S'editable' -p20173 -I00 -sS'value' -p20174 -I00 -ssS'properties' -p20175 -(dp20176 -S'default_value' -p20177 -(dp20178 -S'editable' -p20179 -I00 -sS'value' -p20180 -NssS'summary_default' -p20181 -(dp20182 -S'editable' -p20183 -I01 -sS'value' -p20184 -S'none' -p20185 -ssS'valid_types' -p20186 -(dp20187 -S'editable' -p20188 -I01 -sS'value' -p20189 -(lp20190 -S'Note' -p20191 -asssS'description' -p20192 -(dp20193 -S'editable' -p20194 -I01 -sS'value' -p20195 -g47 -sssS'description' -p20196 -(dp20197 -S'mandatory' -p20198 -(dp20199 -S'editable' -p20200 -I00 -sS'value' -p20201 -I00 -ssS'name' -p20202 -(dp20203 -S'editable' -p20204 -I01 -sS'value' -p20205 -S'Description' -p20206 -ssS'data_type' -p20207 -(dp20208 -S'editable' -p20209 -I00 -sS'value' -p20210 -S'text' -p20211 -ssS'entity_type' -p20212 -(dp20213 -S'editable' -p20214 -I00 -sS'value' -p20215 -S'CustomNonProjectEntity03' -p20216 -ssS'editable' -p20217 -(dp20218 -S'editable' -p20219 -I00 -sS'value' -p20220 -I01 -ssS'unique' -p20221 -(dp20222 -S'editable' -p20223 -I00 -sS'value' -p20224 -I00 -ssS'properties' -p20225 -(dp20226 -S'default_value' -p20227 -(dp20228 -S'editable' -p20229 -I00 -sS'value' -p20230 -NssS'summary_default' -p20231 -(dp20232 -S'editable' -p20233 -I01 -sS'value' -p20234 -S'none' -p20235 -sssS'description' -p20236 -(dp20237 -S'editable' -p20238 -I01 -sS'value' -p20239 -g47 -sssS'created_at' -p20240 -(dp20241 -S'mandatory' -p20242 -(dp20243 -S'editable' -p20244 -I00 -sS'value' -p20245 -I00 -ssS'name' -p20246 -(dp20247 -S'editable' -p20248 -I01 -sS'value' -p20249 -S'Date Created' -p20250 -ssS'data_type' -p20251 -(dp20252 -S'editable' -p20253 -I00 -sS'value' -p20254 -S'date_time' -p20255 -ssS'entity_type' -p20256 -(dp20257 -S'editable' -p20258 -I00 -sS'value' -p20259 -S'CustomNonProjectEntity03' -p20260 -ssS'editable' -p20261 -(dp20262 -S'editable' -p20263 -I00 -sS'value' -p20264 -I00 -ssS'unique' -p20265 -(dp20266 -S'editable' -p20267 -I00 -sS'value' -p20268 -I00 -ssS'properties' -p20269 -(dp20270 -S'default_value' -p20271 -(dp20272 -S'editable' -p20273 -I00 -sS'value' -p20274 -NssS'summary_default' -p20275 -(dp20276 -S'editable' -p20277 -I01 -sS'value' -p20278 -S'none' -p20279 -sssS'description' -p20280 -(dp20281 -S'editable' -p20282 -I01 -sS'value' -p20283 -g47 -sssS'updated_at' -p20284 -(dp20285 -S'mandatory' -p20286 -(dp20287 -S'editable' -p20288 -I00 -sS'value' -p20289 -I00 -ssS'name' -p20290 -(dp20291 -S'editable' -p20292 -I01 -sS'value' -p20293 -S'Date Updated' -p20294 -ssS'data_type' -p20295 -(dp20296 -S'editable' -p20297 -I00 -sS'value' -p20298 -S'date_time' -p20299 -ssS'entity_type' -p20300 -(dp20301 -S'editable' -p20302 -I00 -sS'value' -p20303 -S'CustomNonProjectEntity03' -p20304 -ssS'editable' -p20305 -(dp20306 -S'editable' -p20307 -I00 -sS'value' -p20308 -I00 -ssS'unique' -p20309 -(dp20310 -S'editable' -p20311 -I00 -sS'value' -p20312 -I00 -ssS'properties' -p20313 -(dp20314 -S'default_value' -p20315 -(dp20316 -S'editable' -p20317 -I00 -sS'value' -p20318 -NssS'summary_default' -p20319 -(dp20320 -S'editable' -p20321 -I01 -sS'value' -p20322 -S'none' -p20323 -sssS'description' -p20324 -(dp20325 -S'editable' -p20326 -I01 -sS'value' -p20327 -g47 -sssS'created_by' -p20328 -(dp20329 -S'mandatory' -p20330 -(dp20331 -S'editable' -p20332 -I00 -sS'value' -p20333 -I00 -ssS'name' -p20334 -(dp20335 -S'editable' -p20336 -I01 -sS'value' -p20337 -S'Created by' -p20338 -ssS'data_type' -p20339 -(dp20340 -S'editable' -p20341 -I00 -sS'value' -p20342 -S'entity' -p20343 -ssS'entity_type' -p20344 -(dp20345 -S'editable' -p20346 -I00 -sS'value' -p20347 -S'CustomNonProjectEntity03' -p20348 -ssS'editable' -p20349 -(dp20350 -S'editable' -p20351 -I00 -sS'value' -p20352 -I00 -ssS'unique' -p20353 -(dp20354 -S'editable' -p20355 -I00 -sS'value' -p20356 -I00 -ssS'properties' -p20357 -(dp20358 -S'default_value' -p20359 -(dp20360 -S'editable' -p20361 -I00 -sS'value' -p20362 -NssS'summary_default' -p20363 -(dp20364 -S'editable' -p20365 -I01 -sS'value' -p20366 -S'none' -p20367 -ssS'valid_types' -p20368 -(dp20369 -S'editable' -p20370 -I01 -sS'value' -p20371 -(lp20372 -S'HumanUser' -p20373 -aS'ApiUser' -p20374 -asssS'description' -p20375 -(dp20376 -S'editable' -p20377 -I01 -sS'value' -p20378 -g47 -sssS'filmstrip_image' -p20379 -(dp20380 -S'mandatory' -p20381 -(dp20382 -S'editable' -p20383 -I00 -sS'value' -p20384 -I00 -ssS'name' -p20385 -(dp20386 -S'editable' -p20387 -I01 -sS'value' -p20388 -S'Filmstrip Thumbnail' -p20389 -ssS'data_type' -p20390 -(dp20391 -S'editable' -p20392 -I00 -sS'value' -p20393 -S'image' -p20394 -ssS'entity_type' -p20395 -(dp20396 -S'editable' -p20397 -I00 -sS'value' -p20398 -S'CustomNonProjectEntity03' -p20399 -ssS'editable' -p20400 -(dp20401 -S'editable' -p20402 -I00 -sS'value' -p20403 -I01 -ssS'unique' -p20404 -(dp20405 -S'editable' -p20406 -I00 -sS'value' -p20407 -I00 -ssS'properties' -p20408 -(dp20409 -S'default_value' -p20410 -(dp20411 -S'editable' -p20412 -I00 -sS'value' -p20413 -NssS'summary_default' -p20414 -(dp20415 -S'editable' -p20416 -I01 -sS'value' -p20417 -S'none' -p20418 -sssS'description' -p20419 -(dp20420 -S'editable' -p20421 -I01 -sS'value' -p20422 -g47 -sssS'sg_status_list' -p20423 -(dp20424 -S'mandatory' -p20425 -(dp20426 -S'editable' -p20427 -I00 -sS'value' -p20428 -I00 -ssS'name' -p20429 -(dp20430 -S'editable' -p20431 -I01 -sS'value' -p20432 -S'Status' -p20433 -ssS'data_type' -p20434 -(dp20435 -S'editable' -p20436 -I00 -sS'value' -p20437 -S'status_list' -p20438 -ssS'entity_type' -p20439 -(dp20440 -S'editable' -p20441 -I00 -sS'value' -p20442 -S'CustomNonProjectEntity03' -p20443 -ssS'editable' -p20444 -(dp20445 -S'editable' -p20446 -I00 -sS'value' -p20447 -I01 -ssS'unique' -p20448 -(dp20449 -S'editable' -p20450 -I00 -sS'value' -p20451 -I00 -ssS'properties' -p20452 -(dp20453 -S'default_value' -p20454 -(dp20455 -S'editable' -p20456 -I01 -sS'value' -p20457 -S'wtg' -p20458 -ssS'valid_values' -p20459 -(dp20460 -S'editable' -p20461 -I01 -sS'value' -p20462 -(lp20463 -S'cmpt' -p20464 -aS'ip' -p20465 -aS'wtg' -p20466 -assS'summary_default' -p20467 -(dp20468 -S'editable' -p20469 -I01 -sS'value' -p20470 -S'none' -p20471 -sssS'description' -p20472 -(dp20473 -S'editable' -p20474 -I01 -sS'value' -p20475 -g47 -sssS'notes' -p20476 -(dp20477 -S'mandatory' -p20478 -(dp20479 -S'editable' -p20480 -I00 -sS'value' -p20481 -I00 -ssS'name' -p20482 -(dp20483 -S'editable' -p20484 -I01 -sS'value' -p20485 -S'Notes' -p20486 -ssS'data_type' -p20487 -(dp20488 -S'editable' -p20489 -I00 -sS'value' -p20490 -S'multi_entity' -p20491 -ssS'entity_type' -p20492 -(dp20493 -S'editable' -p20494 -I00 -sS'value' -p20495 -S'CustomNonProjectEntity03' -p20496 -ssS'editable' -p20497 -(dp20498 -S'editable' -p20499 -I00 -sS'value' -p20500 -I01 -ssS'unique' -p20501 -(dp20502 -S'editable' -p20503 -I00 -sS'value' -p20504 -I00 -ssS'properties' -p20505 -(dp20506 -S'default_value' -p20507 -(dp20508 -S'editable' -p20509 -I00 -sS'value' -p20510 -NssS'summary_default' -p20511 -(dp20512 -S'editable' -p20513 -I01 -sS'value' -p20514 -S'none' -p20515 -ssS'valid_types' -p20516 -(dp20517 -S'editable' -p20518 -I01 -sS'value' -p20519 -(lp20520 -S'Note' -p20521 -asssS'description' -p20522 -(dp20523 -S'editable' -p20524 -I01 -sS'value' -p20525 -g47 -sssS'image' -p20526 -(dp20527 -S'mandatory' -p20528 -(dp20529 -S'editable' -p20530 -I00 -sS'value' -p20531 -I00 -ssS'name' -p20532 -(dp20533 -S'editable' -p20534 -I01 -sS'value' -p20535 -S'Thumbnail' -p20536 -ssS'data_type' -p20537 -(dp20538 -S'editable' -p20539 -I00 -sS'value' -p20540 -S'image' -p20541 -ssS'entity_type' -p20542 -(dp20543 -S'editable' -p20544 -I00 -sS'value' -p20545 -S'CustomNonProjectEntity03' -p20546 -ssS'editable' -p20547 -(dp20548 -S'editable' -p20549 -I00 -sS'value' -p20550 -I01 -ssS'unique' -p20551 -(dp20552 -S'editable' -p20553 -I00 -sS'value' -p20554 -I00 -ssS'properties' -p20555 -(dp20556 -S'default_value' -p20557 -(dp20558 -S'editable' -p20559 -I00 -sS'value' -p20560 -NssS'summary_default' -p20561 -(dp20562 -S'editable' -p20563 -I01 -sS'value' -p20564 -S'none' -p20565 -sssS'description' -p20566 -(dp20567 -S'editable' -p20568 -I01 -sS'value' -p20569 -g47 -sssS'cached_display_name' -p20570 -(dp20571 -S'mandatory' -p20572 -(dp20573 -S'editable' -p20574 -I00 -sS'value' -p20575 -I00 -ssS'name' -p20576 -(dp20577 -S'editable' -p20578 -I01 -sS'value' -p20579 -S'Cached Display Name' -p20580 -ssS'data_type' -p20581 -(dp20582 -S'editable' -p20583 -I00 -sS'value' -p20584 -S'text' -p20585 -ssS'entity_type' -p20586 -(dp20587 -S'editable' -p20588 -I00 -sS'value' -p20589 -S'CustomNonProjectEntity03' -p20590 -ssS'editable' -p20591 -(dp20592 -S'editable' -p20593 -I00 -sS'value' -p20594 -I01 -ssS'unique' -p20595 -(dp20596 -S'editable' -p20597 -I00 -sS'value' -p20598 -I00 -ssS'properties' -p20599 -(dp20600 -S'default_value' -p20601 -(dp20602 -S'editable' -p20603 -I00 -sS'value' -p20604 -NssS'summary_default' -p20605 -(dp20606 -S'editable' -p20607 -I00 -sS'value' -p20608 -S'none' -p20609 -sssS'description' -p20610 -(dp20611 -S'editable' -p20612 -I01 -sS'value' -p20613 -g47 -sssS'tag_list' -p20614 -(dp20615 -S'mandatory' -p20616 -(dp20617 -S'editable' -p20618 -I00 -sS'value' -p20619 -I00 -ssS'name' -p20620 -(dp20621 -S'editable' -p20622 -I01 -sS'value' -p20623 -S'Tags' -p20624 -ssS'data_type' -p20625 -(dp20626 -S'editable' -p20627 -I00 -sS'value' -p20628 -S'tag_list' -p20629 -ssS'entity_type' -p20630 -(dp20631 -S'editable' -p20632 -I00 -sS'value' -p20633 -S'CustomNonProjectEntity03' -p20634 -ssS'editable' -p20635 -(dp20636 -S'editable' -p20637 -I00 -sS'value' -p20638 -I01 -ssS'unique' -p20639 -(dp20640 -S'editable' -p20641 -I00 -sS'value' -p20642 -I00 -ssS'properties' -p20643 -(dp20644 -S'default_value' -p20645 -(dp20646 -S'editable' -p20647 -I00 -sS'value' -p20648 -NssS'summary_default' -p20649 -(dp20650 -S'editable' -p20651 -I01 -sS'value' -p20652 -S'none' -p20653 -ssS'valid_types' -p20654 -(dp20655 -S'editable' -p20656 -I01 -sS'value' -p20657 -(lp20658 -S'Tag' -p20659 -asssS'description' -p20660 -(dp20661 -S'editable' -p20662 -I01 -sS'value' -p20663 -g47 -sssS'id' -p20664 -(dp20665 -S'mandatory' -p20666 -(dp20667 -S'editable' -p20668 -I00 -sS'value' -p20669 -I00 -ssS'name' -p20670 -(dp20671 -S'editable' -p20672 -I01 -sS'value' -p20673 -S'Id' -p20674 -ssS'data_type' -p20675 -(dp20676 -S'editable' -p20677 -I00 -sS'value' -p20678 -S'number' -p20679 -ssS'entity_type' -p20680 -(dp20681 -S'editable' -p20682 -I00 -sS'value' -p20683 -S'CustomNonProjectEntity03' -p20684 -ssS'editable' -p20685 -(dp20686 -S'editable' -p20687 -I00 -sS'value' -p20688 -I00 -ssS'unique' -p20689 -(dp20690 -S'editable' -p20691 -I00 -sS'value' -p20692 -I00 -ssS'properties' -p20693 -(dp20694 -S'default_value' -p20695 -(dp20696 -S'editable' -p20697 -I00 -sS'value' -p20698 -NssS'summary_default' -p20699 -(dp20700 -S'editable' -p20701 -I01 -sS'value' -p20702 -S'none' -p20703 -sssS'description' -p20704 -(dp20705 -S'editable' -p20706 -I01 -sS'value' -p20707 -g47 -sssS'updated_by' -p20708 -(dp20709 -S'mandatory' -p20710 -(dp20711 -S'editable' -p20712 -I00 -sS'value' -p20713 -I00 -ssS'name' -p20714 -(dp20715 -S'editable' -p20716 -I01 -sS'value' -p20717 -S'Updated by' -p20718 -ssS'data_type' -p20719 -(dp20720 -S'editable' -p20721 -I00 -sS'value' -p20722 -S'entity' -p20723 -ssS'entity_type' -p20724 -(dp20725 -S'editable' -p20726 -I00 -sS'value' -p20727 -S'CustomNonProjectEntity03' -p20728 -ssS'editable' -p20729 -(dp20730 -S'editable' -p20731 -I00 -sS'value' -p20732 -I00 -ssS'unique' -p20733 -(dp20734 -S'editable' -p20735 -I00 -sS'value' -p20736 -I00 -ssS'properties' -p20737 -(dp20738 -S'default_value' -p20739 -(dp20740 -S'editable' -p20741 -I00 -sS'value' -p20742 -NssS'summary_default' -p20743 -(dp20744 -S'editable' -p20745 -I01 -sS'value' -p20746 -S'none' -p20747 -ssS'valid_types' -p20748 -(dp20749 -S'editable' -p20750 -I01 -sS'value' -p20751 -(lp20752 -S'HumanUser' -p20753 -aS'ApiUser' -p20754 -asssS'description' -p20755 -(dp20756 -S'editable' -p20757 -I01 -sS'value' -p20758 -g47 -ssssS'LaunchShotConnection' -p20759 -(dp20760 -S'cached_display_name' -p20761 -(dp20762 -S'mandatory' -p20763 -(dp20764 -S'editable' -p20765 -I00 -sS'value' -p20766 -I00 -ssS'name' -p20767 -(dp20768 -S'editable' -p20769 -I01 -sS'value' -p20770 -S'Cached Display Name' -p20771 -ssS'data_type' -p20772 -(dp20773 -S'editable' -p20774 -I00 -sS'value' -p20775 -S'text' -p20776 -ssS'entity_type' -p20777 -(dp20778 -S'editable' -p20779 -I00 -sS'value' -p20780 -S'LaunchShotConnection' -p20781 -ssS'editable' -p20782 -(dp20783 -S'editable' -p20784 -I00 -sS'value' -p20785 -I01 -ssS'unique' -p20786 -(dp20787 -S'editable' -p20788 -I00 -sS'value' -p20789 -I00 -ssS'properties' -p20790 -(dp20791 -S'default_value' -p20792 -(dp20793 -S'editable' -p20794 -I00 -sS'value' -p20795 -NssS'summary_default' -p20796 -(dp20797 -S'editable' -p20798 -I00 -sS'value' -p20799 -S'none' -p20800 -sssS'description' -p20801 -(dp20802 -S'editable' -p20803 -I01 -sS'value' -p20804 -g47 -sssS'shot' -p20805 -(dp20806 -S'mandatory' -p20807 -(dp20808 -S'editable' -p20809 -I00 -sS'value' -p20810 -I00 -ssS'name' -p20811 -(dp20812 -S'editable' -p20813 -I01 -sS'value' -p20814 -S'Shot' -p20815 -ssS'data_type' -p20816 -(dp20817 -S'editable' -p20818 -I00 -sS'value' -p20819 -S'entity' -p20820 -ssS'entity_type' -p20821 -(dp20822 -S'editable' -p20823 -I00 -sS'value' -p20824 -S'LaunchShotConnection' -p20825 -ssS'editable' -p20826 -(dp20827 -S'editable' -p20828 -I00 -sS'value' -p20829 -I00 -ssS'unique' -p20830 -(dp20831 -S'editable' -p20832 -I00 -sS'value' -p20833 -I00 -ssS'properties' -p20834 -(dp20835 -S'default_value' -p20836 -(dp20837 -S'editable' -p20838 -I00 -sS'value' -p20839 -NssS'summary_default' -p20840 -(dp20841 -S'editable' -p20842 -I00 -sS'value' -p20843 -S'none' -p20844 -ssS'valid_types' -p20845 -(dp20846 -S'editable' -p20847 -I00 -sS'value' -p20848 -(lp20849 -S'Shot' -p20850 -asssS'description' -p20851 -(dp20852 -S'editable' -p20853 -I01 -sS'value' -p20854 -g47 -sssS'id' -p20855 -(dp20856 -S'mandatory' -p20857 -(dp20858 -S'editable' -p20859 -I00 -sS'value' -p20860 -I01 -ssS'name' -p20861 -(dp20862 -S'editable' -p20863 -I01 -sS'value' -p20864 -S'Id' -p20865 -ssS'data_type' -p20866 -(dp20867 -S'editable' -p20868 -I00 -sS'value' -p20869 -S'number' -p20870 -ssS'entity_type' -p20871 -(dp20872 -S'editable' -p20873 -I00 -sS'value' -p20874 -S'LaunchShotConnection' -p20875 -ssS'editable' -p20876 -(dp20877 -S'editable' -p20878 -I00 -sS'value' -p20879 -I00 -ssS'unique' -p20880 -(dp20881 -S'editable' -p20882 -I00 -sS'value' -p20883 -I00 -ssS'properties' -p20884 -(dp20885 -S'default_value' -p20886 -(dp20887 -S'editable' -p20888 -I00 -sS'value' -p20889 -NssS'summary_default' -p20890 -(dp20891 -S'editable' -p20892 -I00 -sS'value' -p20893 -S'none' -p20894 -sssS'description' -p20895 -(dp20896 -S'editable' -p20897 -I01 -sS'value' -p20898 -g47 -sssS'launch' -p20899 -(dp20900 -S'mandatory' -p20901 -(dp20902 -S'editable' -p20903 -I00 -sS'value' -p20904 -I00 -ssS'name' -p20905 -(dp20906 -S'editable' -p20907 -I01 -sS'value' -p20908 -S'Launch' -p20909 -ssS'data_type' -p20910 -(dp20911 -S'editable' -p20912 -I00 -sS'value' -p20913 -S'entity' -p20914 -ssS'entity_type' -p20915 -(dp20916 -S'editable' -p20917 -I00 -sS'value' -p20918 -S'LaunchShotConnection' -p20919 -ssS'editable' -p20920 -(dp20921 -S'editable' -p20922 -I00 -sS'value' -p20923 -I00 -ssS'unique' -p20924 -(dp20925 -S'editable' -p20926 -I00 -sS'value' -p20927 -I00 -ssS'properties' -p20928 -(dp20929 -S'default_value' -p20930 -(dp20931 -S'editable' -p20932 -I00 -sS'value' -p20933 -NssS'summary_default' -p20934 -(dp20935 -S'editable' -p20936 -I00 -sS'value' -p20937 -S'none' -p20938 -ssS'valid_types' -p20939 -(dp20940 -S'editable' -p20941 -I00 -sS'value' -p20942 -(lp20943 -S'Launch' -p20944 -asssS'description' -p20945 -(dp20946 -S'editable' -p20947 -I01 -sS'value' -p20948 -g47 -ssssS'ShotShotConnection' -p20949 -(dp20950 -S'shot' -p20951 -(dp20952 -S'mandatory' -p20953 -(dp20954 -S'editable' -p20955 -I00 -sS'value' -p20956 -I00 -ssS'name' -p20957 -(dp20958 -S'editable' -p20959 -I01 -sS'value' -p20960 -S'Shot' -p20961 -ssS'data_type' -p20962 -(dp20963 -S'editable' -p20964 -I00 -sS'value' -p20965 -S'entity' -p20966 -ssS'entity_type' -p20967 -(dp20968 -S'editable' -p20969 -I00 -sS'value' -p20970 -S'ShotShotConnection' -p20971 -ssS'editable' -p20972 -(dp20973 -S'editable' -p20974 -I00 -sS'value' -p20975 -I00 -ssS'unique' -p20976 -(dp20977 -S'editable' -p20978 -I00 -sS'value' -p20979 -I00 -ssS'properties' -p20980 -(dp20981 -S'default_value' -p20982 -(dp20983 -S'editable' -p20984 -I00 -sS'value' -p20985 -NssS'summary_default' -p20986 -(dp20987 -S'editable' -p20988 -I00 -sS'value' -p20989 -S'none' -p20990 -ssS'valid_types' -p20991 -(dp20992 -S'editable' -p20993 -I00 -sS'value' -p20994 -(lp20995 -S'Shot' -p20996 -asssS'description' -p20997 -(dp20998 -S'editable' -p20999 -I01 -sS'value' -p21000 -g47 -sssS'cached_display_name' -p21001 -(dp21002 -S'mandatory' -p21003 -(dp21004 -S'editable' -p21005 -I00 -sS'value' -p21006 -I00 -ssS'name' -p21007 -(dp21008 -S'editable' -p21009 -I01 -sS'value' -p21010 -S'Cached Display Name' -p21011 -ssS'data_type' -p21012 -(dp21013 -S'editable' -p21014 -I00 -sS'value' -p21015 -S'text' -p21016 -ssS'entity_type' -p21017 -(dp21018 -S'editable' -p21019 -I00 -sS'value' -p21020 -S'ShotShotConnection' -p21021 -ssS'editable' -p21022 -(dp21023 -S'editable' -p21024 -I00 -sS'value' -p21025 -I01 -ssS'unique' -p21026 -(dp21027 -S'editable' -p21028 -I00 -sS'value' -p21029 -I00 -ssS'properties' -p21030 -(dp21031 -S'default_value' -p21032 -(dp21033 -S'editable' -p21034 -I00 -sS'value' -p21035 -NssS'summary_default' -p21036 -(dp21037 -S'editable' -p21038 -I00 -sS'value' -p21039 -S'none' -p21040 -sssS'description' -p21041 -(dp21042 -S'editable' -p21043 -I01 -sS'value' -p21044 -g47 -sssS'parent_shot' -p21045 -(dp21046 -S'mandatory' -p21047 -(dp21048 -S'editable' -p21049 -I00 -sS'value' -p21050 -I00 -ssS'name' -p21051 -(dp21052 -S'editable' -p21053 -I01 -sS'value' -p21054 -S'Shot' -p21055 -ssS'data_type' -p21056 -(dp21057 -S'editable' -p21058 -I00 -sS'value' -p21059 -S'entity' -p21060 -ssS'entity_type' -p21061 -(dp21062 -S'editable' -p21063 -I00 -sS'value' -p21064 -S'ShotShotConnection' -p21065 -ssS'editable' -p21066 -(dp21067 -S'editable' -p21068 -I00 -sS'value' -p21069 -I00 -ssS'unique' -p21070 -(dp21071 -S'editable' -p21072 -I00 -sS'value' -p21073 -I00 -ssS'properties' -p21074 -(dp21075 -S'default_value' -p21076 -(dp21077 -S'editable' -p21078 -I00 -sS'value' -p21079 -NssS'summary_default' -p21080 -(dp21081 -S'editable' -p21082 -I00 -sS'value' -p21083 -S'none' -p21084 -ssS'valid_types' -p21085 -(dp21086 -S'editable' -p21087 -I00 -sS'value' -p21088 -(lp21089 -S'Shot' -p21090 -asssS'description' -p21091 -(dp21092 -S'editable' -p21093 -I01 -sS'value' -p21094 -g47 -sssS'id' -p21095 -(dp21096 -S'mandatory' -p21097 -(dp21098 -S'editable' -p21099 -I00 -sS'value' -p21100 -I01 -ssS'name' -p21101 -(dp21102 -S'editable' -p21103 -I01 -sS'value' -p21104 -S'Id' -p21105 -ssS'data_type' -p21106 -(dp21107 -S'editable' -p21108 -I00 -sS'value' -p21109 -S'number' -p21110 -ssS'entity_type' -p21111 -(dp21112 -S'editable' -p21113 -I00 -sS'value' -p21114 -S'ShotShotConnection' -p21115 -ssS'editable' -p21116 -(dp21117 -S'editable' -p21118 -I00 -sS'value' -p21119 -I00 -ssS'unique' -p21120 -(dp21121 -S'editable' -p21122 -I00 -sS'value' -p21123 -I00 -ssS'properties' -p21124 -(dp21125 -S'default_value' -p21126 -(dp21127 -S'editable' -p21128 -I00 -sS'value' -p21129 -NssS'summary_default' -p21130 -(dp21131 -S'editable' -p21132 -I00 -sS'value' -p21133 -S'none' -p21134 -sssS'description' -p21135 -(dp21136 -S'editable' -p21137 -I01 -sS'value' -p21138 -g47 -ssssS'PerformerRoutineConnection' -p21139 -(dp21140 -S'cached_display_name' -p21141 -(dp21142 -S'mandatory' -p21143 -(dp21144 -S'editable' -p21145 -I00 -sS'value' -p21146 -I00 -ssS'name' -p21147 -(dp21148 -S'editable' -p21149 -I01 -sS'value' -p21150 -S'Cached Display Name' -p21151 -ssS'data_type' -p21152 -(dp21153 -S'editable' -p21154 -I00 -sS'value' -p21155 -S'text' -p21156 -ssS'entity_type' -p21157 -(dp21158 -S'editable' -p21159 -I00 -sS'value' -p21160 -S'PerformerRoutineConnection' -p21161 -ssS'editable' -p21162 -(dp21163 -S'editable' -p21164 -I00 -sS'value' -p21165 -I01 -ssS'unique' -p21166 -(dp21167 -S'editable' -p21168 -I00 -sS'value' -p21169 -I00 -ssS'properties' -p21170 -(dp21171 -S'default_value' -p21172 -(dp21173 -S'editable' -p21174 -I00 -sS'value' -p21175 -NssS'summary_default' -p21176 -(dp21177 -S'editable' -p21178 -I00 -sS'value' -p21179 -S'none' -p21180 -sssS'description' -p21181 -(dp21182 -S'editable' -p21183 -I01 -sS'value' -p21184 -g47 -sssS'performer' -p21185 -(dp21186 -S'mandatory' -p21187 -(dp21188 -S'editable' -p21189 -I00 -sS'value' -p21190 -I00 -ssS'name' -p21191 -(dp21192 -S'editable' -p21193 -I01 -sS'value' -p21194 -S'Performer' -p21195 -ssS'data_type' -p21196 -(dp21197 -S'editable' -p21198 -I00 -sS'value' -p21199 -S'entity' -p21200 -ssS'entity_type' -p21201 -(dp21202 -S'editable' -p21203 -I00 -sS'value' -p21204 -S'PerformerRoutineConnection' -p21205 -ssS'editable' -p21206 -(dp21207 -S'editable' -p21208 -I00 -sS'value' -p21209 -I00 -ssS'unique' -p21210 -(dp21211 -S'editable' -p21212 -I00 -sS'value' -p21213 -I00 -ssS'properties' -p21214 -(dp21215 -S'default_value' -p21216 -(dp21217 -S'editable' -p21218 -I00 -sS'value' -p21219 -NssS'summary_default' -p21220 -(dp21221 -S'editable' -p21222 -I00 -sS'value' -p21223 -S'none' -p21224 -ssS'valid_types' -p21225 -(dp21226 -S'editable' -p21227 -I00 -sS'value' -p21228 -(lp21229 -S'Performer' -p21230 -asssS'description' -p21231 -(dp21232 -S'editable' -p21233 -I01 -sS'value' -p21234 -g47 -sssS'id' -p21235 -(dp21236 -S'mandatory' -p21237 -(dp21238 -S'editable' -p21239 -I00 -sS'value' -p21240 -I01 -ssS'name' -p21241 -(dp21242 -S'editable' -p21243 -I01 -sS'value' -p21244 -S'Id' -p21245 -ssS'data_type' -p21246 -(dp21247 -S'editable' -p21248 -I00 -sS'value' -p21249 -S'number' -p21250 -ssS'entity_type' -p21251 -(dp21252 -S'editable' -p21253 -I00 -sS'value' -p21254 -S'PerformerRoutineConnection' -p21255 -ssS'editable' -p21256 -(dp21257 -S'editable' -p21258 -I00 -sS'value' -p21259 -I00 -ssS'unique' -p21260 -(dp21261 -S'editable' -p21262 -I00 -sS'value' -p21263 -I00 -ssS'properties' -p21264 -(dp21265 -S'default_value' -p21266 -(dp21267 -S'editable' -p21268 -I00 -sS'value' -p21269 -NssS'summary_default' -p21270 -(dp21271 -S'editable' -p21272 -I00 -sS'value' -p21273 -S'none' -p21274 -sssS'description' -p21275 -(dp21276 -S'editable' -p21277 -I01 -sS'value' -p21278 -g47 -sssS'routine' -p21279 -(dp21280 -S'mandatory' -p21281 -(dp21282 -S'editable' -p21283 -I00 -sS'value' -p21284 -I00 -ssS'name' -p21285 -(dp21286 -S'editable' -p21287 -I01 -sS'value' -p21288 -S'Mocap Routine' -p21289 -ssS'data_type' -p21290 -(dp21291 -S'editable' -p21292 -I00 -sS'value' -p21293 -S'entity' -p21294 -ssS'entity_type' -p21295 -(dp21296 -S'editable' -p21297 -I00 -sS'value' -p21298 -S'PerformerRoutineConnection' -p21299 -ssS'editable' -p21300 -(dp21301 -S'editable' -p21302 -I00 -sS'value' -p21303 -I00 -ssS'unique' -p21304 -(dp21305 -S'editable' -p21306 -I00 -sS'value' -p21307 -I00 -ssS'properties' -p21308 -(dp21309 -S'default_value' -p21310 -(dp21311 -S'editable' -p21312 -I00 -sS'value' -p21313 -NssS'summary_default' -p21314 -(dp21315 -S'editable' -p21316 -I00 -sS'value' -p21317 -S'none' -p21318 -ssS'valid_types' -p21319 -(dp21320 -S'editable' -p21321 -I00 -sS'value' -p21322 -(lp21323 -S'Routine' -p21324 -asssS'description' -p21325 -(dp21326 -S'editable' -p21327 -I01 -sS'value' -p21328 -g47 -ssssS'PublishedFileType' -p21329 -(dp21330 -S'code' -p21331 -(dp21332 -S'mandatory' -p21333 -(dp21334 -S'editable' -p21335 -I00 -sS'value' -p21336 -I01 -ssS'name' -p21337 -(dp21338 -S'editable' -p21339 -I01 -sS'value' -p21340 -S'Published File Type Name' -p21341 -ssS'data_type' -p21342 -(dp21343 -S'editable' -p21344 -I00 -sS'value' -p21345 -S'text' -p21346 -ssS'entity_type' -p21347 -(dp21348 -S'editable' -p21349 -I00 -sS'value' -p21350 -S'PublishedFileType' -p21351 -ssS'editable' -p21352 -(dp21353 -S'editable' -p21354 -I00 -sS'value' -p21355 -I01 -ssS'unique' -p21356 -(dp21357 -S'editable' -p21358 -I00 -sS'value' -p21359 -I00 -ssS'properties' -p21360 -(dp21361 -S'default_value' -p21362 -(dp21363 -S'editable' -p21364 -I00 -sS'value' -p21365 -NssS'summary_default' -p21366 -(dp21367 -S'editable' -p21368 -I01 -sS'value' -p21369 -S'none' -p21370 -sssS'description' -p21371 -(dp21372 -S'editable' -p21373 -I01 -sS'value' -p21374 -g47 -sssS'description' -p21375 -(dp21376 -S'mandatory' -p21377 -(dp21378 -S'editable' -p21379 -I00 -sS'value' -p21380 -I00 -ssS'name' -p21381 -(dp21382 -S'editable' -p21383 -I01 -sS'value' -p21384 -S'Description' -p21385 -ssS'data_type' -p21386 -(dp21387 -S'editable' -p21388 -I00 -sS'value' -p21389 -S'text' -p21390 -ssS'entity_type' -p21391 -(dp21392 -S'editable' -p21393 -I00 -sS'value' -p21394 -S'PublishedFileType' -p21395 -ssS'editable' -p21396 -(dp21397 -S'editable' -p21398 -I00 -sS'value' -p21399 -I01 -ssS'unique' -p21400 -(dp21401 -S'editable' -p21402 -I00 -sS'value' -p21403 -I00 -ssS'properties' -p21404 -(dp21405 -S'default_value' -p21406 -(dp21407 -S'editable' -p21408 -I00 -sS'value' -p21409 -NssS'summary_default' -p21410 -(dp21411 -S'editable' -p21412 -I01 -sS'value' -p21413 -S'none' -p21414 -sssS'description' -p21415 -(dp21416 -S'editable' -p21417 -I01 -sS'value' -p21418 -g47 -sssS'short_name' -p21419 -(dp21420 -S'mandatory' -p21421 -(dp21422 -S'editable' -p21423 -I00 -sS'value' -p21424 -I00 -ssS'name' -p21425 -(dp21426 -S'editable' -p21427 -I01 -sS'value' -p21428 -S'Short Name' -p21429 -ssS'data_type' -p21430 -(dp21431 -S'editable' -p21432 -I00 -sS'value' -p21433 -S'text' -p21434 -ssS'entity_type' -p21435 -(dp21436 -S'editable' -p21437 -I00 -sS'value' -p21438 -S'PublishedFileType' -p21439 -ssS'editable' -p21440 -(dp21441 -S'editable' -p21442 -I00 -sS'value' -p21443 -I01 -ssS'unique' -p21444 -(dp21445 -S'editable' -p21446 -I00 -sS'value' -p21447 -I00 -ssS'properties' -p21448 -(dp21449 -S'default_value' -p21450 -(dp21451 -S'editable' -p21452 -I00 -sS'value' -p21453 -NssS'summary_default' -p21454 -(dp21455 -S'editable' -p21456 -I01 -sS'value' -p21457 -S'none' -p21458 -sssS'description' -p21459 -(dp21460 -S'editable' -p21461 -I01 -sS'value' -p21462 -g47 -sssS'created_at' -p21463 -(dp21464 -S'mandatory' -p21465 -(dp21466 -S'editable' -p21467 -I00 -sS'value' -p21468 -I00 -ssS'name' -p21469 -(dp21470 -S'editable' -p21471 -I01 -sS'value' -p21472 -S'Date Created' -p21473 -ssS'data_type' -p21474 -(dp21475 -S'editable' -p21476 -I00 -sS'value' -p21477 -S'date_time' -p21478 -ssS'entity_type' -p21479 -(dp21480 -S'editable' -p21481 -I00 -sS'value' -p21482 -S'PublishedFileType' -p21483 -ssS'editable' -p21484 -(dp21485 -S'editable' -p21486 -I00 -sS'value' -p21487 -I00 -ssS'unique' -p21488 -(dp21489 -S'editable' -p21490 -I00 -sS'value' -p21491 -I00 -ssS'properties' -p21492 -(dp21493 -S'default_value' -p21494 -(dp21495 -S'editable' -p21496 -I00 -sS'value' -p21497 -NssS'summary_default' -p21498 -(dp21499 -S'editable' -p21500 -I01 -sS'value' -p21501 -S'none' -p21502 -sssS'description' -p21503 -(dp21504 -S'editable' -p21505 -I01 -sS'value' -p21506 -g47 -sssS'updated_at' -p21507 -(dp21508 -S'mandatory' -p21509 -(dp21510 -S'editable' -p21511 -I00 -sS'value' -p21512 -I00 -ssS'name' -p21513 -(dp21514 -S'editable' -p21515 -I01 -sS'value' -p21516 -S'Date Updated' -p21517 -ssS'data_type' -p21518 -(dp21519 -S'editable' -p21520 -I00 -sS'value' -p21521 -S'date_time' -p21522 -ssS'entity_type' -p21523 -(dp21524 -S'editable' -p21525 -I00 -sS'value' -p21526 -S'PublishedFileType' -p21527 -ssS'editable' -p21528 -(dp21529 -S'editable' -p21530 -I00 -sS'value' -p21531 -I00 -ssS'unique' -p21532 -(dp21533 -S'editable' -p21534 -I00 -sS'value' -p21535 -I00 -ssS'properties' -p21536 -(dp21537 -S'default_value' -p21538 -(dp21539 -S'editable' -p21540 -I00 -sS'value' -p21541 -NssS'summary_default' -p21542 -(dp21543 -S'editable' -p21544 -I01 -sS'value' -p21545 -S'none' -p21546 -sssS'description' -p21547 -(dp21548 -S'editable' -p21549 -I01 -sS'value' -p21550 -g47 -sssS'created_by' -p21551 -(dp21552 -S'mandatory' -p21553 -(dp21554 -S'editable' -p21555 -I00 -sS'value' -p21556 -I00 -ssS'name' -p21557 -(dp21558 -S'editable' -p21559 -I01 -sS'value' -p21560 -S'Created by' -p21561 -ssS'data_type' -p21562 -(dp21563 -S'editable' -p21564 -I00 -sS'value' -p21565 -S'entity' -p21566 -ssS'entity_type' -p21567 -(dp21568 -S'editable' -p21569 -I00 -sS'value' -p21570 -S'PublishedFileType' -p21571 -ssS'editable' -p21572 -(dp21573 -S'editable' -p21574 -I00 -sS'value' -p21575 -I00 -ssS'unique' -p21576 -(dp21577 -S'editable' -p21578 -I00 -sS'value' -p21579 -I00 -ssS'properties' -p21580 -(dp21581 -S'default_value' -p21582 -(dp21583 -S'editable' -p21584 -I00 -sS'value' -p21585 -NssS'summary_default' -p21586 -(dp21587 -S'editable' -p21588 -I01 -sS'value' -p21589 -S'none' -p21590 -ssS'valid_types' -p21591 -(dp21592 -S'editable' -p21593 -I01 -sS'value' -p21594 -(lp21595 -S'HumanUser' -p21596 -aS'ApiUser' -p21597 -asssS'description' -p21598 -(dp21599 -S'editable' -p21600 -I01 -sS'value' -p21601 -g47 -sssS'sg_status_list' -p21602 -(dp21603 -S'mandatory' -p21604 -(dp21605 -S'editable' -p21606 -I00 -sS'value' -p21607 -I00 -ssS'name' -p21608 -(dp21609 -S'editable' -p21610 -I01 -sS'value' -p21611 -S'Status' -p21612 -ssS'data_type' -p21613 -(dp21614 -S'editable' -p21615 -I00 -sS'value' -p21616 -S'status_list' -p21617 -ssS'entity_type' -p21618 -(dp21619 -S'editable' -p21620 -I00 -sS'value' -p21621 -S'PublishedFileType' -p21622 -ssS'editable' -p21623 -(dp21624 -S'editable' -p21625 -I00 -sS'value' -p21626 -I01 -ssS'unique' -p21627 -(dp21628 -S'editable' -p21629 -I00 -sS'value' -p21630 -I00 -ssS'properties' -p21631 -(dp21632 -S'default_value' -p21633 -(dp21634 -S'editable' -p21635 -I01 -sS'value' -p21636 -S'wtg' -p21637 -ssS'valid_values' -p21638 -(dp21639 -S'editable' -p21640 -I01 -sS'value' -p21641 -(lp21642 -S'wtg' -p21643 -aS'ip' -p21644 -aS'cmpt' -p21645 -assS'summary_default' -p21646 -(dp21647 -S'editable' -p21648 -I01 -sS'value' -p21649 -S'none' -p21650 -sssS'description' -p21651 -(dp21652 -S'editable' -p21653 -I01 -sS'value' -p21654 -g47 -sssS'image' -p21655 -(dp21656 -S'mandatory' -p21657 -(dp21658 -S'editable' -p21659 -I00 -sS'value' -p21660 -I00 -ssS'name' -p21661 -(dp21662 -S'editable' -p21663 -I01 -sS'value' -p21664 -S'Thumbnail' -p21665 -ssS'data_type' -p21666 -(dp21667 -S'editable' -p21668 -I00 -sS'value' -p21669 -S'image' -p21670 -ssS'entity_type' -p21671 -(dp21672 -S'editable' -p21673 -I00 -sS'value' -p21674 -S'PublishedFileType' -p21675 -ssS'editable' -p21676 -(dp21677 -S'editable' -p21678 -I00 -sS'value' -p21679 -I01 -ssS'unique' -p21680 -(dp21681 -S'editable' -p21682 -I00 -sS'value' -p21683 -I00 -ssS'properties' -p21684 -(dp21685 -S'default_value' -p21686 -(dp21687 -S'editable' -p21688 -I00 -sS'value' -p21689 -NssS'summary_default' -p21690 -(dp21691 -S'editable' -p21692 -I01 -sS'value' -p21693 -S'none' -p21694 -sssS'description' -p21695 -(dp21696 -S'editable' -p21697 -I01 -sS'value' -p21698 -g47 -sssS'cached_display_name' -p21699 -(dp21700 -S'mandatory' -p21701 -(dp21702 -S'editable' -p21703 -I00 -sS'value' -p21704 -I00 -ssS'name' -p21705 -(dp21706 -S'editable' -p21707 -I01 -sS'value' -p21708 -S'Cached Display Name' -p21709 -ssS'data_type' -p21710 -(dp21711 -S'editable' -p21712 -I00 -sS'value' -p21713 -S'text' -p21714 -ssS'entity_type' -p21715 -(dp21716 -S'editable' -p21717 -I00 -sS'value' -p21718 -S'PublishedFileType' -p21719 -ssS'editable' -p21720 -(dp21721 -S'editable' -p21722 -I00 -sS'value' -p21723 -I01 -ssS'unique' -p21724 -(dp21725 -S'editable' -p21726 -I00 -sS'value' -p21727 -I00 -ssS'properties' -p21728 -(dp21729 -S'default_value' -p21730 -(dp21731 -S'editable' -p21732 -I00 -sS'value' -p21733 -NssS'summary_default' -p21734 -(dp21735 -S'editable' -p21736 -I00 -sS'value' -p21737 -S'none' -p21738 -sssS'description' -p21739 -(dp21740 -S'editable' -p21741 -I01 -sS'value' -p21742 -g47 -sssS'tag_list' -p21743 -(dp21744 -S'mandatory' -p21745 -(dp21746 -S'editable' -p21747 -I00 -sS'value' -p21748 -I00 -ssS'name' -p21749 -(dp21750 -S'editable' -p21751 -I01 -sS'value' -p21752 -S'Tags' -p21753 -ssS'data_type' -p21754 -(dp21755 -S'editable' -p21756 -I00 -sS'value' -p21757 -S'tag_list' -p21758 -ssS'entity_type' -p21759 -(dp21760 -S'editable' -p21761 -I00 -sS'value' -p21762 -S'PublishedFileType' -p21763 -ssS'editable' -p21764 -(dp21765 -S'editable' -p21766 -I00 -sS'value' -p21767 -I01 -ssS'unique' -p21768 -(dp21769 -S'editable' -p21770 -I00 -sS'value' -p21771 -I00 -ssS'properties' -p21772 -(dp21773 -S'default_value' -p21774 -(dp21775 -S'editable' -p21776 -I00 -sS'value' -p21777 -NssS'summary_default' -p21778 -(dp21779 -S'editable' -p21780 -I01 -sS'value' -p21781 -S'none' -p21782 -ssS'valid_types' -p21783 -(dp21784 -S'editable' -p21785 -I01 -sS'value' -p21786 -(lp21787 -S'Tag' -p21788 -asssS'description' -p21789 -(dp21790 -S'editable' -p21791 -I01 -sS'value' -p21792 -g47 -sssS'id' -p21793 -(dp21794 -S'mandatory' -p21795 -(dp21796 -S'editable' -p21797 -I00 -sS'value' -p21798 -I00 -ssS'name' -p21799 -(dp21800 -S'editable' -p21801 -I01 -sS'value' -p21802 -S'Id' -p21803 -ssS'data_type' -p21804 -(dp21805 -S'editable' -p21806 -I00 -sS'value' -p21807 -S'number' -p21808 -ssS'entity_type' -p21809 -(dp21810 -S'editable' -p21811 -I00 -sS'value' -p21812 -S'PublishedFileType' -p21813 -ssS'editable' -p21814 -(dp21815 -S'editable' -p21816 -I00 -sS'value' -p21817 -I00 -ssS'unique' -p21818 -(dp21819 -S'editable' -p21820 -I00 -sS'value' -p21821 -I00 -ssS'properties' -p21822 -(dp21823 -S'default_value' -p21824 -(dp21825 -S'editable' -p21826 -I00 -sS'value' -p21827 -NssS'summary_default' -p21828 -(dp21829 -S'editable' -p21830 -I01 -sS'value' -p21831 -S'none' -p21832 -sssS'description' -p21833 -(dp21834 -S'editable' -p21835 -I01 -sS'value' -p21836 -g47 -sssS'updated_by' -p21837 -(dp21838 -S'mandatory' -p21839 -(dp21840 -S'editable' -p21841 -I00 -sS'value' -p21842 -I00 -ssS'name' -p21843 -(dp21844 -S'editable' -p21845 -I01 -sS'value' -p21846 -S'Updated by' -p21847 -ssS'data_type' -p21848 -(dp21849 -S'editable' -p21850 -I00 -sS'value' -p21851 -S'entity' -p21852 -ssS'entity_type' -p21853 -(dp21854 -S'editable' -p21855 -I00 -sS'value' -p21856 -S'PublishedFileType' -p21857 -ssS'editable' -p21858 -(dp21859 -S'editable' -p21860 -I00 -sS'value' -p21861 -I00 -ssS'unique' -p21862 -(dp21863 -S'editable' -p21864 -I00 -sS'value' -p21865 -I00 -ssS'properties' -p21866 -(dp21867 -S'default_value' -p21868 -(dp21869 -S'editable' -p21870 -I00 -sS'value' -p21871 -NssS'summary_default' -p21872 -(dp21873 -S'editable' -p21874 -I01 -sS'value' -p21875 -S'none' -p21876 -ssS'valid_types' -p21877 -(dp21878 -S'editable' -p21879 -I01 -sS'value' -p21880 -(lp21881 -S'HumanUser' -p21882 -aS'ApiUser' -p21883 -asssS'description' -p21884 -(dp21885 -S'editable' -p21886 -I01 -sS'value' -p21887 -g47 -ssssS'Element' -p21888 -(dp21889 -S'sg_element_type' -p21890 -(dp21891 -S'mandatory' -p21892 -(dp21893 -S'editable' -p21894 -I00 -sS'value' -p21895 -I00 -ssS'name' -p21896 -(dp21897 -S'editable' -p21898 -I01 -sS'value' -p21899 -S'Type' -p21900 -ssS'data_type' -p21901 -(dp21902 -S'editable' -p21903 -I00 -sS'value' -p21904 -S'list' -p21905 -ssS'entity_type' -p21906 -(dp21907 -S'editable' -p21908 -I00 -sS'value' -p21909 -S'Element' -p21910 -ssS'editable' -p21911 -(dp21912 -S'editable' -p21913 -I00 -sS'value' -p21914 -I01 -ssS'unique' -p21915 -(dp21916 -S'editable' -p21917 -I00 -sS'value' -p21918 -I00 -ssS'properties' -p21919 -(dp21920 -S'default_value' -p21921 -(dp21922 -S'editable' -p21923 -I00 -sS'value' -p21924 -NssS'valid_values' -p21925 -(dp21926 -S'editable' -p21927 -I01 -sS'value' -p21928 -(lp21929 -ssS'summary_default' -p21930 -(dp21931 -S'editable' -p21932 -I01 -sS'value' -p21933 -S'none' -p21934 -sssS'description' -p21935 -(dp21936 -S'editable' -p21937 -I01 -sS'value' -p21938 -g47 -sssS'open_notes_count' -p21939 -(dp21940 -S'mandatory' -p21941 -(dp21942 -S'editable' -p21943 -I00 -sS'value' -p21944 -I00 -ssS'name' -p21945 -(dp21946 -S'editable' -p21947 -I01 -sS'value' -p21948 -S'Open Notes Count' -p21949 -ssS'data_type' -p21950 -(dp21951 -S'editable' -p21952 -I00 -sS'value' -p21953 -S'text' -p21954 -ssS'entity_type' -p21955 -(dp21956 -S'editable' -p21957 -I00 -sS'value' -p21958 -S'Element' -p21959 -ssS'editable' -p21960 -(dp21961 -S'editable' -p21962 -I00 -sS'value' -p21963 -I00 -ssS'unique' -p21964 -(dp21965 -S'editable' -p21966 -I00 -sS'value' -p21967 -I00 -ssS'properties' -p21968 -(dp21969 -S'default_value' -p21970 -(dp21971 -S'editable' -p21972 -I00 -sS'value' -p21973 -NssS'summary_default' -p21974 -(dp21975 -S'editable' -p21976 -I01 -sS'value' -p21977 -S'none' -p21978 -sssS'description' -p21979 -(dp21980 -S'editable' -p21981 -I01 -sS'value' -p21982 -g47 -sssS'code' -p21983 -(dp21984 -S'mandatory' -p21985 -(dp21986 -S'editable' -p21987 -I00 -sS'value' -p21988 -I01 -ssS'name' -p21989 -(dp21990 -S'editable' -p21991 -I01 -sS'value' -p21992 -S'Element Name' -p21993 -ssS'data_type' -p21994 -(dp21995 -S'editable' -p21996 -I00 -sS'value' -p21997 -S'text' -p21998 -ssS'entity_type' -p21999 -(dp22000 -S'editable' -p22001 -I00 -sS'value' -p22002 -S'Element' -p22003 -ssS'editable' -p22004 -(dp22005 -S'editable' -p22006 -I00 -sS'value' -p22007 -I01 -ssS'unique' -p22008 -(dp22009 -S'editable' -p22010 -I00 -sS'value' -p22011 -I00 -ssS'properties' -p22012 -(dp22013 -S'default_value' -p22014 -(dp22015 -S'editable' -p22016 -I00 -sS'value' -p22017 -NssS'summary_default' -p22018 -(dp22019 -S'editable' -p22020 -I01 -sS'value' -p22021 -S'none' -p22022 -sssS'description' -p22023 -(dp22024 -S'editable' -p22025 -I01 -sS'value' -p22026 -g47 -sssS'image' -p22027 -(dp22028 -S'mandatory' -p22029 -(dp22030 -S'editable' -p22031 -I00 -sS'value' -p22032 -I00 -ssS'name' -p22033 -(dp22034 -S'editable' -p22035 -I01 -sS'value' -p22036 -S'Thumbnail' -p22037 -ssS'data_type' -p22038 -(dp22039 -S'editable' -p22040 -I00 -sS'value' -p22041 -S'image' -p22042 -ssS'entity_type' -p22043 -(dp22044 -S'editable' -p22045 -I00 -sS'value' -p22046 -S'Element' -p22047 -ssS'editable' -p22048 -(dp22049 -S'editable' -p22050 -I00 -sS'value' -p22051 -I01 -ssS'unique' -p22052 -(dp22053 -S'editable' -p22054 -I00 -sS'value' -p22055 -I00 -ssS'properties' -p22056 -(dp22057 -S'default_value' -p22058 -(dp22059 -S'editable' -p22060 -I00 -sS'value' -p22061 -NssS'summary_default' -p22062 -(dp22063 -S'editable' -p22064 -I01 -sS'value' -p22065 -S'none' -p22066 -sssS'description' -p22067 -(dp22068 -S'editable' -p22069 -I01 -sS'value' -p22070 -g47 -sssS'tag_list' -p22071 -(dp22072 -S'mandatory' -p22073 -(dp22074 -S'editable' -p22075 -I00 -sS'value' -p22076 -I00 -ssS'name' -p22077 -(dp22078 -S'editable' -p22079 -I01 -sS'value' -p22080 -S'Tags' -p22081 -ssS'data_type' -p22082 -(dp22083 -S'editable' -p22084 -I00 -sS'value' -p22085 -S'tag_list' -p22086 -ssS'entity_type' -p22087 -(dp22088 -S'editable' -p22089 -I00 -sS'value' -p22090 -S'Element' -p22091 -ssS'editable' -p22092 -(dp22093 -S'editable' -p22094 -I00 -sS'value' -p22095 -I01 -ssS'unique' -p22096 -(dp22097 -S'editable' -p22098 -I00 -sS'value' -p22099 -I00 -ssS'properties' -p22100 -(dp22101 -S'default_value' -p22102 -(dp22103 -S'editable' -p22104 -I00 -sS'value' -p22105 -NssS'summary_default' -p22106 -(dp22107 -S'editable' -p22108 -I01 -sS'value' -p22109 -S'none' -p22110 -ssS'valid_types' -p22111 -(dp22112 -S'editable' -p22113 -I01 -sS'value' -p22114 -(lp22115 -S'Tag' -p22116 -asssS'description' -p22117 -(dp22118 -S'editable' -p22119 -I01 -sS'value' -p22120 -g47 -sssS'head_duration' -p22121 -(dp22122 -S'mandatory' -p22123 -(dp22124 -S'editable' -p22125 -I00 -sS'value' -p22126 -I00 -ssS'name' -p22127 -(dp22128 -S'editable' -p22129 -I01 -sS'value' -p22130 -S'Raw Head Duration' -p22131 -ssS'data_type' -p22132 -(dp22133 -S'editable' -p22134 -I00 -sS'value' -p22135 -S'number' -p22136 -ssS'entity_type' -p22137 -(dp22138 -S'editable' -p22139 -I00 -sS'value' -p22140 -S'Element' -p22141 -ssS'editable' -p22142 -(dp22143 -S'editable' -p22144 -I00 -sS'value' -p22145 -I01 -ssS'unique' -p22146 -(dp22147 -S'editable' -p22148 -I00 -sS'value' -p22149 -I00 -ssS'properties' -p22150 -(dp22151 -S'default_value' -p22152 -(dp22153 -S'editable' -p22154 -I00 -sS'value' -p22155 -NssS'summary_default' -p22156 -(dp22157 -S'editable' -p22158 -I01 -sS'value' -p22159 -S'none' -p22160 -sssS'description' -p22161 -(dp22162 -S'editable' -p22163 -I01 -sS'value' -p22164 -g47 -sssS'updated_at' -p22165 -(dp22166 -S'mandatory' -p22167 -(dp22168 -S'editable' -p22169 -I00 -sS'value' -p22170 -I00 -ssS'name' -p22171 -(dp22172 -S'editable' -p22173 -I01 -sS'value' -p22174 -S'Date Updated' -p22175 -ssS'data_type' -p22176 -(dp22177 -S'editable' -p22178 -I00 -sS'value' -p22179 -S'date_time' -p22180 -ssS'entity_type' -p22181 -(dp22182 -S'editable' -p22183 -I00 -sS'value' -p22184 -S'Element' -p22185 -ssS'editable' -p22186 -(dp22187 -S'editable' -p22188 -I00 -sS'value' -p22189 -I00 -ssS'unique' -p22190 -(dp22191 -S'editable' -p22192 -I00 -sS'value' -p22193 -I00 -ssS'properties' -p22194 -(dp22195 -S'default_value' -p22196 -(dp22197 -S'editable' -p22198 -I00 -sS'value' -p22199 -NssS'summary_default' -p22200 -(dp22201 -S'editable' -p22202 -I01 -sS'value' -p22203 -S'none' -p22204 -sssS'description' -p22205 -(dp22206 -S'editable' -p22207 -I01 -sS'value' -p22208 -g47 -sssS'tasks' -p22209 -(dp22210 -S'mandatory' -p22211 -(dp22212 -S'editable' -p22213 -I00 -sS'value' -p22214 -I00 -ssS'name' -p22215 -(dp22216 -S'editable' -p22217 -I01 -sS'value' -p22218 -S'Tasks' -p22219 -ssS'data_type' -p22220 -(dp22221 -S'editable' -p22222 -I00 -sS'value' -p22223 -S'multi_entity' -p22224 -ssS'entity_type' -p22225 -(dp22226 -S'editable' -p22227 -I00 -sS'value' -p22228 -S'Element' -p22229 -ssS'editable' -p22230 -(dp22231 -S'editable' -p22232 -I00 -sS'value' -p22233 -I01 -ssS'unique' -p22234 -(dp22235 -S'editable' -p22236 -I00 -sS'value' -p22237 -I00 -ssS'properties' -p22238 -(dp22239 -S'default_value' -p22240 -(dp22241 -S'editable' -p22242 -I00 -sS'value' -p22243 -NssS'summary_default' -p22244 -(dp22245 -S'editable' -p22246 -I01 -sS'value' -p22247 -S'none' -p22248 -ssS'valid_types' -p22249 -(dp22250 -S'editable' -p22251 -I01 -sS'value' -p22252 -(lp22253 -S'Task' -p22254 -asssS'description' -p22255 -(dp22256 -S'editable' -p22257 -I01 -sS'value' -p22258 -g47 -sssS'cached_display_name' -p22259 -(dp22260 -S'mandatory' -p22261 -(dp22262 -S'editable' -p22263 -I00 -sS'value' -p22264 -I00 -ssS'name' -p22265 -(dp22266 -S'editable' -p22267 -I01 -sS'value' -p22268 -S'Cached Display Name' -p22269 -ssS'data_type' -p22270 -(dp22271 -S'editable' -p22272 -I00 -sS'value' -p22273 -S'text' -p22274 -ssS'entity_type' -p22275 -(dp22276 -S'editable' -p22277 -I00 -sS'value' -p22278 -S'Element' -p22279 -ssS'editable' -p22280 -(dp22281 -S'editable' -p22282 -I00 -sS'value' -p22283 -I01 -ssS'unique' -p22284 -(dp22285 -S'editable' -p22286 -I00 -sS'value' -p22287 -I00 -ssS'properties' -p22288 -(dp22289 -S'default_value' -p22290 -(dp22291 -S'editable' -p22292 -I00 -sS'value' -p22293 -NssS'summary_default' -p22294 -(dp22295 -S'editable' -p22296 -I00 -sS'value' -p22297 -S'none' -p22298 -sssS'description' -p22299 -(dp22300 -S'editable' -p22301 -I01 -sS'value' -p22302 -g47 -sssS'smart_cut_duration' -p22303 -(dp22304 -S'mandatory' -p22305 -(dp22306 -S'editable' -p22307 -I00 -sS'value' -p22308 -I00 -ssS'name' -p22309 -(dp22310 -S'editable' -p22311 -I01 -sS'value' -p22312 -S'Cut Duration' -p22313 -ssS'data_type' -p22314 -(dp22315 -S'editable' -p22316 -I00 -sS'value' -p22317 -S'number' -p22318 -ssS'entity_type' -p22319 -(dp22320 -S'editable' -p22321 -I00 -sS'value' -p22322 -S'Element' -p22323 -ssS'editable' -p22324 -(dp22325 -S'editable' -p22326 -I00 -sS'value' -p22327 -I01 -ssS'unique' -p22328 -(dp22329 -S'editable' -p22330 -I00 -sS'value' -p22331 -I00 -ssS'properties' -p22332 -(dp22333 -S'default_value' -p22334 -(dp22335 -S'editable' -p22336 -I00 -sS'value' -p22337 -NssS'summary_default' -p22338 -(dp22339 -S'editable' -p22340 -I01 -sS'value' -p22341 -S'none' -p22342 -sssS'description' -p22343 -(dp22344 -S'editable' -p22345 -I01 -sS'value' -p22346 -g47 -sssS'id' -p22347 -(dp22348 -S'mandatory' -p22349 -(dp22350 -S'editable' -p22351 -I00 -sS'value' -p22352 -I00 -ssS'name' -p22353 -(dp22354 -S'editable' -p22355 -I01 -sS'value' -p22356 -S'Id' -p22357 -ssS'data_type' -p22358 -(dp22359 -S'editable' -p22360 -I00 -sS'value' -p22361 -S'number' -p22362 -ssS'entity_type' -p22363 -(dp22364 -S'editable' -p22365 -I00 -sS'value' -p22366 -S'Element' -p22367 -ssS'editable' -p22368 -(dp22369 -S'editable' -p22370 -I00 -sS'value' -p22371 -I00 -ssS'unique' -p22372 -(dp22373 -S'editable' -p22374 -I00 -sS'value' -p22375 -I00 -ssS'properties' -p22376 -(dp22377 -S'default_value' -p22378 -(dp22379 -S'editable' -p22380 -I00 -sS'value' -p22381 -NssS'summary_default' -p22382 -(dp22383 -S'editable' -p22384 -I01 -sS'value' -p22385 -S'none' -p22386 -sssS'description' -p22387 -(dp22388 -S'editable' -p22389 -I01 -sS'value' -p22390 -g47 -sssS'updated_by' -p22391 -(dp22392 -S'mandatory' -p22393 -(dp22394 -S'editable' -p22395 -I00 -sS'value' -p22396 -I00 -ssS'name' -p22397 -(dp22398 -S'editable' -p22399 -I01 -sS'value' -p22400 -S'Updated by' -p22401 -ssS'data_type' -p22402 -(dp22403 -S'editable' -p22404 -I00 -sS'value' -p22405 -S'entity' -p22406 -ssS'entity_type' -p22407 -(dp22408 -S'editable' -p22409 -I00 -sS'value' -p22410 -S'Element' -p22411 -ssS'editable' -p22412 -(dp22413 -S'editable' -p22414 -I00 -sS'value' -p22415 -I00 -ssS'unique' -p22416 -(dp22417 -S'editable' -p22418 -I00 -sS'value' -p22419 -I00 -ssS'properties' -p22420 -(dp22421 -S'default_value' -p22422 -(dp22423 -S'editable' -p22424 -I00 -sS'value' -p22425 -NssS'summary_default' -p22426 -(dp22427 -S'editable' -p22428 -I01 -sS'value' -p22429 -S'none' -p22430 -ssS'valid_types' -p22431 -(dp22432 -S'editable' -p22433 -I01 -sS'value' -p22434 -(lp22435 -S'HumanUser' -p22436 -aS'ApiUser' -p22437 -asssS'description' -p22438 -(dp22439 -S'editable' -p22440 -I01 -sS'value' -p22441 -g47 -sssS'open_notes' -p22442 -(dp22443 -S'mandatory' -p22444 -(dp22445 -S'editable' -p22446 -I00 -sS'value' -p22447 -I00 -ssS'name' -p22448 -(dp22449 -S'editable' -p22450 -I01 -sS'value' -p22451 -S'Open Notes' -p22452 -ssS'data_type' -p22453 -(dp22454 -S'editable' -p22455 -I00 -sS'value' -p22456 -S'multi_entity' -p22457 -ssS'entity_type' -p22458 -(dp22459 -S'editable' -p22460 -I00 -sS'value' -p22461 -S'Element' -p22462 -ssS'editable' -p22463 -(dp22464 -S'editable' -p22465 -I00 -sS'value' -p22466 -I00 -ssS'unique' -p22467 -(dp22468 -S'editable' -p22469 -I00 -sS'value' -p22470 -I00 -ssS'properties' -p22471 -(dp22472 -S'default_value' -p22473 -(dp22474 -S'editable' -p22475 -I00 -sS'value' -p22476 -NssS'summary_default' -p22477 -(dp22478 -S'editable' -p22479 -I01 -sS'value' -p22480 -S'none' -p22481 -ssS'valid_types' -p22482 -(dp22483 -S'editable' -p22484 -I01 -sS'value' -p22485 -(lp22486 -S'Note' -p22487 -asssS'description' -p22488 -(dp22489 -S'editable' -p22490 -I01 -sS'value' -p22491 -g47 -sssS'task_template' -p22492 -(dp22493 -S'mandatory' -p22494 -(dp22495 -S'editable' -p22496 -I00 -sS'value' -p22497 -I00 -ssS'name' -p22498 -(dp22499 -S'editable' -p22500 -I01 -sS'value' -p22501 -S'Task Template' -p22502 -ssS'data_type' -p22503 -(dp22504 -S'editable' -p22505 -I00 -sS'value' -p22506 -S'entity' -p22507 -ssS'entity_type' -p22508 -(dp22509 -S'editable' -p22510 -I00 -sS'value' -p22511 -S'Element' -p22512 -ssS'editable' -p22513 -(dp22514 -S'editable' -p22515 -I00 -sS'value' -p22516 -I01 -ssS'unique' -p22517 -(dp22518 -S'editable' -p22519 -I00 -sS'value' -p22520 -I00 -ssS'properties' -p22521 -(dp22522 -S'default_value' -p22523 -(dp22524 -S'editable' -p22525 -I00 -sS'value' -p22526 -NssS'summary_default' -p22527 -(dp22528 -S'editable' -p22529 -I01 -sS'value' -p22530 -S'none' -p22531 -ssS'valid_types' -p22532 -(dp22533 -S'editable' -p22534 -I01 -sS'value' -p22535 -(lp22536 -S'TaskTemplate' -p22537 -asssS'description' -p22538 -(dp22539 -S'editable' -p22540 -I01 -sS'value' -p22541 -g47 -sssS'created_by' -p22542 -(dp22543 -S'mandatory' -p22544 -(dp22545 -S'editable' -p22546 -I00 -sS'value' -p22547 -I00 -ssS'name' -p22548 -(dp22549 -S'editable' -p22550 -I01 -sS'value' -p22551 -S'Created by' -p22552 -ssS'data_type' -p22553 -(dp22554 -S'editable' -p22555 -I00 -sS'value' -p22556 -S'entity' -p22557 -ssS'entity_type' -p22558 -(dp22559 -S'editable' -p22560 -I00 -sS'value' -p22561 -S'Element' -p22562 -ssS'editable' -p22563 -(dp22564 -S'editable' -p22565 -I00 -sS'value' -p22566 -I00 -ssS'unique' -p22567 -(dp22568 -S'editable' -p22569 -I00 -sS'value' -p22570 -I00 -ssS'properties' -p22571 -(dp22572 -S'default_value' -p22573 -(dp22574 -S'editable' -p22575 -I00 -sS'value' -p22576 -NssS'summary_default' -p22577 -(dp22578 -S'editable' -p22579 -I01 -sS'value' -p22580 -S'none' -p22581 -ssS'valid_types' -p22582 -(dp22583 -S'editable' -p22584 -I01 -sS'value' -p22585 -(lp22586 -S'HumanUser' -p22587 -aS'ApiUser' -p22588 -asssS'description' -p22589 -(dp22590 -S'editable' -p22591 -I01 -sS'value' -p22592 -g47 -sssS'smart_tail_duration' -p22593 -(dp22594 -S'mandatory' -p22595 -(dp22596 -S'editable' -p22597 -I00 -sS'value' -p22598 -I00 -ssS'name' -p22599 -(dp22600 -S'editable' -p22601 -I01 -sS'value' -p22602 -S'Tail Duration' -p22603 -ssS'data_type' -p22604 -(dp22605 -S'editable' -p22606 -I00 -sS'value' -p22607 -S'number' -p22608 -ssS'entity_type' -p22609 -(dp22610 -S'editable' -p22611 -I00 -sS'value' -p22612 -S'Element' -p22613 -ssS'editable' -p22614 -(dp22615 -S'editable' -p22616 -I00 -sS'value' -p22617 -I01 -ssS'unique' -p22618 -(dp22619 -S'editable' -p22620 -I00 -sS'value' -p22621 -I00 -ssS'properties' -p22622 -(dp22623 -S'default_value' -p22624 -(dp22625 -S'editable' -p22626 -I00 -sS'value' -p22627 -NssS'summary_default' -p22628 -(dp22629 -S'editable' -p22630 -I01 -sS'value' -p22631 -S'none' -p22632 -sssS'description' -p22633 -(dp22634 -S'editable' -p22635 -I01 -sS'value' -p22636 -g47 -sssS'sg_status_list' -p22637 -(dp22638 -S'mandatory' -p22639 -(dp22640 -S'editable' -p22641 -I00 -sS'value' -p22642 -I00 -ssS'name' -p22643 -(dp22644 -S'editable' -p22645 -I01 -sS'value' -p22646 -S'Status' -p22647 -ssS'data_type' -p22648 -(dp22649 -S'editable' -p22650 -I00 -sS'value' -p22651 -S'status_list' -p22652 -ssS'entity_type' -p22653 -(dp22654 -S'editable' -p22655 -I00 -sS'value' -p22656 -S'Element' -p22657 -ssS'editable' -p22658 -(dp22659 -S'editable' -p22660 -I00 -sS'value' -p22661 -I01 -ssS'unique' -p22662 -(dp22663 -S'editable' -p22664 -I00 -sS'value' -p22665 -I00 -ssS'properties' -p22666 -(dp22667 -S'default_value' -p22668 -(dp22669 -S'editable' -p22670 -I01 -sS'value' -p22671 -S'na' -p22672 -ssS'valid_values' -p22673 -(dp22674 -S'editable' -p22675 -I01 -sS'value' -p22676 -(lp22677 -S'na' -p22678 -assS'summary_default' -p22679 -(dp22680 -S'editable' -p22681 -I01 -sS'value' -p22682 -S'status_list' -p22683 -sssS'description' -p22684 -(dp22685 -S'editable' -p22686 -I01 -sS'value' -p22687 -g47 -sssS'smart_head_in' -p22688 -(dp22689 -S'mandatory' -p22690 -(dp22691 -S'editable' -p22692 -I00 -sS'value' -p22693 -I00 -ssS'name' -p22694 -(dp22695 -S'editable' -p22696 -I01 -sS'value' -p22697 -S'Head In' -p22698 -ssS'data_type' -p22699 -(dp22700 -S'editable' -p22701 -I00 -sS'value' -p22702 -S'number' -p22703 -ssS'entity_type' -p22704 -(dp22705 -S'editable' -p22706 -I00 -sS'value' -p22707 -S'Element' -p22708 -ssS'editable' -p22709 -(dp22710 -S'editable' -p22711 -I00 -sS'value' -p22712 -I01 -ssS'unique' -p22713 -(dp22714 -S'editable' -p22715 -I00 -sS'value' -p22716 -I00 -ssS'properties' -p22717 -(dp22718 -S'default_value' -p22719 -(dp22720 -S'editable' -p22721 -I00 -sS'value' -p22722 -NssS'summary_default' -p22723 -(dp22724 -S'editable' -p22725 -I01 -sS'value' -p22726 -S'none' -p22727 -sssS'description' -p22728 -(dp22729 -S'editable' -p22730 -I01 -sS'value' -p22731 -g47 -sssS'smart_working_duration' -p22732 -(dp22733 -S'mandatory' -p22734 -(dp22735 -S'editable' -p22736 -I00 -sS'value' -p22737 -I00 -ssS'name' -p22738 -(dp22739 -S'editable' -p22740 -I01 -sS'value' -p22741 -S'Working Duration' -p22742 -ssS'data_type' -p22743 -(dp22744 -S'editable' -p22745 -I00 -sS'value' -p22746 -S'number' -p22747 -ssS'entity_type' -p22748 -(dp22749 -S'editable' -p22750 -I00 -sS'value' -p22751 -S'Element' -p22752 -ssS'editable' -p22753 -(dp22754 -S'editable' -p22755 -I00 -sS'value' -p22756 -I00 -ssS'unique' -p22757 -(dp22758 -S'editable' -p22759 -I00 -sS'value' -p22760 -I00 -ssS'properties' -p22761 -(dp22762 -S'default_value' -p22763 -(dp22764 -S'editable' -p22765 -I00 -sS'value' -p22766 -NssS'summary_default' -p22767 -(dp22768 -S'editable' -p22769 -I01 -sS'value' -p22770 -S'none' -p22771 -sssS'description' -p22772 -(dp22773 -S'editable' -p22774 -I01 -sS'value' -p22775 -g47 -sssS'head_in' -p22776 -(dp22777 -S'mandatory' -p22778 -(dp22779 -S'editable' -p22780 -I00 -sS'value' -p22781 -I00 -ssS'name' -p22782 -(dp22783 -S'editable' -p22784 -I01 -sS'value' -p22785 -S'Raw Head In' -p22786 -ssS'data_type' -p22787 -(dp22788 -S'editable' -p22789 -I00 -sS'value' -p22790 -S'number' -p22791 -ssS'entity_type' -p22792 -(dp22793 -S'editable' -p22794 -I00 -sS'value' -p22795 -S'Element' -p22796 -ssS'editable' -p22797 -(dp22798 -S'editable' -p22799 -I00 -sS'value' -p22800 -I01 -ssS'unique' -p22801 -(dp22802 -S'editable' -p22803 -I00 -sS'value' -p22804 -I00 -ssS'properties' -p22805 -(dp22806 -S'default_value' -p22807 -(dp22808 -S'editable' -p22809 -I00 -sS'value' -p22810 -NssS'summary_default' -p22811 -(dp22812 -S'editable' -p22813 -I01 -sS'value' -p22814 -S'none' -p22815 -sssS'description' -p22816 -(dp22817 -S'editable' -p22818 -I01 -sS'value' -p22819 -g47 -sssS'description' -p22820 -(dp22821 -S'mandatory' -p22822 -(dp22823 -S'editable' -p22824 -I00 -sS'value' -p22825 -I00 -ssS'name' -p22826 -(dp22827 -S'editable' -p22828 -I01 -sS'value' -p22829 -S'Description' -p22830 -ssS'data_type' -p22831 -(dp22832 -S'editable' -p22833 -I00 -sS'value' -p22834 -S'text' -p22835 -ssS'entity_type' -p22836 -(dp22837 -S'editable' -p22838 -I00 -sS'value' -p22839 -S'Element' -p22840 -ssS'editable' -p22841 -(dp22842 -S'editable' -p22843 -I00 -sS'value' -p22844 -I01 -ssS'unique' -p22845 -(dp22846 -S'editable' -p22847 -I00 -sS'value' -p22848 -I00 -ssS'properties' -p22849 -(dp22850 -S'default_value' -p22851 -(dp22852 -S'editable' -p22853 -I00 -sS'value' -p22854 -NssS'summary_default' -p22855 -(dp22856 -S'editable' -p22857 -I01 -sS'value' -p22858 -S'none' -p22859 -sssS'description' -p22860 -(dp22861 -S'editable' -p22862 -I01 -sS'value' -p22863 -g47 -sssS'smart_cut_out' -p22864 -(dp22865 -S'mandatory' -p22866 -(dp22867 -S'editable' -p22868 -I00 -sS'value' -p22869 -I00 -ssS'name' -p22870 -(dp22871 -S'editable' -p22872 -I01 -sS'value' -p22873 -S'Cut Out' -p22874 -ssS'data_type' -p22875 -(dp22876 -S'editable' -p22877 -I00 -sS'value' -p22878 -S'number' -p22879 -ssS'entity_type' -p22880 -(dp22881 -S'editable' -p22882 -I00 -sS'value' -p22883 -S'Element' -p22884 -ssS'editable' -p22885 -(dp22886 -S'editable' -p22887 -I00 -sS'value' -p22888 -I01 -ssS'unique' -p22889 -(dp22890 -S'editable' -p22891 -I00 -sS'value' -p22892 -I00 -ssS'properties' -p22893 -(dp22894 -S'default_value' -p22895 -(dp22896 -S'editable' -p22897 -I00 -sS'value' -p22898 -NssS'summary_default' -p22899 -(dp22900 -S'editable' -p22901 -I01 -sS'value' -p22902 -S'none' -p22903 -sssS'description' -p22904 -(dp22905 -S'editable' -p22906 -I01 -sS'value' -p22907 -g47 -sssS'tail_out' -p22908 -(dp22909 -S'mandatory' -p22910 -(dp22911 -S'editable' -p22912 -I00 -sS'value' -p22913 -I00 -ssS'name' -p22914 -(dp22915 -S'editable' -p22916 -I01 -sS'value' -p22917 -S'Raw Tail Out' -p22918 -ssS'data_type' -p22919 -(dp22920 -S'editable' -p22921 -I00 -sS'value' -p22922 -S'number' -p22923 -ssS'entity_type' -p22924 -(dp22925 -S'editable' -p22926 -I00 -sS'value' -p22927 -S'Element' -p22928 -ssS'editable' -p22929 -(dp22930 -S'editable' -p22931 -I00 -sS'value' -p22932 -I01 -ssS'unique' -p22933 -(dp22934 -S'editable' -p22935 -I00 -sS'value' -p22936 -I00 -ssS'properties' -p22937 -(dp22938 -S'default_value' -p22939 -(dp22940 -S'editable' -p22941 -I00 -sS'value' -p22942 -NssS'summary_default' -p22943 -(dp22944 -S'editable' -p22945 -I01 -sS'value' -p22946 -S'none' -p22947 -sssS'description' -p22948 -(dp22949 -S'editable' -p22950 -I01 -sS'value' -p22951 -g47 -sssS'smart_cut_in' -p22952 -(dp22953 -S'mandatory' -p22954 -(dp22955 -S'editable' -p22956 -I00 -sS'value' -p22957 -I00 -ssS'name' -p22958 -(dp22959 -S'editable' -p22960 -I01 -sS'value' -p22961 -S'Cut In' -p22962 -ssS'data_type' -p22963 -(dp22964 -S'editable' -p22965 -I00 -sS'value' -p22966 -S'number' -p22967 -ssS'entity_type' -p22968 -(dp22969 -S'editable' -p22970 -I00 -sS'value' -p22971 -S'Element' -p22972 -ssS'editable' -p22973 -(dp22974 -S'editable' -p22975 -I00 -sS'value' -p22976 -I01 -ssS'unique' -p22977 -(dp22978 -S'editable' -p22979 -I00 -sS'value' -p22980 -I00 -ssS'properties' -p22981 -(dp22982 -S'default_value' -p22983 -(dp22984 -S'editable' -p22985 -I00 -sS'value' -p22986 -NssS'summary_default' -p22987 -(dp22988 -S'editable' -p22989 -I01 -sS'value' -p22990 -S'none' -p22991 -sssS'description' -p22992 -(dp22993 -S'editable' -p22994 -I01 -sS'value' -p22995 -g47 -sssS'smart_cut_summary_display' -p22996 -(dp22997 -S'mandatory' -p22998 -(dp22999 -S'editable' -p23000 -I00 -sS'value' -p23001 -I00 -ssS'name' -p23002 -(dp23003 -S'editable' -p23004 -I01 -sS'value' -p23005 -S'Cut Summary' -p23006 -ssS'data_type' -p23007 -(dp23008 -S'editable' -p23009 -I00 -sS'value' -p23010 -S'text' -p23011 -ssS'entity_type' -p23012 -(dp23013 -S'editable' -p23014 -I00 -sS'value' -p23015 -S'Element' -p23016 -ssS'editable' -p23017 -(dp23018 -S'editable' -p23019 -I00 -sS'value' -p23020 -I00 -ssS'unique' -p23021 -(dp23022 -S'editable' -p23023 -I00 -sS'value' -p23024 -I00 -ssS'properties' -p23025 -(dp23026 -S'default_value' -p23027 -(dp23028 -S'editable' -p23029 -I00 -sS'value' -p23030 -NssS'summary_default' -p23031 -(dp23032 -S'editable' -p23033 -I01 -sS'value' -p23034 -S'none' -p23035 -sssS'description' -p23036 -(dp23037 -S'editable' -p23038 -I01 -sS'value' -p23039 -g47 -sssS'cut_in' -p23040 -(dp23041 -S'mandatory' -p23042 -(dp23043 -S'editable' -p23044 -I00 -sS'value' -p23045 -I00 -ssS'name' -p23046 -(dp23047 -S'editable' -p23048 -I01 -sS'value' -p23049 -S'Raw Cut In' -p23050 -ssS'data_type' -p23051 -(dp23052 -S'editable' -p23053 -I00 -sS'value' -p23054 -S'number' -p23055 -ssS'entity_type' -p23056 -(dp23057 -S'editable' -p23058 -I00 -sS'value' -p23059 -S'Element' -p23060 -ssS'editable' -p23061 -(dp23062 -S'editable' -p23063 -I00 -sS'value' -p23064 -I01 -ssS'unique' -p23065 -(dp23066 -S'editable' -p23067 -I00 -sS'value' -p23068 -I00 -ssS'properties' -p23069 -(dp23070 -S'default_value' -p23071 -(dp23072 -S'editable' -p23073 -I00 -sS'value' -p23074 -NssS'summary_default' -p23075 -(dp23076 -S'editable' -p23077 -I01 -sS'value' -p23078 -S'none' -p23079 -sssS'description' -p23080 -(dp23081 -S'editable' -p23082 -I01 -sS'value' -p23083 -g47 -sssS'smart_duration_summary_display' -p23084 -(dp23085 -S'mandatory' -p23086 -(dp23087 -S'editable' -p23088 -I00 -sS'value' -p23089 -I00 -ssS'name' -p23090 -(dp23091 -S'editable' -p23092 -I01 -sS'value' -p23093 -S'Duration Summary' -p23094 -ssS'data_type' -p23095 -(dp23096 -S'editable' -p23097 -I00 -sS'value' -p23098 -S'text' -p23099 -ssS'entity_type' -p23100 -(dp23101 -S'editable' -p23102 -I00 -sS'value' -p23103 -S'Element' -p23104 -ssS'editable' -p23105 -(dp23106 -S'editable' -p23107 -I00 -sS'value' -p23108 -I00 -ssS'unique' -p23109 -(dp23110 -S'editable' -p23111 -I00 -sS'value' -p23112 -I00 -ssS'properties' -p23113 -(dp23114 -S'default_value' -p23115 -(dp23116 -S'editable' -p23117 -I00 -sS'value' -p23118 -NssS'summary_default' -p23119 -(dp23120 -S'editable' -p23121 -I01 -sS'value' -p23122 -S'none' -p23123 -sssS'description' -p23124 -(dp23125 -S'editable' -p23126 -I01 -sS'value' -p23127 -g47 -sssS'tail_duration' -p23128 -(dp23129 -S'mandatory' -p23130 -(dp23131 -S'editable' -p23132 -I00 -sS'value' -p23133 -I00 -ssS'name' -p23134 -(dp23135 -S'editable' -p23136 -I01 -sS'value' -p23137 -S'Raw Tail Duration' -p23138 -ssS'data_type' -p23139 -(dp23140 -S'editable' -p23141 -I00 -sS'value' -p23142 -S'number' -p23143 -ssS'entity_type' -p23144 -(dp23145 -S'editable' -p23146 -I00 -sS'value' -p23147 -S'Element' -p23148 -ssS'editable' -p23149 -(dp23150 -S'editable' -p23151 -I00 -sS'value' -p23152 -I01 -ssS'unique' -p23153 -(dp23154 -S'editable' -p23155 -I00 -sS'value' -p23156 -I00 -ssS'properties' -p23157 -(dp23158 -S'default_value' -p23159 -(dp23160 -S'editable' -p23161 -I00 -sS'value' -p23162 -NssS'summary_default' -p23163 -(dp23164 -S'editable' -p23165 -I01 -sS'value' -p23166 -S'none' -p23167 -sssS'description' -p23168 -(dp23169 -S'editable' -p23170 -I01 -sS'value' -p23171 -g47 -sssS'smart_tail_out' -p23172 -(dp23173 -S'mandatory' -p23174 -(dp23175 -S'editable' -p23176 -I00 -sS'value' -p23177 -I00 -ssS'name' -p23178 -(dp23179 -S'editable' -p23180 -I01 -sS'value' -p23181 -S'Tail Out' -p23182 -ssS'data_type' -p23183 -(dp23184 -S'editable' -p23185 -I00 -sS'value' -p23186 -S'number' -p23187 -ssS'entity_type' -p23188 -(dp23189 -S'editable' -p23190 -I00 -sS'value' -p23191 -S'Element' -p23192 -ssS'editable' -p23193 -(dp23194 -S'editable' -p23195 -I00 -sS'value' -p23196 -I01 -ssS'unique' -p23197 -(dp23198 -S'editable' -p23199 -I00 -sS'value' -p23200 -I00 -ssS'properties' -p23201 -(dp23202 -S'default_value' -p23203 -(dp23204 -S'editable' -p23205 -I00 -sS'value' -p23206 -NssS'summary_default' -p23207 -(dp23208 -S'editable' -p23209 -I01 -sS'value' -p23210 -S'none' -p23211 -sssS'description' -p23212 -(dp23213 -S'editable' -p23214 -I01 -sS'value' -p23215 -g47 -sssS'step_0' -p23216 -(dp23217 -S'mandatory' -p23218 -(dp23219 -S'editable' -p23220 -I00 -sS'value' -p23221 -I00 -ssS'name' -p23222 -(dp23223 -S'editable' -p23224 -I01 -sS'value' -p23225 -S'ALL TASKS' -p23226 -ssS'data_type' -p23227 -(dp23228 -S'editable' -p23229 -I00 -sS'value' -p23230 -S'pivot_column' -p23231 -ssS'entity_type' -p23232 -(dp23233 -S'editable' -p23234 -I00 -sS'value' -p23235 -S'Element' -p23236 -ssS'editable' -p23237 -(dp23238 -S'editable' -p23239 -I00 -sS'value' -p23240 -I00 -ssS'unique' -p23241 -(dp23242 -S'editable' -p23243 -I00 -sS'value' -p23244 -I00 -ssS'properties' -p23245 -(dp23246 -S'default_value' -p23247 -(dp23248 -S'editable' -p23249 -I00 -sS'value' -p23250 -NssS'summary_default' -p23251 -(dp23252 -S'editable' -p23253 -I00 -sS'value' -p23254 -S'none' -p23255 -sssS'description' -p23256 -(dp23257 -S'editable' -p23258 -I01 -sS'value' -p23259 -g47 -sssS'cut_duration' -p23260 -(dp23261 -S'mandatory' -p23262 -(dp23263 -S'editable' -p23264 -I00 -sS'value' -p23265 -I00 -ssS'name' -p23266 -(dp23267 -S'editable' -p23268 -I01 -sS'value' -p23269 -S'Raw Cut Duration' -p23270 -ssS'data_type' -p23271 -(dp23272 -S'editable' -p23273 -I00 -sS'value' -p23274 -S'number' -p23275 -ssS'entity_type' -p23276 -(dp23277 -S'editable' -p23278 -I00 -sS'value' -p23279 -S'Element' -p23280 -ssS'editable' -p23281 -(dp23282 -S'editable' -p23283 -I00 -sS'value' -p23284 -I01 -ssS'unique' -p23285 -(dp23286 -S'editable' -p23287 -I00 -sS'value' -p23288 -I00 -ssS'properties' -p23289 -(dp23290 -S'default_value' -p23291 -(dp23292 -S'editable' -p23293 -I00 -sS'value' -p23294 -NssS'summary_default' -p23295 -(dp23296 -S'editable' -p23297 -I01 -sS'value' -p23298 -S'none' -p23299 -sssS'description' -p23300 -(dp23301 -S'editable' -p23302 -I01 -sS'value' -p23303 -g47 -sssS'smart_tail_in' -p23304 -(dp23305 -S'mandatory' -p23306 -(dp23307 -S'editable' -p23308 -I00 -sS'value' -p23309 -I00 -ssS'name' -p23310 -(dp23311 -S'editable' -p23312 -I01 -sS'value' -p23313 -S'Tail In' -p23314 -ssS'data_type' -p23315 -(dp23316 -S'editable' -p23317 -I00 -sS'value' -p23318 -S'number' -p23319 -ssS'entity_type' -p23320 -(dp23321 -S'editable' -p23322 -I00 -sS'value' -p23323 -S'Element' -p23324 -ssS'editable' -p23325 -(dp23326 -S'editable' -p23327 -I00 -sS'value' -p23328 -I01 -ssS'unique' -p23329 -(dp23330 -S'editable' -p23331 -I00 -sS'value' -p23332 -I00 -ssS'properties' -p23333 -(dp23334 -S'default_value' -p23335 -(dp23336 -S'editable' -p23337 -I00 -sS'value' -p23338 -NssS'summary_default' -p23339 -(dp23340 -S'editable' -p23341 -I01 -sS'value' -p23342 -S'none' -p23343 -sssS'description' -p23344 -(dp23345 -S'editable' -p23346 -I01 -sS'value' -p23347 -g47 -sssS'assets' -p23348 -(dp23349 -S'mandatory' -p23350 -(dp23351 -S'editable' -p23352 -I00 -sS'value' -p23353 -I00 -ssS'name' -p23354 -(dp23355 -S'editable' -p23356 -I01 -sS'value' -p23357 -S'Assets' -p23358 -ssS'data_type' -p23359 -(dp23360 -S'editable' -p23361 -I00 -sS'value' -p23362 -S'multi_entity' -p23363 -ssS'entity_type' -p23364 -(dp23365 -S'editable' -p23366 -I00 -sS'value' -p23367 -S'Element' -p23368 -ssS'editable' -p23369 -(dp23370 -S'editable' -p23371 -I00 -sS'value' -p23372 -I01 -ssS'unique' -p23373 -(dp23374 -S'editable' -p23375 -I00 -sS'value' -p23376 -I00 -ssS'properties' -p23377 -(dp23378 -S'default_value' -p23379 -(dp23380 -S'editable' -p23381 -I00 -sS'value' -p23382 -NssS'summary_default' -p23383 -(dp23384 -S'editable' -p23385 -I01 -sS'value' -p23386 -S'none' -p23387 -ssS'valid_types' -p23388 -(dp23389 -S'editable' -p23390 -I01 -sS'value' -p23391 -(lp23392 -S'Asset' -p23393 -asssS'description' -p23394 -(dp23395 -S'editable' -p23396 -I01 -sS'value' -p23397 -g47 -sssS'smart_head_out' -p23398 -(dp23399 -S'mandatory' -p23400 -(dp23401 -S'editable' -p23402 -I00 -sS'value' -p23403 -I00 -ssS'name' -p23404 -(dp23405 -S'editable' -p23406 -I01 -sS'value' -p23407 -S'Head Out' -p23408 -ssS'data_type' -p23409 -(dp23410 -S'editable' -p23411 -I00 -sS'value' -p23412 -S'number' -p23413 -ssS'entity_type' -p23414 -(dp23415 -S'editable' -p23416 -I00 -sS'value' -p23417 -S'Element' -p23418 -ssS'editable' -p23419 -(dp23420 -S'editable' -p23421 -I00 -sS'value' -p23422 -I01 -ssS'unique' -p23423 -(dp23424 -S'editable' -p23425 -I00 -sS'value' -p23426 -I00 -ssS'properties' -p23427 -(dp23428 -S'default_value' -p23429 -(dp23430 -S'editable' -p23431 -I00 -sS'value' -p23432 -NssS'summary_default' -p23433 -(dp23434 -S'editable' -p23435 -I01 -sS'value' -p23436 -S'none' -p23437 -sssS'description' -p23438 -(dp23439 -S'editable' -p23440 -I01 -sS'value' -p23441 -g47 -sssS'created_at' -p23442 -(dp23443 -S'mandatory' -p23444 -(dp23445 -S'editable' -p23446 -I00 -sS'value' -p23447 -I00 -ssS'name' -p23448 -(dp23449 -S'editable' -p23450 -I01 -sS'value' -p23451 -S'Date Created' -p23452 -ssS'data_type' -p23453 -(dp23454 -S'editable' -p23455 -I00 -sS'value' -p23456 -S'date_time' -p23457 -ssS'entity_type' -p23458 -(dp23459 -S'editable' -p23460 -I00 -sS'value' -p23461 -S'Element' -p23462 -ssS'editable' -p23463 -(dp23464 -S'editable' -p23465 -I00 -sS'value' -p23466 -I00 -ssS'unique' -p23467 -(dp23468 -S'editable' -p23469 -I00 -sS'value' -p23470 -I00 -ssS'properties' -p23471 -(dp23472 -S'default_value' -p23473 -(dp23474 -S'editable' -p23475 -I00 -sS'value' -p23476 -NssS'summary_default' -p23477 -(dp23478 -S'editable' -p23479 -I01 -sS'value' -p23480 -S'none' -p23481 -sssS'description' -p23482 -(dp23483 -S'editable' -p23484 -I01 -sS'value' -p23485 -g47 -sssS'project' -p23486 -(dp23487 -S'mandatory' -p23488 -(dp23489 -S'editable' -p23490 -I00 -sS'value' -p23491 -I00 -ssS'name' -p23492 -(dp23493 -S'editable' -p23494 -I01 -sS'value' -p23495 -S'Project' -p23496 -ssS'data_type' -p23497 -(dp23498 -S'editable' -p23499 -I00 -sS'value' -p23500 -S'entity' -p23501 -ssS'entity_type' -p23502 -(dp23503 -S'editable' -p23504 -I00 -sS'value' -p23505 -S'Element' -p23506 -ssS'editable' -p23507 -(dp23508 -S'editable' -p23509 -I00 -sS'value' -p23510 -I01 -ssS'unique' -p23511 -(dp23512 -S'editable' -p23513 -I00 -sS'value' -p23514 -I00 -ssS'properties' -p23515 -(dp23516 -S'default_value' -p23517 -(dp23518 -S'editable' -p23519 -I00 -sS'value' -p23520 -NssS'summary_default' -p23521 -(dp23522 -S'editable' -p23523 -I01 -sS'value' -p23524 -S'none' -p23525 -ssS'valid_types' -p23526 -(dp23527 -S'editable' -p23528 -I01 -sS'value' -p23529 -(lp23530 -S'Project' -p23531 -asssS'description' -p23532 -(dp23533 -S'editable' -p23534 -I01 -sS'value' -p23535 -g47 -sssS'filmstrip_image' -p23536 -(dp23537 -S'mandatory' -p23538 -(dp23539 -S'editable' -p23540 -I00 -sS'value' -p23541 -I00 -ssS'name' -p23542 -(dp23543 -S'editable' -p23544 -I01 -sS'value' -p23545 -S'Filmstrip Thumbnail' -p23546 -ssS'data_type' -p23547 -(dp23548 -S'editable' -p23549 -I00 -sS'value' -p23550 -S'image' -p23551 -ssS'entity_type' -p23552 -(dp23553 -S'editable' -p23554 -I00 -sS'value' -p23555 -S'Element' -p23556 -ssS'editable' -p23557 -(dp23558 -S'editable' -p23559 -I00 -sS'value' -p23560 -I01 -ssS'unique' -p23561 -(dp23562 -S'editable' -p23563 -I00 -sS'value' -p23564 -I00 -ssS'properties' -p23565 -(dp23566 -S'default_value' -p23567 -(dp23568 -S'editable' -p23569 -I00 -sS'value' -p23570 -NssS'summary_default' -p23571 -(dp23572 -S'editable' -p23573 -I01 -sS'value' -p23574 -S'none' -p23575 -sssS'description' -p23576 -(dp23577 -S'editable' -p23578 -I01 -sS'value' -p23579 -g47 -sssS'tail_in' -p23580 -(dp23581 -S'mandatory' -p23582 -(dp23583 -S'editable' -p23584 -I00 -sS'value' -p23585 -I00 -ssS'name' -p23586 -(dp23587 -S'editable' -p23588 -I01 -sS'value' -p23589 -S'Raw Tail In' -p23590 -ssS'data_type' -p23591 -(dp23592 -S'editable' -p23593 -I00 -sS'value' -p23594 -S'number' -p23595 -ssS'entity_type' -p23596 -(dp23597 -S'editable' -p23598 -I00 -sS'value' -p23599 -S'Element' -p23600 -ssS'editable' -p23601 -(dp23602 -S'editable' -p23603 -I00 -sS'value' -p23604 -I01 -ssS'unique' -p23605 -(dp23606 -S'editable' -p23607 -I00 -sS'value' -p23608 -I00 -ssS'properties' -p23609 -(dp23610 -S'default_value' -p23611 -(dp23612 -S'editable' -p23613 -I00 -sS'value' -p23614 -NssS'summary_default' -p23615 -(dp23616 -S'editable' -p23617 -I01 -sS'value' -p23618 -S'none' -p23619 -sssS'description' -p23620 -(dp23621 -S'editable' -p23622 -I01 -sS'value' -p23623 -g47 -sssS'shots' -p23624 -(dp23625 -S'mandatory' -p23626 -(dp23627 -S'editable' -p23628 -I00 -sS'value' -p23629 -I00 -ssS'name' -p23630 -(dp23631 -S'editable' -p23632 -I01 -sS'value' -p23633 -S'Shots' -p23634 -ssS'data_type' -p23635 -(dp23636 -S'editable' -p23637 -I00 -sS'value' -p23638 -S'multi_entity' -p23639 -ssS'entity_type' -p23640 -(dp23641 -S'editable' -p23642 -I00 -sS'value' -p23643 -S'Element' -p23644 -ssS'editable' -p23645 -(dp23646 -S'editable' -p23647 -I00 -sS'value' -p23648 -I01 -ssS'unique' -p23649 -(dp23650 -S'editable' -p23651 -I00 -sS'value' -p23652 -I00 -ssS'properties' -p23653 -(dp23654 -S'default_value' -p23655 -(dp23656 -S'editable' -p23657 -I00 -sS'value' -p23658 -NssS'summary_default' -p23659 -(dp23660 -S'editable' -p23661 -I01 -sS'value' -p23662 -S'none' -p23663 -ssS'valid_types' -p23664 -(dp23665 -S'editable' -p23666 -I01 -sS'value' -p23667 -(lp23668 -S'Shot' -p23669 -asssS'description' -p23670 -(dp23671 -S'editable' -p23672 -I01 -sS'value' -p23673 -g47 -sssS'smart_head_duration' -p23674 -(dp23675 -S'mandatory' -p23676 -(dp23677 -S'editable' -p23678 -I00 -sS'value' -p23679 -I00 -ssS'name' -p23680 -(dp23681 -S'editable' -p23682 -I01 -sS'value' -p23683 -S'Head Duration' -p23684 -ssS'data_type' -p23685 -(dp23686 -S'editable' -p23687 -I00 -sS'value' -p23688 -S'number' -p23689 -ssS'entity_type' -p23690 -(dp23691 -S'editable' -p23692 -I00 -sS'value' -p23693 -S'Element' -p23694 -ssS'editable' -p23695 -(dp23696 -S'editable' -p23697 -I00 -sS'value' -p23698 -I01 -ssS'unique' -p23699 -(dp23700 -S'editable' -p23701 -I00 -sS'value' -p23702 -I00 -ssS'properties' -p23703 -(dp23704 -S'default_value' -p23705 -(dp23706 -S'editable' -p23707 -I00 -sS'value' -p23708 -NssS'summary_default' -p23709 -(dp23710 -S'editable' -p23711 -I01 -sS'value' -p23712 -S'none' -p23713 -sssS'description' -p23714 -(dp23715 -S'editable' -p23716 -I01 -sS'value' -p23717 -g47 -sssS'cut_out' -p23718 -(dp23719 -S'mandatory' -p23720 -(dp23721 -S'editable' -p23722 -I00 -sS'value' -p23723 -I00 -ssS'name' -p23724 -(dp23725 -S'editable' -p23726 -I01 -sS'value' -p23727 -S'Raw Cut Out' -p23728 -ssS'data_type' -p23729 -(dp23730 -S'editable' -p23731 -I00 -sS'value' -p23732 -S'number' -p23733 -ssS'entity_type' -p23734 -(dp23735 -S'editable' -p23736 -I00 -sS'value' -p23737 -S'Element' -p23738 -ssS'editable' -p23739 -(dp23740 -S'editable' -p23741 -I00 -sS'value' -p23742 -I01 -ssS'unique' -p23743 -(dp23744 -S'editable' -p23745 -I00 -sS'value' -p23746 -I00 -ssS'properties' -p23747 -(dp23748 -S'default_value' -p23749 -(dp23750 -S'editable' -p23751 -I00 -sS'value' -p23752 -NssS'summary_default' -p23753 -(dp23754 -S'editable' -p23755 -I01 -sS'value' -p23756 -S'none' -p23757 -sssS'description' -p23758 -(dp23759 -S'editable' -p23760 -I01 -sS'value' -p23761 -g47 -sssS'head_out' -p23762 -(dp23763 -S'mandatory' -p23764 -(dp23765 -S'editable' -p23766 -I00 -sS'value' -p23767 -I00 -ssS'name' -p23768 -(dp23769 -S'editable' -p23770 -I01 -sS'value' -p23771 -S'Raw Head Out' -p23772 -ssS'data_type' -p23773 -(dp23774 -S'editable' -p23775 -I00 -sS'value' -p23776 -S'number' -p23777 -ssS'entity_type' -p23778 -(dp23779 -S'editable' -p23780 -I00 -sS'value' -p23781 -S'Element' -p23782 -ssS'editable' -p23783 -(dp23784 -S'editable' -p23785 -I00 -sS'value' -p23786 -I01 -ssS'unique' -p23787 -(dp23788 -S'editable' -p23789 -I00 -sS'value' -p23790 -I00 -ssS'properties' -p23791 -(dp23792 -S'default_value' -p23793 -(dp23794 -S'editable' -p23795 -I00 -sS'value' -p23796 -NssS'summary_default' -p23797 -(dp23798 -S'editable' -p23799 -I01 -sS'value' -p23800 -S'none' -p23801 -sssS'description' -p23802 -(dp23803 -S'editable' -p23804 -I01 -sS'value' -p23805 -g47 -sssS'notes' -p23806 -(dp23807 -S'mandatory' -p23808 -(dp23809 -S'editable' -p23810 -I00 -sS'value' -p23811 -I00 -ssS'name' -p23812 -(dp23813 -S'editable' -p23814 -I01 -sS'value' -p23815 -S'Notes' -p23816 -ssS'data_type' -p23817 -(dp23818 -S'editable' -p23819 -I00 -sS'value' -p23820 -S'multi_entity' -p23821 -ssS'entity_type' -p23822 -(dp23823 -S'editable' -p23824 -I00 -sS'value' -p23825 -S'Element' -p23826 -ssS'editable' -p23827 -(dp23828 -S'editable' -p23829 -I00 -sS'value' -p23830 -I01 -ssS'unique' -p23831 -(dp23832 -S'editable' -p23833 -I00 -sS'value' -p23834 -I00 -ssS'properties' -p23835 -(dp23836 -S'default_value' -p23837 -(dp23838 -S'editable' -p23839 -I00 -sS'value' -p23840 -NssS'summary_default' -p23841 -(dp23842 -S'editable' -p23843 -I01 -sS'value' -p23844 -S'none' -p23845 -ssS'valid_types' -p23846 -(dp23847 -S'editable' -p23848 -I01 -sS'value' -p23849 -(lp23850 -S'Note' -p23851 -asssS'description' -p23852 -(dp23853 -S'editable' -p23854 -I01 -sS'value' -p23855 -g47 -ssssS'TankType' -p23856 -(dp23857 -S'code' -p23858 -(dp23859 -S'mandatory' -p23860 -(dp23861 -S'editable' -p23862 -I00 -sS'value' -p23863 -I01 -ssS'name' -p23864 -(dp23865 -S'editable' -p23866 -I01 -sS'value' -p23867 -S'Tank Type Name' -p23868 -ssS'data_type' -p23869 -(dp23870 -S'editable' -p23871 -I00 -sS'value' -p23872 -S'text' -p23873 -ssS'entity_type' -p23874 -(dp23875 -S'editable' -p23876 -I00 -sS'value' -p23877 -S'TankType' -p23878 -ssS'editable' -p23879 -(dp23880 -S'editable' -p23881 -I00 -sS'value' -p23882 -I01 -ssS'unique' -p23883 -(dp23884 -S'editable' -p23885 -I00 -sS'value' -p23886 -I01 -ssS'properties' -p23887 -(dp23888 -S'default_value' -p23889 -(dp23890 -S'editable' -p23891 -I00 -sS'value' -p23892 -NssS'summary_default' -p23893 -(dp23894 -S'editable' -p23895 -I01 -sS'value' -p23896 -S'none' -p23897 -sssS'description' -p23898 -(dp23899 -S'editable' -p23900 -I01 -sS'value' -p23901 -g47 -sssS'description' -p23902 -(dp23903 -S'mandatory' -p23904 -(dp23905 -S'editable' -p23906 -I00 -sS'value' -p23907 -I00 -ssS'name' -p23908 -(dp23909 -S'editable' -p23910 -I01 -sS'value' -p23911 -S'Description' -p23912 -ssS'data_type' -p23913 -(dp23914 -S'editable' -p23915 -I00 -sS'value' -p23916 -S'text' -p23917 -ssS'entity_type' -p23918 -(dp23919 -S'editable' -p23920 -I00 -sS'value' -p23921 -S'TankType' -p23922 -ssS'editable' -p23923 -(dp23924 -S'editable' -p23925 -I00 -sS'value' -p23926 -I01 -ssS'unique' -p23927 -(dp23928 -S'editable' -p23929 -I00 -sS'value' -p23930 -I00 -ssS'properties' -p23931 -(dp23932 -S'default_value' -p23933 -(dp23934 -S'editable' -p23935 -I00 -sS'value' -p23936 -NssS'summary_default' -p23937 -(dp23938 -S'editable' -p23939 -I01 -sS'value' -p23940 -S'none' -p23941 -sssS'description' -p23942 -(dp23943 -S'editable' -p23944 -I01 -sS'value' -p23945 -g47 -sssS'created_at' -p23946 -(dp23947 -S'mandatory' -p23948 -(dp23949 -S'editable' -p23950 -I00 -sS'value' -p23951 -I00 -ssS'name' -p23952 -(dp23953 -S'editable' -p23954 -I01 -sS'value' -p23955 -S'Date Created' -p23956 -ssS'data_type' -p23957 -(dp23958 -S'editable' -p23959 -I00 -sS'value' -p23960 -S'date_time' -p23961 -ssS'entity_type' -p23962 -(dp23963 -S'editable' -p23964 -I00 -sS'value' -p23965 -S'TankType' -p23966 -ssS'editable' -p23967 -(dp23968 -S'editable' -p23969 -I00 -sS'value' -p23970 -I00 -ssS'unique' -p23971 -(dp23972 -S'editable' -p23973 -I00 -sS'value' -p23974 -I00 -ssS'properties' -p23975 -(dp23976 -S'default_value' -p23977 -(dp23978 -S'editable' -p23979 -I00 -sS'value' -p23980 -NssS'summary_default' -p23981 -(dp23982 -S'editable' -p23983 -I01 -sS'value' -p23984 -S'none' -p23985 -sssS'description' -p23986 -(dp23987 -S'editable' -p23988 -I01 -sS'value' -p23989 -g47 -sssS'updated_at' -p23990 -(dp23991 -S'mandatory' -p23992 -(dp23993 -S'editable' -p23994 -I00 -sS'value' -p23995 -I00 -ssS'name' -p23996 -(dp23997 -S'editable' -p23998 -I01 -sS'value' -p23999 -S'Date Updated' -p24000 -ssS'data_type' -p24001 -(dp24002 -S'editable' -p24003 -I00 -sS'value' -p24004 -S'date_time' -p24005 -ssS'entity_type' -p24006 -(dp24007 -S'editable' -p24008 -I00 -sS'value' -p24009 -S'TankType' -p24010 -ssS'editable' -p24011 -(dp24012 -S'editable' -p24013 -I00 -sS'value' -p24014 -I00 -ssS'unique' -p24015 -(dp24016 -S'editable' -p24017 -I00 -sS'value' -p24018 -I00 -ssS'properties' -p24019 -(dp24020 -S'default_value' -p24021 -(dp24022 -S'editable' -p24023 -I00 -sS'value' -p24024 -NssS'summary_default' -p24025 -(dp24026 -S'editable' -p24027 -I01 -sS'value' -p24028 -S'none' -p24029 -sssS'description' -p24030 -(dp24031 -S'editable' -p24032 -I01 -sS'value' -p24033 -g47 -sssS'created_by' -p24034 -(dp24035 -S'mandatory' -p24036 -(dp24037 -S'editable' -p24038 -I00 -sS'value' -p24039 -I00 -ssS'name' -p24040 -(dp24041 -S'editable' -p24042 -I01 -sS'value' -p24043 -S'Created by' -p24044 -ssS'data_type' -p24045 -(dp24046 -S'editable' -p24047 -I00 -sS'value' -p24048 -S'entity' -p24049 -ssS'entity_type' -p24050 -(dp24051 -S'editable' -p24052 -I00 -sS'value' -p24053 -S'TankType' -p24054 -ssS'editable' -p24055 -(dp24056 -S'editable' -p24057 -I00 -sS'value' -p24058 -I00 -ssS'unique' -p24059 -(dp24060 -S'editable' -p24061 -I00 -sS'value' -p24062 -I00 -ssS'properties' -p24063 -(dp24064 -S'default_value' -p24065 -(dp24066 -S'editable' -p24067 -I00 -sS'value' -p24068 -NssS'summary_default' -p24069 -(dp24070 -S'editable' -p24071 -I01 -sS'value' -p24072 -S'none' -p24073 -ssS'valid_types' -p24074 -(dp24075 -S'editable' -p24076 -I01 -sS'value' -p24077 -(lp24078 -S'HumanUser' -p24079 -aS'ApiUser' -p24080 -asssS'description' -p24081 -(dp24082 -S'editable' -p24083 -I01 -sS'value' -p24084 -g47 -sssS'project' -p24085 -(dp24086 -S'mandatory' -p24087 -(dp24088 -S'editable' -p24089 -I00 -sS'value' -p24090 -I00 -ssS'name' -p24091 -(dp24092 -S'editable' -p24093 -I01 -sS'value' -p24094 -S'Project' -p24095 -ssS'data_type' -p24096 -(dp24097 -S'editable' -p24098 -I00 -sS'value' -p24099 -S'entity' -p24100 -ssS'entity_type' -p24101 -(dp24102 -S'editable' -p24103 -I00 -sS'value' -p24104 -S'TankType' -p24105 -ssS'editable' -p24106 -(dp24107 -S'editable' -p24108 -I00 -sS'value' -p24109 -I01 -ssS'unique' -p24110 -(dp24111 -S'editable' -p24112 -I00 -sS'value' -p24113 -I00 -ssS'properties' -p24114 -(dp24115 -S'default_value' -p24116 -(dp24117 -S'editable' -p24118 -I00 -sS'value' -p24119 -NssS'summary_default' -p24120 -(dp24121 -S'editable' -p24122 -I01 -sS'value' -p24123 -S'none' -p24124 -ssS'valid_types' -p24125 -(dp24126 -S'editable' -p24127 -I01 -sS'value' -p24128 -(lp24129 -S'Project' -p24130 -asssS'description' -p24131 -(dp24132 -S'editable' -p24133 -I01 -sS'value' -p24134 -g47 -sssS'sg_status_list' -p24135 -(dp24136 -S'mandatory' -p24137 -(dp24138 -S'editable' -p24139 -I00 -sS'value' -p24140 -I00 -ssS'name' -p24141 -(dp24142 -S'editable' -p24143 -I01 -sS'value' -p24144 -S'Status' -p24145 -ssS'data_type' -p24146 -(dp24147 -S'editable' -p24148 -I00 -sS'value' -p24149 -S'status_list' -p24150 -ssS'entity_type' -p24151 -(dp24152 -S'editable' -p24153 -I00 -sS'value' -p24154 -S'TankType' -p24155 -ssS'editable' -p24156 -(dp24157 -S'editable' -p24158 -I00 -sS'value' -p24159 -I01 -ssS'unique' -p24160 -(dp24161 -S'editable' -p24162 -I00 -sS'value' -p24163 -I00 -ssS'properties' -p24164 -(dp24165 -S'default_value' -p24166 -(dp24167 -S'editable' -p24168 -I01 -sS'value' -p24169 -S'wtg' -p24170 -ssS'valid_values' -p24171 -(dp24172 -S'editable' -p24173 -I01 -sS'value' -p24174 -(lp24175 -S'wtg' -p24176 -aS'ip' -p24177 -aS'cmpt' -p24178 -assS'summary_default' -p24179 -(dp24180 -S'editable' -p24181 -I01 -sS'value' -p24182 -S'none' -p24183 -sssS'description' -p24184 -(dp24185 -S'editable' -p24186 -I01 -sS'value' -p24187 -g47 -sssS'image' -p24188 -(dp24189 -S'mandatory' -p24190 -(dp24191 -S'editable' -p24192 -I00 -sS'value' -p24193 -I00 -ssS'name' -p24194 -(dp24195 -S'editable' -p24196 -I01 -sS'value' -p24197 -S'Thumbnail' -p24198 -ssS'data_type' -p24199 -(dp24200 -S'editable' -p24201 -I00 -sS'value' -p24202 -S'image' -p24203 -ssS'entity_type' -p24204 -(dp24205 -S'editable' -p24206 -I00 -sS'value' -p24207 -S'TankType' -p24208 -ssS'editable' -p24209 -(dp24210 -S'editable' -p24211 -I00 -sS'value' -p24212 -I01 -ssS'unique' -p24213 -(dp24214 -S'editable' -p24215 -I00 -sS'value' -p24216 -I00 -ssS'properties' -p24217 -(dp24218 -S'default_value' -p24219 -(dp24220 -S'editable' -p24221 -I00 -sS'value' -p24222 -NssS'summary_default' -p24223 -(dp24224 -S'editable' -p24225 -I01 -sS'value' -p24226 -S'none' -p24227 -sssS'description' -p24228 -(dp24229 -S'editable' -p24230 -I01 -sS'value' -p24231 -g47 -sssS'cached_display_name' -p24232 -(dp24233 -S'mandatory' -p24234 -(dp24235 -S'editable' -p24236 -I00 -sS'value' -p24237 -I00 -ssS'name' -p24238 -(dp24239 -S'editable' -p24240 -I01 -sS'value' -p24241 -S'Cached Display Name' -p24242 -ssS'data_type' -p24243 -(dp24244 -S'editable' -p24245 -I00 -sS'value' -p24246 -S'text' -p24247 -ssS'entity_type' -p24248 -(dp24249 -S'editable' -p24250 -I00 -sS'value' -p24251 -S'TankType' -p24252 -ssS'editable' -p24253 -(dp24254 -S'editable' -p24255 -I00 -sS'value' -p24256 -I01 -ssS'unique' -p24257 -(dp24258 -S'editable' -p24259 -I00 -sS'value' -p24260 -I00 -ssS'properties' -p24261 -(dp24262 -S'default_value' -p24263 -(dp24264 -S'editable' -p24265 -I00 -sS'value' -p24266 -NssS'summary_default' -p24267 -(dp24268 -S'editable' -p24269 -I00 -sS'value' -p24270 -S'none' -p24271 -sssS'description' -p24272 -(dp24273 -S'editable' -p24274 -I01 -sS'value' -p24275 -g47 -sssS'tag_list' -p24276 -(dp24277 -S'mandatory' -p24278 -(dp24279 -S'editable' -p24280 -I00 -sS'value' -p24281 -I00 -ssS'name' -p24282 -(dp24283 -S'editable' -p24284 -I01 -sS'value' -p24285 -S'Tags' -p24286 -ssS'data_type' -p24287 -(dp24288 -S'editable' -p24289 -I00 -sS'value' -p24290 -S'tag_list' -p24291 -ssS'entity_type' -p24292 -(dp24293 -S'editable' -p24294 -I00 -sS'value' -p24295 -S'TankType' -p24296 -ssS'editable' -p24297 -(dp24298 -S'editable' -p24299 -I00 -sS'value' -p24300 -I01 -ssS'unique' -p24301 -(dp24302 -S'editable' -p24303 -I00 -sS'value' -p24304 -I00 -ssS'properties' -p24305 -(dp24306 -S'default_value' -p24307 -(dp24308 -S'editable' -p24309 -I00 -sS'value' -p24310 -NssS'summary_default' -p24311 -(dp24312 -S'editable' -p24313 -I01 -sS'value' -p24314 -S'none' -p24315 -ssS'valid_types' -p24316 -(dp24317 -S'editable' -p24318 -I01 -sS'value' -p24319 -(lp24320 -S'Tag' -p24321 -asssS'description' -p24322 -(dp24323 -S'editable' -p24324 -I01 -sS'value' -p24325 -g47 -sssS'id' -p24326 -(dp24327 -S'mandatory' -p24328 -(dp24329 -S'editable' -p24330 -I00 -sS'value' -p24331 -I00 -ssS'name' -p24332 -(dp24333 -S'editable' -p24334 -I01 -sS'value' -p24335 -S'Id' -p24336 -ssS'data_type' -p24337 -(dp24338 -S'editable' -p24339 -I00 -sS'value' -p24340 -S'number' -p24341 -ssS'entity_type' -p24342 -(dp24343 -S'editable' -p24344 -I00 -sS'value' -p24345 -S'TankType' -p24346 -ssS'editable' -p24347 -(dp24348 -S'editable' -p24349 -I00 -sS'value' -p24350 -I00 -ssS'unique' -p24351 -(dp24352 -S'editable' -p24353 -I00 -sS'value' -p24354 -I00 -ssS'properties' -p24355 -(dp24356 -S'default_value' -p24357 -(dp24358 -S'editable' -p24359 -I00 -sS'value' -p24360 -NssS'summary_default' -p24361 -(dp24362 -S'editable' -p24363 -I01 -sS'value' -p24364 -S'none' -p24365 -sssS'description' -p24366 -(dp24367 -S'editable' -p24368 -I01 -sS'value' -p24369 -g47 -sssS'updated_by' -p24370 -(dp24371 -S'mandatory' -p24372 -(dp24373 -S'editable' -p24374 -I00 -sS'value' -p24375 -I00 -ssS'name' -p24376 -(dp24377 -S'editable' -p24378 -I01 -sS'value' -p24379 -S'Updated by' -p24380 -ssS'data_type' -p24381 -(dp24382 -S'editable' -p24383 -I00 -sS'value' -p24384 -S'entity' -p24385 -ssS'entity_type' -p24386 -(dp24387 -S'editable' -p24388 -I00 -sS'value' -p24389 -S'TankType' -p24390 -ssS'editable' -p24391 -(dp24392 -S'editable' -p24393 -I00 -sS'value' -p24394 -I00 -ssS'unique' -p24395 -(dp24396 -S'editable' -p24397 -I00 -sS'value' -p24398 -I00 -ssS'properties' -p24399 -(dp24400 -S'default_value' -p24401 -(dp24402 -S'editable' -p24403 -I00 -sS'value' -p24404 -NssS'summary_default' -p24405 -(dp24406 -S'editable' -p24407 -I01 -sS'value' -p24408 -S'none' -p24409 -ssS'valid_types' -p24410 -(dp24411 -S'editable' -p24412 -I01 -sS'value' -p24413 -(lp24414 -S'HumanUser' -p24415 -aS'ApiUser' -p24416 -asssS'description' -p24417 -(dp24418 -S'editable' -p24419 -I01 -sS'value' -p24420 -g47 -ssssS'Icon' -p24421 -(dp24422 -S'image_map_key' -p24423 -(dp24424 -S'mandatory' -p24425 -(dp24426 -S'editable' -p24427 -I00 -sS'value' -p24428 -I00 -ssS'name' -p24429 -(dp24430 -S'editable' -p24431 -I01 -sS'value' -p24432 -S'Image Map Key' -p24433 -ssS'data_type' -p24434 -(dp24435 -S'editable' -p24436 -I00 -sS'value' -p24437 -S'text' -p24438 -ssS'entity_type' -p24439 -(dp24440 -S'editable' -p24441 -I00 -sS'value' -p24442 -S'Icon' -p24443 -ssS'editable' -p24444 -(dp24445 -S'editable' -p24446 -I00 -sS'value' -p24447 -I00 -ssS'unique' -p24448 -(dp24449 -S'editable' -p24450 -I00 -sS'value' -p24451 -I00 -ssS'properties' -p24452 -(dp24453 -S'default_value' -p24454 -(dp24455 -S'editable' -p24456 -I00 -sS'value' -p24457 -NssS'summary_default' -p24458 -(dp24459 -S'editable' -p24460 -I01 -sS'value' -p24461 -S'none' -p24462 -sssS'description' -p24463 -(dp24464 -S'editable' -p24465 -I01 -sS'value' -p24466 -g47 -sssS'uuid' -p24467 -(dp24468 -S'mandatory' -p24469 -(dp24470 -S'editable' -p24471 -I00 -sS'value' -p24472 -I00 -ssS'name' -p24473 -(dp24474 -S'editable' -p24475 -I01 -sS'value' -p24476 -S'UUID' -p24477 -ssS'data_type' -p24478 -(dp24479 -S'editable' -p24480 -I00 -sS'value' -p24481 -S'uuid' -p24482 -ssS'entity_type' -p24483 -(dp24484 -S'editable' -p24485 -I00 -sS'value' -p24486 -S'Icon' -p24487 -ssS'editable' -p24488 -(dp24489 -S'editable' -p24490 -I00 -sS'value' -p24491 -I00 -ssS'unique' -p24492 -(dp24493 -S'editable' -p24494 -I00 -sS'value' -p24495 -I00 -ssS'properties' -p24496 -(dp24497 -S'default_value' -p24498 -(dp24499 -S'editable' -p24500 -I00 -sS'value' -p24501 -NssS'summary_default' -p24502 -(dp24503 -S'editable' -p24504 -I00 -sS'value' -p24505 -S'none' -p24506 -sssS'description' -p24507 -(dp24508 -S'editable' -p24509 -I01 -sS'value' -p24510 -g47 -sssS'icon_type' -p24511 -(dp24512 -S'mandatory' -p24513 -(dp24514 -S'editable' -p24515 -I00 -sS'value' -p24516 -I00 -ssS'name' -p24517 -(dp24518 -S'editable' -p24519 -I01 -sS'value' -p24520 -S'Icon Type' -p24521 -ssS'data_type' -p24522 -(dp24523 -S'editable' -p24524 -I00 -sS'value' -p24525 -S'list' -p24526 -ssS'entity_type' -p24527 -(dp24528 -S'editable' -p24529 -I00 -sS'value' -p24530 -S'Icon' -p24531 -ssS'editable' -p24532 -(dp24533 -S'editable' -p24534 -I00 -sS'value' -p24535 -I00 -ssS'unique' -p24536 -(dp24537 -S'editable' -p24538 -I00 -sS'value' -p24539 -I00 -ssS'properties' -p24540 -(dp24541 -S'default_value' -p24542 -(dp24543 -S'editable' -p24544 -I00 -sS'value' -p24545 -NssS'valid_values' -p24546 -(dp24547 -S'editable' -p24548 -I01 -sS'value' -p24549 -(lp24550 -S'permanent_status' -p24551 -aS'custom_status' -p24552 -assS'summary_default' -p24553 -(dp24554 -S'editable' -p24555 -I01 -sS'value' -p24556 -S'none' -p24557 -sssS'description' -p24558 -(dp24559 -S'editable' -p24560 -I01 -sS'value' -p24561 -g47 -sssS'url' -p24562 -(dp24563 -S'mandatory' -p24564 -(dp24565 -S'editable' -p24566 -I00 -sS'value' -p24567 -I00 -ssS'name' -p24568 -(dp24569 -S'editable' -p24570 -I01 -sS'value' -p24571 -S'Icon URL' -p24572 -ssS'data_type' -p24573 -(dp24574 -S'editable' -p24575 -I00 -sS'value' -p24576 -S'text' -p24577 -ssS'entity_type' -p24578 -(dp24579 -S'editable' -p24580 -I00 -sS'value' -p24581 -S'Icon' -p24582 -ssS'editable' -p24583 -(dp24584 -S'editable' -p24585 -I00 -sS'value' -p24586 -I00 -ssS'unique' -p24587 -(dp24588 -S'editable' -p24589 -I00 -sS'value' -p24590 -I00 -ssS'properties' -p24591 -(dp24592 -S'default_value' -p24593 -(dp24594 -S'editable' -p24595 -I00 -sS'value' -p24596 -NssS'summary_default' -p24597 -(dp24598 -S'editable' -p24599 -I00 -sS'value' -p24600 -S'none' -p24601 -sssS'description' -p24602 -(dp24603 -S'editable' -p24604 -I01 -sS'value' -p24605 -g47 -sssS'html' -p24606 -(dp24607 -S'mandatory' -p24608 -(dp24609 -S'editable' -p24610 -I00 -sS'value' -p24611 -I00 -ssS'name' -p24612 -(dp24613 -S'editable' -p24614 -I01 -sS'value' -p24615 -S'Icon HTML' -p24616 -ssS'data_type' -p24617 -(dp24618 -S'editable' -p24619 -I00 -sS'value' -p24620 -S'text' -p24621 -ssS'entity_type' -p24622 -(dp24623 -S'editable' -p24624 -I00 -sS'value' -p24625 -S'Icon' -p24626 -ssS'editable' -p24627 -(dp24628 -S'editable' -p24629 -I00 -sS'value' -p24630 -I00 -ssS'unique' -p24631 -(dp24632 -S'editable' -p24633 -I00 -sS'value' -p24634 -I00 -ssS'properties' -p24635 -(dp24636 -S'default_value' -p24637 -(dp24638 -S'editable' -p24639 -I00 -sS'value' -p24640 -NssS'summary_default' -p24641 -(dp24642 -S'editable' -p24643 -I01 -sS'value' -p24644 -S'none' -p24645 -sssS'description' -p24646 -(dp24647 -S'editable' -p24648 -I01 -sS'value' -p24649 -g47 -sssS'display_type' -p24650 -(dp24651 -S'mandatory' -p24652 -(dp24653 -S'editable' -p24654 -I00 -sS'value' -p24655 -I00 -ssS'name' -p24656 -(dp24657 -S'editable' -p24658 -I01 -sS'value' -p24659 -S'Display Type' -p24660 -ssS'data_type' -p24661 -(dp24662 -S'editable' -p24663 -I00 -sS'value' -p24664 -S'list' -p24665 -ssS'entity_type' -p24666 -(dp24667 -S'editable' -p24668 -I00 -sS'value' -p24669 -S'Icon' -p24670 -ssS'editable' -p24671 -(dp24672 -S'editable' -p24673 -I00 -sS'value' -p24674 -I00 -ssS'unique' -p24675 -(dp24676 -S'editable' -p24677 -I00 -sS'value' -p24678 -I00 -ssS'properties' -p24679 -(dp24680 -S'default_value' -p24681 -(dp24682 -S'editable' -p24683 -I00 -sS'value' -p24684 -NssS'valid_values' -p24685 -(dp24686 -S'editable' -p24687 -I01 -sS'value' -p24688 -(lp24689 -S'html' -p24690 -aS'image' -p24691 -aS'image_map' -p24692 -assS'summary_default' -p24693 -(dp24694 -S'editable' -p24695 -I01 -sS'value' -p24696 -S'none' -p24697 -sssS'description' -p24698 -(dp24699 -S'editable' -p24700 -I01 -sS'value' -p24701 -g47 -sssS'image_data' -p24702 -(dp24703 -S'mandatory' -p24704 -(dp24705 -S'editable' -p24706 -I00 -sS'value' -p24707 -I00 -ssS'name' -p24708 -(dp24709 -S'editable' -p24710 -I01 -sS'value' -p24711 -S'Image Data' -p24712 -ssS'data_type' -p24713 -(dp24714 -S'editable' -p24715 -I00 -sS'value' -p24716 -S'text' -p24717 -ssS'entity_type' -p24718 -(dp24719 -S'editable' -p24720 -I00 -sS'value' -p24721 -S'Icon' -p24722 -ssS'editable' -p24723 -(dp24724 -S'editable' -p24725 -I00 -sS'value' -p24726 -I00 -ssS'unique' -p24727 -(dp24728 -S'editable' -p24729 -I00 -sS'value' -p24730 -I00 -ssS'properties' -p24731 -(dp24732 -S'default_value' -p24733 -(dp24734 -S'editable' -p24735 -I00 -sS'value' -p24736 -NssS'summary_default' -p24737 -(dp24738 -S'editable' -p24739 -I01 -sS'value' -p24740 -S'none' -p24741 -sssS'description' -p24742 -(dp24743 -S'editable' -p24744 -I01 -sS'value' -p24745 -g47 -sssS'cached_display_name' -p24746 -(dp24747 -S'mandatory' -p24748 -(dp24749 -S'editable' -p24750 -I00 -sS'value' -p24751 -I00 -ssS'name' -p24752 -(dp24753 -S'editable' -p24754 -I01 -sS'value' -p24755 -S'Cached Display Name' -p24756 -ssS'data_type' -p24757 -(dp24758 -S'editable' -p24759 -I00 -sS'value' -p24760 -S'text' -p24761 -ssS'entity_type' -p24762 -(dp24763 -S'editable' -p24764 -I00 -sS'value' -p24765 -S'Icon' -p24766 -ssS'editable' -p24767 -(dp24768 -S'editable' -p24769 -I00 -sS'value' -p24770 -I00 -ssS'unique' -p24771 -(dp24772 -S'editable' -p24773 -I00 -sS'value' -p24774 -I00 -ssS'properties' -p24775 -(dp24776 -S'default_value' -p24777 -(dp24778 -S'editable' -p24779 -I00 -sS'value' -p24780 -NssS'summary_default' -p24781 -(dp24782 -S'editable' -p24783 -I00 -sS'value' -p24784 -S'none' -p24785 -sssS'description' -p24786 -(dp24787 -S'editable' -p24788 -I01 -sS'value' -p24789 -g47 -sssS'id' -p24790 -(dp24791 -S'mandatory' -p24792 -(dp24793 -S'editable' -p24794 -I00 -sS'value' -p24795 -I00 -ssS'name' -p24796 -(dp24797 -S'editable' -p24798 -I01 -sS'value' -p24799 -S'Id' -p24800 -ssS'data_type' -p24801 -(dp24802 -S'editable' -p24803 -I00 -sS'value' -p24804 -S'number' -p24805 -ssS'entity_type' -p24806 -(dp24807 -S'editable' -p24808 -I00 -sS'value' -p24809 -S'Icon' -p24810 -ssS'editable' -p24811 -(dp24812 -S'editable' -p24813 -I00 -sS'value' -p24814 -I00 -ssS'unique' -p24815 -(dp24816 -S'editable' -p24817 -I00 -sS'value' -p24818 -I00 -ssS'properties' -p24819 -(dp24820 -S'default_value' -p24821 -(dp24822 -S'editable' -p24823 -I00 -sS'value' -p24824 -NssS'summary_default' -p24825 -(dp24826 -S'editable' -p24827 -I00 -sS'value' -p24828 -S'none' -p24829 -sssS'description' -p24830 -(dp24831 -S'editable' -p24832 -I01 -sS'value' -p24833 -g47 -sssS'name' -p24834 -(dp24835 -S'mandatory' -p24836 -(dp24837 -S'editable' -p24838 -I00 -sS'value' -p24839 -I00 -ssS'name' -p24840 -(dp24841 -S'editable' -p24842 -I01 -sS'value' -p24843 -S'Status Name' -p24844 -ssS'data_type' -p24845 -(dp24846 -S'editable' -p24847 -I00 -sS'value' -p24848 -S'text' -p24849 -ssS'entity_type' -p24850 -(dp24851 -S'editable' -p24852 -I00 -sS'value' -p24853 -S'Icon' -p24854 -ssS'editable' -p24855 -(dp24856 -S'editable' -p24857 -I00 -sS'value' -p24858 -I00 -ssS'unique' -p24859 -(dp24860 -S'editable' -p24861 -I00 -sS'value' -p24862 -I00 -ssS'properties' -p24863 -(dp24864 -S'default_value' -p24865 -(dp24866 -S'editable' -p24867 -I00 -sS'value' -p24868 -NssS'summary_default' -p24869 -(dp24870 -S'editable' -p24871 -I01 -sS'value' -p24872 -S'none' -p24873 -sssS'description' -p24874 -(dp24875 -S'editable' -p24876 -I01 -sS'value' -p24877 -g47 -ssssS'LocalStorage' -p24878 -(dp24879 -S'code' -p24880 -(dp24881 -S'mandatory' -p24882 -(dp24883 -S'editable' -p24884 -I00 -sS'value' -p24885 -I01 -ssS'name' -p24886 -(dp24887 -S'editable' -p24888 -I01 -sS'value' -p24889 -S'Local Storage Name' -p24890 -ssS'data_type' -p24891 -(dp24892 -S'editable' -p24893 -I00 -sS'value' -p24894 -S'text' -p24895 -ssS'entity_type' -p24896 -(dp24897 -S'editable' -p24898 -I00 -sS'value' -p24899 -S'LocalStorage' -p24900 -ssS'editable' -p24901 -(dp24902 -S'editable' -p24903 -I00 -sS'value' -p24904 -I01 -ssS'unique' -p24905 -(dp24906 -S'editable' -p24907 -I00 -sS'value' -p24908 -I00 -ssS'properties' -p24909 -(dp24910 -S'default_value' -p24911 -(dp24912 -S'editable' -p24913 -I00 -sS'value' -p24914 -NssS'summary_default' -p24915 -(dp24916 -S'editable' -p24917 -I00 -sS'value' -p24918 -S'none' -p24919 -sssS'description' -p24920 -(dp24921 -S'editable' -p24922 -I01 -sS'value' -p24923 -g47 -sssS'uuid' -p24924 -(dp24925 -S'mandatory' -p24926 -(dp24927 -S'editable' -p24928 -I00 -sS'value' -p24929 -I00 -ssS'name' -p24930 -(dp24931 -S'editable' -p24932 -I01 -sS'value' -p24933 -S'UUID' -p24934 -ssS'data_type' -p24935 -(dp24936 -S'editable' -p24937 -I00 -sS'value' -p24938 -S'uuid' -p24939 -ssS'entity_type' -p24940 -(dp24941 -S'editable' -p24942 -I00 -sS'value' -p24943 -S'LocalStorage' -p24944 -ssS'editable' -p24945 -(dp24946 -S'editable' -p24947 -I00 -sS'value' -p24948 -I00 -ssS'unique' -p24949 -(dp24950 -S'editable' -p24951 -I00 -sS'value' -p24952 -I00 -ssS'properties' -p24953 -(dp24954 -S'default_value' -p24955 -(dp24956 -S'editable' -p24957 -I00 -sS'value' -p24958 -NssS'summary_default' -p24959 -(dp24960 -S'editable' -p24961 -I00 -sS'value' -p24962 -S'none' -p24963 -sssS'description' -p24964 -(dp24965 -S'editable' -p24966 -I01 -sS'value' -p24967 -g47 -sssS'mac_path' -p24968 -(dp24969 -S'mandatory' -p24970 -(dp24971 -S'editable' -p24972 -I00 -sS'value' -p24973 -I00 -ssS'name' -p24974 -(dp24975 -S'editable' -p24976 -I01 -sS'value' -p24977 -S'Mac Path' -p24978 -ssS'data_type' -p24979 -(dp24980 -S'editable' -p24981 -I00 -sS'value' -p24982 -S'text' -p24983 -ssS'entity_type' -p24984 -(dp24985 -S'editable' -p24986 -I00 -sS'value' -p24987 -S'LocalStorage' -p24988 -ssS'editable' -p24989 -(dp24990 -S'editable' -p24991 -I00 -sS'value' -p24992 -I01 -ssS'unique' -p24993 -(dp24994 -S'editable' -p24995 -I00 -sS'value' -p24996 -I00 -ssS'properties' -p24997 -(dp24998 -S'default_value' -p24999 -(dp25000 -S'editable' -p25001 -I00 -sS'value' -p25002 -NssS'summary_default' -p25003 -(dp25004 -S'editable' -p25005 -I00 -sS'value' -p25006 -S'none' -p25007 -sssS'description' -p25008 -(dp25009 -S'editable' -p25010 -I01 -sS'value' -p25011 -g47 -sssS'created_at' -p25012 -(dp25013 -S'mandatory' -p25014 -(dp25015 -S'editable' -p25016 -I00 -sS'value' -p25017 -I00 -ssS'name' -p25018 -(dp25019 -S'editable' -p25020 -I01 -sS'value' -p25021 -S'Date Created' -p25022 -ssS'data_type' -p25023 -(dp25024 -S'editable' -p25025 -I00 -sS'value' -p25026 -S'date_time' -p25027 -ssS'entity_type' -p25028 -(dp25029 -S'editable' -p25030 -I00 -sS'value' -p25031 -S'LocalStorage' -p25032 -ssS'editable' -p25033 -(dp25034 -S'editable' -p25035 -I00 -sS'value' -p25036 -I00 -ssS'unique' -p25037 -(dp25038 -S'editable' -p25039 -I00 -sS'value' -p25040 -I00 -ssS'properties' -p25041 -(dp25042 -S'default_value' -p25043 -(dp25044 -S'editable' -p25045 -I00 -sS'value' -p25046 -NssS'summary_default' -p25047 -(dp25048 -S'editable' -p25049 -I00 -sS'value' -p25050 -S'none' -p25051 -sssS'description' -p25052 -(dp25053 -S'editable' -p25054 -I01 -sS'value' -p25055 -g47 -sssS'updated_at' -p25056 -(dp25057 -S'mandatory' -p25058 -(dp25059 -S'editable' -p25060 -I00 -sS'value' -p25061 -I00 -ssS'name' -p25062 -(dp25063 -S'editable' -p25064 -I01 -sS'value' -p25065 -S'Date Updated' -p25066 -ssS'data_type' -p25067 -(dp25068 -S'editable' -p25069 -I00 -sS'value' -p25070 -S'date_time' -p25071 -ssS'entity_type' -p25072 -(dp25073 -S'editable' -p25074 -I00 -sS'value' -p25075 -S'LocalStorage' -p25076 -ssS'editable' -p25077 -(dp25078 -S'editable' -p25079 -I00 -sS'value' -p25080 -I00 -ssS'unique' -p25081 -(dp25082 -S'editable' -p25083 -I00 -sS'value' -p25084 -I00 -ssS'properties' -p25085 -(dp25086 -S'default_value' -p25087 -(dp25088 -S'editable' -p25089 -I00 -sS'value' -p25090 -NssS'summary_default' -p25091 -(dp25092 -S'editable' -p25093 -I00 -sS'value' -p25094 -S'none' -p25095 -sssS'description' -p25096 -(dp25097 -S'editable' -p25098 -I01 -sS'value' -p25099 -g47 -sssS'created_by' -p25100 -(dp25101 -S'mandatory' -p25102 -(dp25103 -S'editable' -p25104 -I00 -sS'value' -p25105 -I00 -ssS'name' -p25106 -(dp25107 -S'editable' -p25108 -I01 -sS'value' -p25109 -S'Created by' -p25110 -ssS'data_type' -p25111 -(dp25112 -S'editable' -p25113 -I00 -sS'value' -p25114 -S'entity' -p25115 -ssS'entity_type' -p25116 -(dp25117 -S'editable' -p25118 -I00 -sS'value' -p25119 -S'LocalStorage' -p25120 -ssS'editable' -p25121 -(dp25122 -S'editable' -p25123 -I00 -sS'value' -p25124 -I00 -ssS'unique' -p25125 -(dp25126 -S'editable' -p25127 -I00 -sS'value' -p25128 -I00 -ssS'properties' -p25129 -(dp25130 -S'default_value' -p25131 -(dp25132 -S'editable' -p25133 -I00 -sS'value' -p25134 -NssS'summary_default' -p25135 -(dp25136 -S'editable' -p25137 -I00 -sS'value' -p25138 -S'none' -p25139 -ssS'valid_types' -p25140 -(dp25141 -S'editable' -p25142 -I00 -sS'value' -p25143 -(lp25144 -S'HumanUser' -p25145 -aS'ApiUser' -p25146 -asssS'description' -p25147 -(dp25148 -S'editable' -p25149 -I01 -sS'value' -p25150 -g47 -sssS'windows_path' -p25151 -(dp25152 -S'mandatory' -p25153 -(dp25154 -S'editable' -p25155 -I00 -sS'value' -p25156 -I00 -ssS'name' -p25157 -(dp25158 -S'editable' -p25159 -I01 -sS'value' -p25160 -S'Windows Path' -p25161 -ssS'data_type' -p25162 -(dp25163 -S'editable' -p25164 -I00 -sS'value' -p25165 -S'text' -p25166 -ssS'entity_type' -p25167 -(dp25168 -S'editable' -p25169 -I00 -sS'value' -p25170 -S'LocalStorage' -p25171 -ssS'editable' -p25172 -(dp25173 -S'editable' -p25174 -I00 -sS'value' -p25175 -I01 -ssS'unique' -p25176 -(dp25177 -S'editable' -p25178 -I00 -sS'value' -p25179 -I00 -ssS'properties' -p25180 -(dp25181 -S'default_value' -p25182 -(dp25183 -S'editable' -p25184 -I00 -sS'value' -p25185 -NssS'summary_default' -p25186 -(dp25187 -S'editable' -p25188 -I00 -sS'value' -p25189 -S'none' -p25190 -sssS'description' -p25191 -(dp25192 -S'editable' -p25193 -I01 -sS'value' -p25194 -g47 -sssS'updated_by' -p25195 -(dp25196 -S'mandatory' -p25197 -(dp25198 -S'editable' -p25199 -I00 -sS'value' -p25200 -I00 -ssS'name' -p25201 -(dp25202 -S'editable' -p25203 -I01 -sS'value' -p25204 -S'Updated by' -p25205 -ssS'data_type' -p25206 -(dp25207 -S'editable' -p25208 -I00 -sS'value' -p25209 -S'entity' -p25210 -ssS'entity_type' -p25211 -(dp25212 -S'editable' -p25213 -I00 -sS'value' -p25214 -S'LocalStorage' -p25215 -ssS'editable' -p25216 -(dp25217 -S'editable' -p25218 -I00 -sS'value' -p25219 -I00 -ssS'unique' -p25220 -(dp25221 -S'editable' -p25222 -I00 -sS'value' -p25223 -I00 -ssS'properties' -p25224 -(dp25225 -S'default_value' -p25226 -(dp25227 -S'editable' -p25228 -I00 -sS'value' -p25229 -NssS'summary_default' -p25230 -(dp25231 -S'editable' -p25232 -I00 -sS'value' -p25233 -S'none' -p25234 -ssS'valid_types' -p25235 -(dp25236 -S'editable' -p25237 -I00 -sS'value' -p25238 -(lp25239 -S'HumanUser' -p25240 -aS'ApiUser' -p25241 -asssS'description' -p25242 -(dp25243 -S'editable' -p25244 -I01 -sS'value' -p25245 -g47 -sssS'cached_display_name' -p25246 -(dp25247 -S'mandatory' -p25248 -(dp25249 -S'editable' -p25250 -I00 -sS'value' -p25251 -I00 -ssS'name' -p25252 -(dp25253 -S'editable' -p25254 -I01 -sS'value' -p25255 -S'Cached Display Name' -p25256 -ssS'data_type' -p25257 -(dp25258 -S'editable' -p25259 -I00 -sS'value' -p25260 -S'text' -p25261 -ssS'entity_type' -p25262 -(dp25263 -S'editable' -p25264 -I00 -sS'value' -p25265 -S'LocalStorage' -p25266 -ssS'editable' -p25267 -(dp25268 -S'editable' -p25269 -I00 -sS'value' -p25270 -I01 -ssS'unique' -p25271 -(dp25272 -S'editable' -p25273 -I00 -sS'value' -p25274 -I00 -ssS'properties' -p25275 -(dp25276 -S'default_value' -p25277 -(dp25278 -S'editable' -p25279 -I00 -sS'value' -p25280 -NssS'summary_default' -p25281 -(dp25282 -S'editable' -p25283 -I00 -sS'value' -p25284 -S'none' -p25285 -sssS'description' -p25286 -(dp25287 -S'editable' -p25288 -I01 -sS'value' -p25289 -g47 -sssS'id' -p25290 -(dp25291 -S'mandatory' -p25292 -(dp25293 -S'editable' -p25294 -I00 -sS'value' -p25295 -I00 -ssS'name' -p25296 -(dp25297 -S'editable' -p25298 -I01 -sS'value' -p25299 -S'Id' -p25300 -ssS'data_type' -p25301 -(dp25302 -S'editable' -p25303 -I00 -sS'value' -p25304 -S'number' -p25305 -ssS'entity_type' -p25306 -(dp25307 -S'editable' -p25308 -I00 -sS'value' -p25309 -S'LocalStorage' -p25310 -ssS'editable' -p25311 -(dp25312 -S'editable' -p25313 -I00 -sS'value' -p25314 -I00 -ssS'unique' -p25315 -(dp25316 -S'editable' -p25317 -I00 -sS'value' -p25318 -I00 -ssS'properties' -p25319 -(dp25320 -S'default_value' -p25321 -(dp25322 -S'editable' -p25323 -I00 -sS'value' -p25324 -NssS'summary_default' -p25325 -(dp25326 -S'editable' -p25327 -I00 -sS'value' -p25328 -S'none' -p25329 -sssS'description' -p25330 -(dp25331 -S'editable' -p25332 -I01 -sS'value' -p25333 -g47 -sssS'linux_path' -p25334 -(dp25335 -S'mandatory' -p25336 -(dp25337 -S'editable' -p25338 -I00 -sS'value' -p25339 -I00 -ssS'name' -p25340 -(dp25341 -S'editable' -p25342 -I01 -sS'value' -p25343 -S'Linux Path' -p25344 -ssS'data_type' -p25345 -(dp25346 -S'editable' -p25347 -I00 -sS'value' -p25348 -S'text' -p25349 -ssS'entity_type' -p25350 -(dp25351 -S'editable' -p25352 -I00 -sS'value' -p25353 -S'LocalStorage' -p25354 -ssS'editable' -p25355 -(dp25356 -S'editable' -p25357 -I00 -sS'value' -p25358 -I01 -ssS'unique' -p25359 -(dp25360 -S'editable' -p25361 -I00 -sS'value' -p25362 -I00 -ssS'properties' -p25363 -(dp25364 -S'default_value' -p25365 -(dp25366 -S'editable' -p25367 -I00 -sS'value' -p25368 -NssS'summary_default' -p25369 -(dp25370 -S'editable' -p25371 -I00 -sS'value' -p25372 -S'none' -p25373 -sssS'description' -p25374 -(dp25375 -S'editable' -p25376 -I01 -sS'value' -p25377 -g47 -sssS'description' -p25378 -(dp25379 -S'mandatory' -p25380 -(dp25381 -S'editable' -p25382 -I00 -sS'value' -p25383 -I00 -ssS'name' -p25384 -(dp25385 -S'editable' -p25386 -I01 -sS'value' -p25387 -S'Description' -p25388 -ssS'data_type' -p25389 -(dp25390 -S'editable' -p25391 -I00 -sS'value' -p25392 -S'text' -p25393 -ssS'entity_type' -p25394 -(dp25395 -S'editable' -p25396 -I00 -sS'value' -p25397 -S'LocalStorage' -p25398 -ssS'editable' -p25399 -(dp25400 -S'editable' -p25401 -I00 -sS'value' -p25402 -I01 -ssS'unique' -p25403 -(dp25404 -S'editable' -p25405 -I00 -sS'value' -p25406 -I00 -ssS'properties' -p25407 -(dp25408 -S'default_value' -p25409 -(dp25410 -S'editable' -p25411 -I00 -sS'value' -p25412 -NssS'summary_default' -p25413 -(dp25414 -S'editable' -p25415 -I00 -sS'value' -p25416 -S'none' -p25417 -sssS'description' -p25418 -(dp25419 -S'editable' -p25420 -I01 -sS'value' -p25421 -g47 -ssssS'TaskTemplate' -p25422 -(dp25423 -S'open_notes_count' -p25424 -(dp25425 -S'mandatory' -p25426 -(dp25427 -S'editable' -p25428 -I00 -sS'value' -p25429 -I00 -ssS'name' -p25430 -(dp25431 -S'editable' -p25432 -I01 -sS'value' -p25433 -S'Open Notes Count' -p25434 -ssS'data_type' -p25435 -(dp25436 -S'editable' -p25437 -I00 -sS'value' -p25438 -S'text' -p25439 -ssS'entity_type' -p25440 -(dp25441 -S'editable' -p25442 -I00 -sS'value' -p25443 -S'TaskTemplate' -p25444 -ssS'editable' -p25445 -(dp25446 -S'editable' -p25447 -I00 -sS'value' -p25448 -I00 -ssS'unique' -p25449 -(dp25450 -S'editable' -p25451 -I00 -sS'value' -p25452 -I00 -ssS'properties' -p25453 -(dp25454 -S'default_value' -p25455 -(dp25456 -S'editable' -p25457 -I00 -sS'value' -p25458 -NssS'summary_default' -p25459 -(dp25460 -S'editable' -p25461 -I01 -sS'value' -p25462 -S'none' -p25463 -sssS'description' -p25464 -(dp25465 -S'editable' -p25466 -I01 -sS'value' -p25467 -g47 -sssS'code' -p25468 -(dp25469 -S'mandatory' -p25470 -(dp25471 -S'editable' -p25472 -I00 -sS'value' -p25473 -I01 -ssS'name' -p25474 -(dp25475 -S'editable' -p25476 -I01 -sS'value' -p25477 -S'Task Template Name' -p25478 -ssS'data_type' -p25479 -(dp25480 -S'editable' -p25481 -I00 -sS'value' -p25482 -S'text' -p25483 -ssS'entity_type' -p25484 -(dp25485 -S'editable' -p25486 -I00 -sS'value' -p25487 -S'TaskTemplate' -p25488 -ssS'editable' -p25489 -(dp25490 -S'editable' -p25491 -I00 -sS'value' -p25492 -I01 -ssS'unique' -p25493 -(dp25494 -S'editable' -p25495 -I00 -sS'value' -p25496 -I00 -ssS'properties' -p25497 -(dp25498 -S'default_value' -p25499 -(dp25500 -S'editable' -p25501 -I00 -sS'value' -p25502 -NssS'summary_default' -p25503 -(dp25504 -S'editable' -p25505 -I01 -sS'value' -p25506 -S'none' -p25507 -sssS'description' -p25508 -(dp25509 -S'editable' -p25510 -I01 -sS'value' -p25511 -g47 -sssS'open_notes' -p25512 -(dp25513 -S'mandatory' -p25514 -(dp25515 -S'editable' -p25516 -I00 -sS'value' -p25517 -I00 -ssS'name' -p25518 -(dp25519 -S'editable' -p25520 -I01 -sS'value' -p25521 -S'Open Notes' -p25522 -ssS'data_type' -p25523 -(dp25524 -S'editable' -p25525 -I00 -sS'value' -p25526 -S'multi_entity' -p25527 -ssS'entity_type' -p25528 -(dp25529 -S'editable' -p25530 -I00 -sS'value' -p25531 -S'TaskTemplate' -p25532 -ssS'editable' -p25533 -(dp25534 -S'editable' -p25535 -I00 -sS'value' -p25536 -I00 -ssS'unique' -p25537 -(dp25538 -S'editable' -p25539 -I00 -sS'value' -p25540 -I00 -ssS'properties' -p25541 -(dp25542 -S'default_value' -p25543 -(dp25544 -S'editable' -p25545 -I00 -sS'value' -p25546 -NssS'summary_default' -p25547 -(dp25548 -S'editable' -p25549 -I01 -sS'value' -p25550 -S'none' -p25551 -ssS'valid_types' -p25552 -(dp25553 -S'editable' -p25554 -I01 -sS'value' -p25555 -(lp25556 -S'Note' -p25557 -asssS'description' -p25558 -(dp25559 -S'editable' -p25560 -I01 -sS'value' -p25561 -g47 -sssS'description' -p25562 -(dp25563 -S'mandatory' -p25564 -(dp25565 -S'editable' -p25566 -I00 -sS'value' -p25567 -I00 -ssS'name' -p25568 -(dp25569 -S'editable' -p25570 -I01 -sS'value' -p25571 -S'Description' -p25572 -ssS'data_type' -p25573 -(dp25574 -S'editable' -p25575 -I00 -sS'value' -p25576 -S'text' -p25577 -ssS'entity_type' -p25578 -(dp25579 -S'editable' -p25580 -I00 -sS'value' -p25581 -S'TaskTemplate' -p25582 -ssS'editable' -p25583 -(dp25584 -S'editable' -p25585 -I00 -sS'value' -p25586 -I01 -ssS'unique' -p25587 -(dp25588 -S'editable' -p25589 -I00 -sS'value' -p25590 -I00 -ssS'properties' -p25591 -(dp25592 -S'default_value' -p25593 -(dp25594 -S'editable' -p25595 -I00 -sS'value' -p25596 -NssS'summary_default' -p25597 -(dp25598 -S'editable' -p25599 -I01 -sS'value' -p25600 -S'none' -p25601 -sssS'description' -p25602 -(dp25603 -S'editable' -p25604 -I01 -sS'value' -p25605 -g47 -sssS'entity_type' -p25606 -(dp25607 -S'mandatory' -p25608 -(dp25609 -S'editable' -p25610 -I00 -sS'value' -p25611 -I00 -ssS'name' -p25612 -(dp25613 -S'editable' -p25614 -I01 -sS'value' -p25615 -S'Entity Type' -p25616 -ssS'data_type' -p25617 -(dp25618 -S'editable' -p25619 -I00 -sS'value' -p25620 -S'entity_type' -p25621 -ssS'entity_type' -p25622 -(dp25623 -S'editable' -p25624 -I00 -sS'value' -p25625 -S'TaskTemplate' -p25626 -ssS'editable' -p25627 -(dp25628 -S'editable' -p25629 -I00 -sS'value' -p25630 -I00 -ssS'unique' -p25631 -(dp25632 -S'editable' -p25633 -I00 -sS'value' -p25634 -I00 -ssS'properties' -p25635 -(dp25636 -S'default_value' -p25637 -(dp25638 -S'editable' -p25639 -I00 -sS'value' -p25640 -NssS'summary_default' -p25641 -(dp25642 -S'editable' -p25643 -I01 -sS'value' -p25644 -S'none' -p25645 -sssS'description' -p25646 -(dp25647 -S'editable' -p25648 -I01 -sS'value' -p25649 -g47 -sssS'notes' -p25650 -(dp25651 -S'mandatory' -p25652 -(dp25653 -S'editable' -p25654 -I00 -sS'value' -p25655 -I00 -ssS'name' -p25656 -(dp25657 -S'editable' -p25658 -I01 -sS'value' -p25659 -S'Notes' -p25660 -ssS'data_type' -p25661 -(dp25662 -S'editable' -p25663 -I00 -sS'value' -p25664 -S'multi_entity' -p25665 -ssS'entity_type' -p25666 -(dp25667 -S'editable' -p25668 -I00 -sS'value' -p25669 -S'TaskTemplate' -p25670 -ssS'editable' -p25671 -(dp25672 -S'editable' -p25673 -I00 -sS'value' -p25674 -I01 -ssS'unique' -p25675 -(dp25676 -S'editable' -p25677 -I00 -sS'value' -p25678 -I00 -ssS'properties' -p25679 -(dp25680 -S'default_value' -p25681 -(dp25682 -S'editable' -p25683 -I00 -sS'value' -p25684 -NssS'summary_default' -p25685 -(dp25686 -S'editable' -p25687 -I01 -sS'value' -p25688 -S'none' -p25689 -ssS'valid_types' -p25690 -(dp25691 -S'editable' -p25692 -I01 -sS'value' -p25693 -(lp25694 -S'Note' -p25695 -asssS'description' -p25696 -(dp25697 -S'editable' -p25698 -I01 -sS'value' -p25699 -g47 -sssS'created_at' -p25700 -(dp25701 -S'mandatory' -p25702 -(dp25703 -S'editable' -p25704 -I00 -sS'value' -p25705 -I00 -ssS'name' -p25706 -(dp25707 -S'editable' -p25708 -I01 -sS'value' -p25709 -S'Date Created' -p25710 -ssS'data_type' -p25711 -(dp25712 -S'editable' -p25713 -I00 -sS'value' -p25714 -S'date_time' -p25715 -ssS'entity_type' -p25716 -(dp25717 -S'editable' -p25718 -I00 -sS'value' -p25719 -S'TaskTemplate' -p25720 -ssS'editable' -p25721 -(dp25722 -S'editable' -p25723 -I00 -sS'value' -p25724 -I00 -ssS'unique' -p25725 -(dp25726 -S'editable' -p25727 -I00 -sS'value' -p25728 -I00 -ssS'properties' -p25729 -(dp25730 -S'default_value' -p25731 -(dp25732 -S'editable' -p25733 -I00 -sS'value' -p25734 -NssS'summary_default' -p25735 -(dp25736 -S'editable' -p25737 -I01 -sS'value' -p25738 -S'none' -p25739 -sssS'description' -p25740 -(dp25741 -S'editable' -p25742 -I01 -sS'value' -p25743 -g47 -sssS'updated_at' -p25744 -(dp25745 -S'mandatory' -p25746 -(dp25747 -S'editable' -p25748 -I00 -sS'value' -p25749 -I00 -ssS'name' -p25750 -(dp25751 -S'editable' -p25752 -I01 -sS'value' -p25753 -S'Date Updated' -p25754 -ssS'data_type' -p25755 -(dp25756 -S'editable' -p25757 -I00 -sS'value' -p25758 -S'date_time' -p25759 -ssS'entity_type' -p25760 -(dp25761 -S'editable' -p25762 -I00 -sS'value' -p25763 -S'TaskTemplate' -p25764 -ssS'editable' -p25765 -(dp25766 -S'editable' -p25767 -I00 -sS'value' -p25768 -I00 -ssS'unique' -p25769 -(dp25770 -S'editable' -p25771 -I00 -sS'value' -p25772 -I00 -ssS'properties' -p25773 -(dp25774 -S'default_value' -p25775 -(dp25776 -S'editable' -p25777 -I00 -sS'value' -p25778 -NssS'summary_default' -p25779 -(dp25780 -S'editable' -p25781 -I01 -sS'value' -p25782 -S'none' -p25783 -sssS'description' -p25784 -(dp25785 -S'editable' -p25786 -I01 -sS'value' -p25787 -g47 -sssS'created_by' -p25788 -(dp25789 -S'mandatory' -p25790 -(dp25791 -S'editable' -p25792 -I00 -sS'value' -p25793 -I00 -ssS'name' -p25794 -(dp25795 -S'editable' -p25796 -I01 -sS'value' -p25797 -S'Created by' -p25798 -ssS'data_type' -p25799 -(dp25800 -S'editable' -p25801 -I00 -sS'value' -p25802 -S'entity' -p25803 -ssS'entity_type' -p25804 -(dp25805 -S'editable' -p25806 -I00 -sS'value' -p25807 -S'TaskTemplate' -p25808 -ssS'editable' -p25809 -(dp25810 -S'editable' -p25811 -I00 -sS'value' -p25812 -I00 -ssS'unique' -p25813 -(dp25814 -S'editable' -p25815 -I00 -sS'value' -p25816 -I00 -ssS'properties' -p25817 -(dp25818 -S'default_value' -p25819 -(dp25820 -S'editable' -p25821 -I00 -sS'value' -p25822 -NssS'summary_default' -p25823 -(dp25824 -S'editable' -p25825 -I01 -sS'value' -p25826 -S'none' -p25827 -ssS'valid_types' -p25828 -(dp25829 -S'editable' -p25830 -I01 -sS'value' -p25831 -(lp25832 -S'HumanUser' -p25833 -aS'ApiUser' -p25834 -asssS'description' -p25835 -(dp25836 -S'editable' -p25837 -I01 -sS'value' -p25838 -g47 -sssS'task_count' -p25839 -(dp25840 -S'mandatory' -p25841 -(dp25842 -S'editable' -p25843 -I00 -sS'value' -p25844 -I00 -ssS'name' -p25845 -(dp25846 -S'editable' -p25847 -I01 -sS'value' -p25848 -S'Tasks' -p25849 -ssS'data_type' -p25850 -(dp25851 -S'editable' -p25852 -I00 -sS'value' -p25853 -S'number' -p25854 -ssS'entity_type' -p25855 -(dp25856 -S'editable' -p25857 -I00 -sS'value' -p25858 -S'TaskTemplate' -p25859 -ssS'editable' -p25860 -(dp25861 -S'editable' -p25862 -I00 -sS'value' -p25863 -I00 -ssS'unique' -p25864 -(dp25865 -S'editable' -p25866 -I00 -sS'value' -p25867 -I00 -ssS'properties' -p25868 -(dp25869 -S'default_value' -p25870 -(dp25871 -S'editable' -p25872 -I00 -sS'value' -p25873 -NssS'summary_default' -p25874 -(dp25875 -S'editable' -p25876 -I01 -sS'value' -p25877 -S'none' -p25878 -sssS'description' -p25879 -(dp25880 -S'editable' -p25881 -I01 -sS'value' -p25882 -g47 -sssS'cached_display_name' -p25883 -(dp25884 -S'mandatory' -p25885 -(dp25886 -S'editable' -p25887 -I00 -sS'value' -p25888 -I00 -ssS'name' -p25889 -(dp25890 -S'editable' -p25891 -I01 -sS'value' -p25892 -S'Cached Display Name' -p25893 -ssS'data_type' -p25894 -(dp25895 -S'editable' -p25896 -I00 -sS'value' -p25897 -S'text' -p25898 -ssS'entity_type' -p25899 -(dp25900 -S'editable' -p25901 -I00 -sS'value' -p25902 -S'TaskTemplate' -p25903 -ssS'editable' -p25904 -(dp25905 -S'editable' -p25906 -I00 -sS'value' -p25907 -I01 -ssS'unique' -p25908 -(dp25909 -S'editable' -p25910 -I00 -sS'value' -p25911 -I00 -ssS'properties' -p25912 -(dp25913 -S'default_value' -p25914 -(dp25915 -S'editable' -p25916 -I00 -sS'value' -p25917 -NssS'summary_default' -p25918 -(dp25919 -S'editable' -p25920 -I00 -sS'value' -p25921 -S'none' -p25922 -sssS'description' -p25923 -(dp25924 -S'editable' -p25925 -I01 -sS'value' -p25926 -g47 -sssS'id' -p25927 -(dp25928 -S'mandatory' -p25929 -(dp25930 -S'editable' -p25931 -I00 -sS'value' -p25932 -I00 -ssS'name' -p25933 -(dp25934 -S'editable' -p25935 -I01 -sS'value' -p25936 -S'Id' -p25937 -ssS'data_type' -p25938 -(dp25939 -S'editable' -p25940 -I00 -sS'value' -p25941 -S'number' -p25942 -ssS'entity_type' -p25943 -(dp25944 -S'editable' -p25945 -I00 -sS'value' -p25946 -S'TaskTemplate' -p25947 -ssS'editable' -p25948 -(dp25949 -S'editable' -p25950 -I00 -sS'value' -p25951 -I00 -ssS'unique' -p25952 -(dp25953 -S'editable' -p25954 -I00 -sS'value' -p25955 -I00 -ssS'properties' -p25956 -(dp25957 -S'default_value' -p25958 -(dp25959 -S'editable' -p25960 -I00 -sS'value' -p25961 -NssS'summary_default' -p25962 -(dp25963 -S'editable' -p25964 -I01 -sS'value' -p25965 -S'none' -p25966 -sssS'description' -p25967 -(dp25968 -S'editable' -p25969 -I01 -sS'value' -p25970 -g47 -sssS'updated_by' -p25971 -(dp25972 -S'mandatory' -p25973 -(dp25974 -S'editable' -p25975 -I00 -sS'value' -p25976 -I00 -ssS'name' -p25977 -(dp25978 -S'editable' -p25979 -I01 -sS'value' -p25980 -S'Updated by' -p25981 -ssS'data_type' -p25982 -(dp25983 -S'editable' -p25984 -I00 -sS'value' -p25985 -S'entity' -p25986 -ssS'entity_type' -p25987 -(dp25988 -S'editable' -p25989 -I00 -sS'value' -p25990 -S'TaskTemplate' -p25991 -ssS'editable' -p25992 -(dp25993 -S'editable' -p25994 -I00 -sS'value' -p25995 -I00 -ssS'unique' -p25996 -(dp25997 -S'editable' -p25998 -I00 -sS'value' -p25999 -I00 -ssS'properties' -p26000 -(dp26001 -S'default_value' -p26002 -(dp26003 -S'editable' -p26004 -I00 -sS'value' -p26005 -NssS'summary_default' -p26006 -(dp26007 -S'editable' -p26008 -I01 -sS'value' -p26009 -S'none' -p26010 -ssS'valid_types' -p26011 -(dp26012 -S'editable' -p26013 -I01 -sS'value' -p26014 -(lp26015 -S'HumanUser' -p26016 -aS'ApiUser' -p26017 -asssS'description' -p26018 -(dp26019 -S'editable' -p26020 -I01 -sS'value' -p26021 -g47 -ssssS'RevisionTicketConnection' -p26022 -(dp26023 -S'id' -p26024 -(dp26025 -S'mandatory' -p26026 -(dp26027 -S'editable' -p26028 -I00 -sS'value' -p26029 -I01 -ssS'name' -p26030 -(dp26031 -S'editable' -p26032 -I01 -sS'value' -p26033 -S'Id' -p26034 -ssS'data_type' -p26035 -(dp26036 -S'editable' -p26037 -I00 -sS'value' -p26038 -S'number' -p26039 -ssS'entity_type' -p26040 -(dp26041 -S'editable' -p26042 -I00 -sS'value' -p26043 -S'RevisionTicketConnection' -p26044 -ssS'editable' -p26045 -(dp26046 -S'editable' -p26047 -I00 -sS'value' -p26048 -I00 -ssS'unique' -p26049 -(dp26050 -S'editable' -p26051 -I00 -sS'value' -p26052 -I00 -ssS'properties' -p26053 -(dp26054 -S'default_value' -p26055 -(dp26056 -S'editable' -p26057 -I00 -sS'value' -p26058 -NssS'summary_default' -p26059 -(dp26060 -S'editable' -p26061 -I00 -sS'value' -p26062 -S'none' -p26063 -sssS'description' -p26064 -(dp26065 -S'editable' -p26066 -I01 -sS'value' -p26067 -g47 -sssS'cached_display_name' -p26068 -(dp26069 -S'mandatory' -p26070 -(dp26071 -S'editable' -p26072 -I00 -sS'value' -p26073 -I00 -ssS'name' -p26074 -(dp26075 -S'editable' -p26076 -I01 -sS'value' -p26077 -S'Cached Display Name' -p26078 -ssS'data_type' -p26079 -(dp26080 -S'editable' -p26081 -I00 -sS'value' -p26082 -S'text' -p26083 -ssS'entity_type' -p26084 -(dp26085 -S'editable' -p26086 -I00 -sS'value' -p26087 -S'RevisionTicketConnection' -p26088 -ssS'editable' -p26089 -(dp26090 -S'editable' -p26091 -I00 -sS'value' -p26092 -I01 -ssS'unique' -p26093 -(dp26094 -S'editable' -p26095 -I00 -sS'value' -p26096 -I00 -ssS'properties' -p26097 -(dp26098 -S'default_value' -p26099 -(dp26100 -S'editable' -p26101 -I00 -sS'value' -p26102 -NssS'summary_default' -p26103 -(dp26104 -S'editable' -p26105 -I00 -sS'value' -p26106 -S'none' -p26107 -sssS'description' -p26108 -(dp26109 -S'editable' -p26110 -I01 -sS'value' -p26111 -g47 -sssS'ticket' -p26112 -(dp26113 -S'mandatory' -p26114 -(dp26115 -S'editable' -p26116 -I00 -sS'value' -p26117 -I00 -ssS'name' -p26118 -(dp26119 -S'editable' -p26120 -I01 -sS'value' -p26121 -S'Ticket' -p26122 -ssS'data_type' -p26123 -(dp26124 -S'editable' -p26125 -I00 -sS'value' -p26126 -S'entity' -p26127 -ssS'entity_type' -p26128 -(dp26129 -S'editable' -p26130 -I00 -sS'value' -p26131 -S'RevisionTicketConnection' -p26132 -ssS'editable' -p26133 -(dp26134 -S'editable' -p26135 -I00 -sS'value' -p26136 -I00 -ssS'unique' -p26137 -(dp26138 -S'editable' -p26139 -I00 -sS'value' -p26140 -I00 -ssS'properties' -p26141 -(dp26142 -S'default_value' -p26143 -(dp26144 -S'editable' -p26145 -I00 -sS'value' -p26146 -NssS'summary_default' -p26147 -(dp26148 -S'editable' -p26149 -I00 -sS'value' -p26150 -S'none' -p26151 -ssS'valid_types' -p26152 -(dp26153 -S'editable' -p26154 -I00 -sS'value' -p26155 -(lp26156 -S'Ticket' -p26157 -asssS'description' -p26158 -(dp26159 -S'editable' -p26160 -I01 -sS'value' -p26161 -g47 -sssS'revision' -p26162 -(dp26163 -S'mandatory' -p26164 -(dp26165 -S'editable' -p26166 -I00 -sS'value' -p26167 -I00 -ssS'name' -p26168 -(dp26169 -S'editable' -p26170 -I01 -sS'value' -p26171 -S'Revision' -p26172 -ssS'data_type' -p26173 -(dp26174 -S'editable' -p26175 -I00 -sS'value' -p26176 -S'entity' -p26177 -ssS'entity_type' -p26178 -(dp26179 -S'editable' -p26180 -I00 -sS'value' -p26181 -S'RevisionTicketConnection' -p26182 -ssS'editable' -p26183 -(dp26184 -S'editable' -p26185 -I00 -sS'value' -p26186 -I00 -ssS'unique' -p26187 -(dp26188 -S'editable' -p26189 -I00 -sS'value' -p26190 -I00 -ssS'properties' -p26191 -(dp26192 -S'default_value' -p26193 -(dp26194 -S'editable' -p26195 -I00 -sS'value' -p26196 -NssS'summary_default' -p26197 -(dp26198 -S'editable' -p26199 -I00 -sS'value' -p26200 -S'none' -p26201 -ssS'valid_types' -p26202 -(dp26203 -S'editable' -p26204 -I00 -sS'value' -p26205 -(lp26206 -S'Revision' -p26207 -asssS'description' -p26208 -(dp26209 -S'editable' -p26210 -I01 -sS'value' -p26211 -g47 -ssssS'PerformerShootDayConnection' -p26212 -(dp26213 -S'cached_display_name' -p26214 -(dp26215 -S'mandatory' -p26216 -(dp26217 -S'editable' -p26218 -I00 -sS'value' -p26219 -I00 -ssS'name' -p26220 -(dp26221 -S'editable' -p26222 -I01 -sS'value' -p26223 -S'Cached Display Name' -p26224 -ssS'data_type' -p26225 -(dp26226 -S'editable' -p26227 -I00 -sS'value' -p26228 -S'text' -p26229 -ssS'entity_type' -p26230 -(dp26231 -S'editable' -p26232 -I00 -sS'value' -p26233 -S'PerformerShootDayConnection' -p26234 -ssS'editable' -p26235 -(dp26236 -S'editable' -p26237 -I00 -sS'value' -p26238 -I01 -ssS'unique' -p26239 -(dp26240 -S'editable' -p26241 -I00 -sS'value' -p26242 -I00 -ssS'properties' -p26243 -(dp26244 -S'default_value' -p26245 -(dp26246 -S'editable' -p26247 -I00 -sS'value' -p26248 -NssS'summary_default' -p26249 -(dp26250 -S'editable' -p26251 -I00 -sS'value' -p26252 -S'none' -p26253 -sssS'description' -p26254 -(dp26255 -S'editable' -p26256 -I01 -sS'value' -p26257 -g47 -sssS'performer' -p26258 -(dp26259 -S'mandatory' -p26260 -(dp26261 -S'editable' -p26262 -I00 -sS'value' -p26263 -I00 -ssS'name' -p26264 -(dp26265 -S'editable' -p26266 -I01 -sS'value' -p26267 -S'Performer' -p26268 -ssS'data_type' -p26269 -(dp26270 -S'editable' -p26271 -I00 -sS'value' -p26272 -S'entity' -p26273 -ssS'entity_type' -p26274 -(dp26275 -S'editable' -p26276 -I00 -sS'value' -p26277 -S'PerformerShootDayConnection' -p26278 -ssS'editable' -p26279 -(dp26280 -S'editable' -p26281 -I00 -sS'value' -p26282 -I00 -ssS'unique' -p26283 -(dp26284 -S'editable' -p26285 -I00 -sS'value' -p26286 -I00 -ssS'properties' -p26287 -(dp26288 -S'default_value' -p26289 -(dp26290 -S'editable' -p26291 -I00 -sS'value' -p26292 -NssS'summary_default' -p26293 -(dp26294 -S'editable' -p26295 -I00 -sS'value' -p26296 -S'none' -p26297 -ssS'valid_types' -p26298 -(dp26299 -S'editable' -p26300 -I00 -sS'value' -p26301 -(lp26302 -S'Performer' -p26303 -asssS'description' -p26304 -(dp26305 -S'editable' -p26306 -I01 -sS'value' -p26307 -g47 -sssS'id' -p26308 -(dp26309 -S'mandatory' -p26310 -(dp26311 -S'editable' -p26312 -I00 -sS'value' -p26313 -I01 -ssS'name' -p26314 -(dp26315 -S'editable' -p26316 -I01 -sS'value' -p26317 -S'Id' -p26318 -ssS'data_type' -p26319 -(dp26320 -S'editable' -p26321 -I00 -sS'value' -p26322 -S'number' -p26323 -ssS'entity_type' -p26324 -(dp26325 -S'editable' -p26326 -I00 -sS'value' -p26327 -S'PerformerShootDayConnection' -p26328 -ssS'editable' -p26329 -(dp26330 -S'editable' -p26331 -I00 -sS'value' -p26332 -I00 -ssS'unique' -p26333 -(dp26334 -S'editable' -p26335 -I00 -sS'value' -p26336 -I00 -ssS'properties' -p26337 -(dp26338 -S'default_value' -p26339 -(dp26340 -S'editable' -p26341 -I00 -sS'value' -p26342 -NssS'summary_default' -p26343 -(dp26344 -S'editable' -p26345 -I00 -sS'value' -p26346 -S'none' -p26347 -sssS'description' -p26348 -(dp26349 -S'editable' -p26350 -I01 -sS'value' -p26351 -g47 -sssS'shoot_day' -p26352 -(dp26353 -S'mandatory' -p26354 -(dp26355 -S'editable' -p26356 -I00 -sS'value' -p26357 -I00 -ssS'name' -p26358 -(dp26359 -S'editable' -p26360 -I01 -sS'value' -p26361 -S'Shoot Day' -p26362 -ssS'data_type' -p26363 -(dp26364 -S'editable' -p26365 -I00 -sS'value' -p26366 -S'entity' -p26367 -ssS'entity_type' -p26368 -(dp26369 -S'editable' -p26370 -I00 -sS'value' -p26371 -S'PerformerShootDayConnection' -p26372 -ssS'editable' -p26373 -(dp26374 -S'editable' -p26375 -I00 -sS'value' -p26376 -I00 -ssS'unique' -p26377 -(dp26378 -S'editable' -p26379 -I00 -sS'value' -p26380 -I00 -ssS'properties' -p26381 -(dp26382 -S'default_value' -p26383 -(dp26384 -S'editable' -p26385 -I00 -sS'value' -p26386 -NssS'summary_default' -p26387 -(dp26388 -S'editable' -p26389 -I00 -sS'value' -p26390 -S'none' -p26391 -ssS'valid_types' -p26392 -(dp26393 -S'editable' -p26394 -I00 -sS'value' -p26395 -(lp26396 -S'ShootDay' -p26397 -asssS'description' -p26398 -(dp26399 -S'editable' -p26400 -I01 -sS'value' -p26401 -g47 -ssssS'PipelineConfiguration' -p26402 -(dp26403 -S'code' -p26404 -(dp26405 -S'mandatory' -p26406 -(dp26407 -S'editable' -p26408 -I00 -sS'value' -p26409 -I01 -ssS'name' -p26410 -(dp26411 -S'editable' -p26412 -I01 -sS'value' -p26413 -S'Config Name' -p26414 -ssS'data_type' -p26415 -(dp26416 -S'editable' -p26417 -I00 -sS'value' -p26418 -S'text' -p26419 -ssS'entity_type' -p26420 -(dp26421 -S'editable' -p26422 -I00 -sS'value' -p26423 -S'PipelineConfiguration' -p26424 -ssS'editable' -p26425 -(dp26426 -S'editable' -p26427 -I00 -sS'value' -p26428 -I01 -ssS'unique' -p26429 -(dp26430 -S'editable' -p26431 -I00 -sS'value' -p26432 -I00 -ssS'properties' -p26433 -(dp26434 -S'default_value' -p26435 -(dp26436 -S'editable' -p26437 -I00 -sS'value' -p26438 -NssS'summary_default' -p26439 -(dp26440 -S'editable' -p26441 -I00 -sS'value' -p26442 -S'none' -p26443 -sssS'description' -p26444 -(dp26445 -S'editable' -p26446 -I01 -sS'value' -p26447 -g47 -sssS'users' -p26448 -(dp26449 -S'mandatory' -p26450 -(dp26451 -S'editable' -p26452 -I00 -sS'value' -p26453 -I00 -ssS'name' -p26454 -(dp26455 -S'editable' -p26456 -I01 -sS'value' -p26457 -S'User Restrictions' -p26458 -ssS'data_type' -p26459 -(dp26460 -S'editable' -p26461 -I00 -sS'value' -p26462 -S'multi_entity' -p26463 -ssS'entity_type' -p26464 -(dp26465 -S'editable' -p26466 -I00 -sS'value' -p26467 -S'PipelineConfiguration' -p26468 -ssS'editable' -p26469 -(dp26470 -S'editable' -p26471 -I00 -sS'value' -p26472 -I01 -ssS'unique' -p26473 -(dp26474 -S'editable' -p26475 -I00 -sS'value' -p26476 -I00 -ssS'properties' -p26477 -(dp26478 -S'default_value' -p26479 -(dp26480 -S'editable' -p26481 -I00 -sS'value' -p26482 -NssS'summary_default' -p26483 -(dp26484 -S'editable' -p26485 -I00 -sS'value' -p26486 -S'none' -p26487 -ssS'valid_types' -p26488 -(dp26489 -S'editable' -p26490 -I00 -sS'value' -p26491 -(lp26492 -S'HumanUser' -p26493 -asssS'description' -p26494 -(dp26495 -S'editable' -p26496 -I01 -sS'value' -p26497 -g47 -sssS'mac_path' -p26498 -(dp26499 -S'mandatory' -p26500 -(dp26501 -S'editable' -p26502 -I00 -sS'value' -p26503 -I00 -ssS'name' -p26504 -(dp26505 -S'editable' -p26506 -I01 -sS'value' -p26507 -S'Mac Path' -p26508 -ssS'data_type' -p26509 -(dp26510 -S'editable' -p26511 -I00 -sS'value' -p26512 -S'text' -p26513 -ssS'entity_type' -p26514 -(dp26515 -S'editable' -p26516 -I00 -sS'value' -p26517 -S'PipelineConfiguration' -p26518 -ssS'editable' -p26519 -(dp26520 -S'editable' -p26521 -I00 -sS'value' -p26522 -I01 -ssS'unique' -p26523 -(dp26524 -S'editable' -p26525 -I00 -sS'value' -p26526 -I00 -ssS'properties' -p26527 -(dp26528 -S'default_value' -p26529 -(dp26530 -S'editable' -p26531 -I00 -sS'value' -p26532 -NssS'summary_default' -p26533 -(dp26534 -S'editable' -p26535 -I00 -sS'value' -p26536 -S'none' -p26537 -sssS'description' -p26538 -(dp26539 -S'editable' -p26540 -I01 -sS'value' -p26541 -g47 -sssS'created_at' -p26542 -(dp26543 -S'mandatory' -p26544 -(dp26545 -S'editable' -p26546 -I00 -sS'value' -p26547 -I00 -ssS'name' -p26548 -(dp26549 -S'editable' -p26550 -I01 -sS'value' -p26551 -S'Date Created' -p26552 -ssS'data_type' -p26553 -(dp26554 -S'editable' -p26555 -I00 -sS'value' -p26556 -S'date_time' -p26557 -ssS'entity_type' -p26558 -(dp26559 -S'editable' -p26560 -I00 -sS'value' -p26561 -S'PipelineConfiguration' -p26562 -ssS'editable' -p26563 -(dp26564 -S'editable' -p26565 -I00 -sS'value' -p26566 -I00 -ssS'unique' -p26567 -(dp26568 -S'editable' -p26569 -I00 -sS'value' -p26570 -I00 -ssS'properties' -p26571 -(dp26572 -S'default_value' -p26573 -(dp26574 -S'editable' -p26575 -I00 -sS'value' -p26576 -NssS'summary_default' -p26577 -(dp26578 -S'editable' -p26579 -I01 -sS'value' -p26580 -S'none' -p26581 -sssS'description' -p26582 -(dp26583 -S'editable' -p26584 -I01 -sS'value' -p26585 -g47 -sssS'updated_at' -p26586 -(dp26587 -S'mandatory' -p26588 -(dp26589 -S'editable' -p26590 -I00 -sS'value' -p26591 -I00 -ssS'name' -p26592 -(dp26593 -S'editable' -p26594 -I01 -sS'value' -p26595 -S'Date Updated' -p26596 -ssS'data_type' -p26597 -(dp26598 -S'editable' -p26599 -I00 -sS'value' -p26600 -S'date_time' -p26601 -ssS'entity_type' -p26602 -(dp26603 -S'editable' -p26604 -I00 -sS'value' -p26605 -S'PipelineConfiguration' -p26606 -ssS'editable' -p26607 -(dp26608 -S'editable' -p26609 -I00 -sS'value' -p26610 -I00 -ssS'unique' -p26611 -(dp26612 -S'editable' -p26613 -I00 -sS'value' -p26614 -I00 -ssS'properties' -p26615 -(dp26616 -S'default_value' -p26617 -(dp26618 -S'editable' -p26619 -I00 -sS'value' -p26620 -NssS'summary_default' -p26621 -(dp26622 -S'editable' -p26623 -I01 -sS'value' -p26624 -S'none' -p26625 -sssS'description' -p26626 -(dp26627 -S'editable' -p26628 -I01 -sS'value' -p26629 -g47 -sssS'created_by' -p26630 -(dp26631 -S'mandatory' -p26632 -(dp26633 -S'editable' -p26634 -I00 -sS'value' -p26635 -I00 -ssS'name' -p26636 -(dp26637 -S'editable' -p26638 -I01 -sS'value' -p26639 -S'Created by' -p26640 -ssS'data_type' -p26641 -(dp26642 -S'editable' -p26643 -I00 -sS'value' -p26644 -S'entity' -p26645 -ssS'entity_type' -p26646 -(dp26647 -S'editable' -p26648 -I00 -sS'value' -p26649 -S'PipelineConfiguration' -p26650 -ssS'editable' -p26651 -(dp26652 -S'editable' -p26653 -I00 -sS'value' -p26654 -I00 -ssS'unique' -p26655 -(dp26656 -S'editable' -p26657 -I00 -sS'value' -p26658 -I00 -ssS'properties' -p26659 -(dp26660 -S'default_value' -p26661 -(dp26662 -S'editable' -p26663 -I00 -sS'value' -p26664 -NssS'summary_default' -p26665 -(dp26666 -S'editable' -p26667 -I01 -sS'value' -p26668 -S'none' -p26669 -ssS'valid_types' -p26670 -(dp26671 -S'editable' -p26672 -I01 -sS'value' -p26673 -(lp26674 -S'HumanUser' -p26675 -aS'ApiUser' -p26676 -asssS'description' -p26677 -(dp26678 -S'editable' -p26679 -I01 -sS'value' -p26680 -g47 -sssS'project' -p26681 -(dp26682 -S'mandatory' -p26683 -(dp26684 -S'editable' -p26685 -I00 -sS'value' -p26686 -I00 -ssS'name' -p26687 -(dp26688 -S'editable' -p26689 -I01 -sS'value' -p26690 -S'Project' -p26691 -ssS'data_type' -p26692 -(dp26693 -S'editable' -p26694 -I00 -sS'value' -p26695 -S'entity' -p26696 -ssS'entity_type' -p26697 -(dp26698 -S'editable' -p26699 -I00 -sS'value' -p26700 -S'PipelineConfiguration' -p26701 -ssS'editable' -p26702 -(dp26703 -S'editable' -p26704 -I00 -sS'value' -p26705 -I01 -ssS'unique' -p26706 -(dp26707 -S'editable' -p26708 -I00 -sS'value' -p26709 -I00 -ssS'properties' -p26710 -(dp26711 -S'default_value' -p26712 -(dp26713 -S'editable' -p26714 -I00 -sS'value' -p26715 -NssS'summary_default' -p26716 -(dp26717 -S'editable' -p26718 -I00 -sS'value' -p26719 -S'none' -p26720 -ssS'valid_types' -p26721 -(dp26722 -S'editable' -p26723 -I00 -sS'value' -p26724 -(lp26725 -S'Project' -p26726 -asssS'description' -p26727 -(dp26728 -S'editable' -p26729 -I01 -sS'value' -p26730 -g47 -sssS'windows_path' -p26731 -(dp26732 -S'mandatory' -p26733 -(dp26734 -S'editable' -p26735 -I00 -sS'value' -p26736 -I00 -ssS'name' -p26737 -(dp26738 -S'editable' -p26739 -I01 -sS'value' -p26740 -S'Windows Path' -p26741 -ssS'data_type' -p26742 -(dp26743 -S'editable' -p26744 -I00 -sS'value' -p26745 -S'text' -p26746 -ssS'entity_type' -p26747 -(dp26748 -S'editable' -p26749 -I00 -sS'value' -p26750 -S'PipelineConfiguration' -p26751 -ssS'editable' -p26752 -(dp26753 -S'editable' -p26754 -I00 -sS'value' -p26755 -I01 -ssS'unique' -p26756 -(dp26757 -S'editable' -p26758 -I00 -sS'value' -p26759 -I00 -ssS'properties' -p26760 -(dp26761 -S'default_value' -p26762 -(dp26763 -S'editable' -p26764 -I00 -sS'value' -p26765 -NssS'summary_default' -p26766 -(dp26767 -S'editable' -p26768 -I00 -sS'value' -p26769 -S'none' -p26770 -sssS'description' -p26771 -(dp26772 -S'editable' -p26773 -I01 -sS'value' -p26774 -g47 -sssS'image' -p26775 -(dp26776 -S'mandatory' -p26777 -(dp26778 -S'editable' -p26779 -I00 -sS'value' -p26780 -I00 -ssS'name' -p26781 -(dp26782 -S'editable' -p26783 -I01 -sS'value' -p26784 -S'Thumbnail' -p26785 -ssS'data_type' -p26786 -(dp26787 -S'editable' -p26788 -I00 -sS'value' -p26789 -S'image' -p26790 -ssS'entity_type' -p26791 -(dp26792 -S'editable' -p26793 -I00 -sS'value' -p26794 -S'PipelineConfiguration' -p26795 -ssS'editable' -p26796 -(dp26797 -S'editable' -p26798 -I00 -sS'value' -p26799 -I01 -ssS'unique' -p26800 -(dp26801 -S'editable' -p26802 -I00 -sS'value' -p26803 -I00 -ssS'properties' -p26804 -(dp26805 -S'default_value' -p26806 -(dp26807 -S'editable' -p26808 -I00 -sS'value' -p26809 -NssS'summary_default' -p26810 -(dp26811 -S'editable' -p26812 -I01 -sS'value' -p26813 -S'none' -p26814 -sssS'description' -p26815 -(dp26816 -S'editable' -p26817 -I01 -sS'value' -p26818 -g47 -sssS'updated_by' -p26819 -(dp26820 -S'mandatory' -p26821 -(dp26822 -S'editable' -p26823 -I00 -sS'value' -p26824 -I00 -ssS'name' -p26825 -(dp26826 -S'editable' -p26827 -I01 -sS'value' -p26828 -S'Updated by' -p26829 -ssS'data_type' -p26830 -(dp26831 -S'editable' -p26832 -I00 -sS'value' -p26833 -S'entity' -p26834 -ssS'entity_type' -p26835 -(dp26836 -S'editable' -p26837 -I00 -sS'value' -p26838 -S'PipelineConfiguration' -p26839 -ssS'editable' -p26840 -(dp26841 -S'editable' -p26842 -I00 -sS'value' -p26843 -I00 -ssS'unique' -p26844 -(dp26845 -S'editable' -p26846 -I00 -sS'value' -p26847 -I00 -ssS'properties' -p26848 -(dp26849 -S'default_value' -p26850 -(dp26851 -S'editable' -p26852 -I00 -sS'value' -p26853 -NssS'summary_default' -p26854 -(dp26855 -S'editable' -p26856 -I01 -sS'value' -p26857 -S'none' -p26858 -ssS'valid_types' -p26859 -(dp26860 -S'editable' -p26861 -I01 -sS'value' -p26862 -(lp26863 -S'HumanUser' -p26864 -aS'ApiUser' -p26865 -asssS'description' -p26866 -(dp26867 -S'editable' -p26868 -I01 -sS'value' -p26869 -g47 -sssS'cached_display_name' -p26870 -(dp26871 -S'mandatory' -p26872 -(dp26873 -S'editable' -p26874 -I00 -sS'value' -p26875 -I00 -ssS'name' -p26876 -(dp26877 -S'editable' -p26878 -I01 -sS'value' -p26879 -S'Cached Display Name' -p26880 -ssS'data_type' -p26881 -(dp26882 -S'editable' -p26883 -I00 -sS'value' -p26884 -S'text' -p26885 -ssS'entity_type' -p26886 -(dp26887 -S'editable' -p26888 -I00 -sS'value' -p26889 -S'PipelineConfiguration' -p26890 -ssS'editable' -p26891 -(dp26892 -S'editable' -p26893 -I00 -sS'value' -p26894 -I01 -ssS'unique' -p26895 -(dp26896 -S'editable' -p26897 -I00 -sS'value' -p26898 -I00 -ssS'properties' -p26899 -(dp26900 -S'default_value' -p26901 -(dp26902 -S'editable' -p26903 -I00 -sS'value' -p26904 -NssS'summary_default' -p26905 -(dp26906 -S'editable' -p26907 -I00 -sS'value' -p26908 -S'none' -p26909 -sssS'description' -p26910 -(dp26911 -S'editable' -p26912 -I01 -sS'value' -p26913 -g47 -sssS'tag_list' -p26914 -(dp26915 -S'mandatory' -p26916 -(dp26917 -S'editable' -p26918 -I00 -sS'value' -p26919 -I00 -ssS'name' -p26920 -(dp26921 -S'editable' -p26922 -I01 -sS'value' -p26923 -S'Tags' -p26924 -ssS'data_type' -p26925 -(dp26926 -S'editable' -p26927 -I00 -sS'value' -p26928 -S'tag_list' -p26929 -ssS'entity_type' -p26930 -(dp26931 -S'editable' -p26932 -I00 -sS'value' -p26933 -S'PipelineConfiguration' -p26934 -ssS'editable' -p26935 -(dp26936 -S'editable' -p26937 -I00 -sS'value' -p26938 -I01 -ssS'unique' -p26939 -(dp26940 -S'editable' -p26941 -I00 -sS'value' -p26942 -I00 -ssS'properties' -p26943 -(dp26944 -S'default_value' -p26945 -(dp26946 -S'editable' -p26947 -I00 -sS'value' -p26948 -NssS'summary_default' -p26949 -(dp26950 -S'editable' -p26951 -I01 -sS'value' -p26952 -S'none' -p26953 -ssS'valid_types' -p26954 -(dp26955 -S'editable' -p26956 -I01 -sS'value' -p26957 -(lp26958 -S'Tag' -p26959 -asssS'description' -p26960 -(dp26961 -S'editable' -p26962 -I01 -sS'value' -p26963 -g47 -sssS'id' -p26964 -(dp26965 -S'mandatory' -p26966 -(dp26967 -S'editable' -p26968 -I00 -sS'value' -p26969 -I00 -ssS'name' -p26970 -(dp26971 -S'editable' -p26972 -I01 -sS'value' -p26973 -S'Id' -p26974 -ssS'data_type' -p26975 -(dp26976 -S'editable' -p26977 -I00 -sS'value' -p26978 -S'number' -p26979 -ssS'entity_type' -p26980 -(dp26981 -S'editable' -p26982 -I00 -sS'value' -p26983 -S'PipelineConfiguration' -p26984 -ssS'editable' -p26985 -(dp26986 -S'editable' -p26987 -I00 -sS'value' -p26988 -I00 -ssS'unique' -p26989 -(dp26990 -S'editable' -p26991 -I00 -sS'value' -p26992 -I00 -ssS'properties' -p26993 -(dp26994 -S'default_value' -p26995 -(dp26996 -S'editable' -p26997 -I00 -sS'value' -p26998 -NssS'summary_default' -p26999 -(dp27000 -S'editable' -p27001 -I01 -sS'value' -p27002 -S'none' -p27003 -sssS'description' -p27004 -(dp27005 -S'editable' -p27006 -I01 -sS'value' -p27007 -g47 -sssS'linux_path' -p27008 -(dp27009 -S'mandatory' -p27010 -(dp27011 -S'editable' -p27012 -I00 -sS'value' -p27013 -I00 -ssS'name' -p27014 -(dp27015 -S'editable' -p27016 -I01 -sS'value' -p27017 -S'Linux Path' -p27018 -ssS'data_type' -p27019 -(dp27020 -S'editable' -p27021 -I00 -sS'value' -p27022 -S'text' -p27023 -ssS'entity_type' -p27024 -(dp27025 -S'editable' -p27026 -I00 -sS'value' -p27027 -S'PipelineConfiguration' -p27028 -ssS'editable' -p27029 -(dp27030 -S'editable' -p27031 -I00 -sS'value' -p27032 -I01 -ssS'unique' -p27033 -(dp27034 -S'editable' -p27035 -I00 -sS'value' -p27036 -I00 -ssS'properties' -p27037 -(dp27038 -S'default_value' -p27039 -(dp27040 -S'editable' -p27041 -I00 -sS'value' -p27042 -NssS'summary_default' -p27043 -(dp27044 -S'editable' -p27045 -I00 -sS'value' -p27046 -S'none' -p27047 -sssS'description' -p27048 -(dp27049 -S'editable' -p27050 -I01 -sS'value' -p27051 -g47 -sssS'description' -p27052 -(dp27053 -S'mandatory' -p27054 -(dp27055 -S'editable' -p27056 -I00 -sS'value' -p27057 -I00 -ssS'name' -p27058 -(dp27059 -S'editable' -p27060 -I01 -sS'value' -p27061 -S'Description' -p27062 -ssS'data_type' -p27063 -(dp27064 -S'editable' -p27065 -I00 -sS'value' -p27066 -S'text' -p27067 -ssS'entity_type' -p27068 -(dp27069 -S'editable' -p27070 -I00 -sS'value' -p27071 -S'PipelineConfiguration' -p27072 -ssS'editable' -p27073 -(dp27074 -S'editable' -p27075 -I00 -sS'value' -p27076 -I01 -ssS'unique' -p27077 -(dp27078 -S'editable' -p27079 -I00 -sS'value' -p27080 -I00 -ssS'properties' -p27081 -(dp27082 -S'default_value' -p27083 -(dp27084 -S'editable' -p27085 -I00 -sS'value' -p27086 -NssS'summary_default' -p27087 -(dp27088 -S'editable' -p27089 -I00 -sS'value' -p27090 -S'none' -p27091 -sssS'description' -p27092 -(dp27093 -S'editable' -p27094 -I01 -sS'value' -p27095 -g47 -ssssS'LaunchSceneConnection' -p27096 -(dp27097 -S'id' -p27098 -(dp27099 -S'mandatory' -p27100 -(dp27101 -S'editable' -p27102 -I00 -sS'value' -p27103 -I01 -ssS'name' -p27104 -(dp27105 -S'editable' -p27106 -I01 -sS'value' -p27107 -S'Id' -p27108 -ssS'data_type' -p27109 -(dp27110 -S'editable' -p27111 -I00 -sS'value' -p27112 -S'number' -p27113 -ssS'entity_type' -p27114 -(dp27115 -S'editable' -p27116 -I00 -sS'value' -p27117 -S'LaunchSceneConnection' -p27118 -ssS'editable' -p27119 -(dp27120 -S'editable' -p27121 -I00 -sS'value' -p27122 -I00 -ssS'unique' -p27123 -(dp27124 -S'editable' -p27125 -I00 -sS'value' -p27126 -I00 -ssS'properties' -p27127 -(dp27128 -S'default_value' -p27129 -(dp27130 -S'editable' -p27131 -I00 -sS'value' -p27132 -NssS'summary_default' -p27133 -(dp27134 -S'editable' -p27135 -I00 -sS'value' -p27136 -S'none' -p27137 -sssS'description' -p27138 -(dp27139 -S'editable' -p27140 -I01 -sS'value' -p27141 -g47 -sssS'cached_display_name' -p27142 -(dp27143 -S'mandatory' -p27144 -(dp27145 -S'editable' -p27146 -I00 -sS'value' -p27147 -I00 -ssS'name' -p27148 -(dp27149 -S'editable' -p27150 -I01 -sS'value' -p27151 -S'Cached Display Name' -p27152 -ssS'data_type' -p27153 -(dp27154 -S'editable' -p27155 -I00 -sS'value' -p27156 -S'text' -p27157 -ssS'entity_type' -p27158 -(dp27159 -S'editable' -p27160 -I00 -sS'value' -p27161 -S'LaunchSceneConnection' -p27162 -ssS'editable' -p27163 -(dp27164 -S'editable' -p27165 -I00 -sS'value' -p27166 -I01 -ssS'unique' -p27167 -(dp27168 -S'editable' -p27169 -I00 -sS'value' -p27170 -I00 -ssS'properties' -p27171 -(dp27172 -S'default_value' -p27173 -(dp27174 -S'editable' -p27175 -I00 -sS'value' -p27176 -NssS'summary_default' -p27177 -(dp27178 -S'editable' -p27179 -I00 -sS'value' -p27180 -S'none' -p27181 -sssS'description' -p27182 -(dp27183 -S'editable' -p27184 -I01 -sS'value' -p27185 -g47 -sssS'scene' -p27186 -(dp27187 -S'mandatory' -p27188 -(dp27189 -S'editable' -p27190 -I00 -sS'value' -p27191 -I00 -ssS'name' -p27192 -(dp27193 -S'editable' -p27194 -I01 -sS'value' -p27195 -S'Scene' -p27196 -ssS'data_type' -p27197 -(dp27198 -S'editable' -p27199 -I00 -sS'value' -p27200 -S'entity' -p27201 -ssS'entity_type' -p27202 -(dp27203 -S'editable' -p27204 -I00 -sS'value' -p27205 -S'LaunchSceneConnection' -p27206 -ssS'editable' -p27207 -(dp27208 -S'editable' -p27209 -I00 -sS'value' -p27210 -I00 -ssS'unique' -p27211 -(dp27212 -S'editable' -p27213 -I00 -sS'value' -p27214 -I00 -ssS'properties' -p27215 -(dp27216 -S'default_value' -p27217 -(dp27218 -S'editable' -p27219 -I00 -sS'value' -p27220 -NssS'summary_default' -p27221 -(dp27222 -S'editable' -p27223 -I00 -sS'value' -p27224 -S'none' -p27225 -ssS'valid_types' -p27226 -(dp27227 -S'editable' -p27228 -I00 -sS'value' -p27229 -(lp27230 -S'Scene' -p27231 -asssS'description' -p27232 -(dp27233 -S'editable' -p27234 -I01 -sS'value' -p27235 -g47 -sssS'launch' -p27236 -(dp27237 -S'mandatory' -p27238 -(dp27239 -S'editable' -p27240 -I00 -sS'value' -p27241 -I00 -ssS'name' -p27242 -(dp27243 -S'editable' -p27244 -I01 -sS'value' -p27245 -S'Launch' -p27246 -ssS'data_type' -p27247 -(dp27248 -S'editable' -p27249 -I00 -sS'value' -p27250 -S'entity' -p27251 -ssS'entity_type' -p27252 -(dp27253 -S'editable' -p27254 -I00 -sS'value' -p27255 -S'LaunchSceneConnection' -p27256 -ssS'editable' -p27257 -(dp27258 -S'editable' -p27259 -I00 -sS'value' -p27260 -I00 -ssS'unique' -p27261 -(dp27262 -S'editable' -p27263 -I00 -sS'value' -p27264 -I00 -ssS'properties' -p27265 -(dp27266 -S'default_value' -p27267 -(dp27268 -S'editable' -p27269 -I00 -sS'value' -p27270 -NssS'summary_default' -p27271 -(dp27272 -S'editable' -p27273 -I00 -sS'value' -p27274 -S'none' -p27275 -ssS'valid_types' -p27276 -(dp27277 -S'editable' -p27278 -I00 -sS'value' -p27279 -(lp27280 -S'Launch' -p27281 -asssS'description' -p27282 -(dp27283 -S'editable' -p27284 -I01 -sS'value' -p27285 -g47 -ssssS'GroupUserConnection' -p27286 -(dp27287 -S'cached_display_name' -p27288 -(dp27289 -S'mandatory' -p27290 -(dp27291 -S'editable' -p27292 -I00 -sS'value' -p27293 -I00 -ssS'name' -p27294 -(dp27295 -S'editable' -p27296 -I01 -sS'value' -p27297 -S'Cached Display Name' -p27298 -ssS'data_type' -p27299 -(dp27300 -S'editable' -p27301 -I00 -sS'value' -p27302 -S'text' -p27303 -ssS'entity_type' -p27304 -(dp27305 -S'editable' -p27306 -I00 -sS'value' -p27307 -S'GroupUserConnection' -p27308 -ssS'editable' -p27309 -(dp27310 -S'editable' -p27311 -I00 -sS'value' -p27312 -I01 -ssS'unique' -p27313 -(dp27314 -S'editable' -p27315 -I00 -sS'value' -p27316 -I00 -ssS'properties' -p27317 -(dp27318 -S'default_value' -p27319 -(dp27320 -S'editable' -p27321 -I00 -sS'value' -p27322 -NssS'summary_default' -p27323 -(dp27324 -S'editable' -p27325 -I00 -sS'value' -p27326 -S'none' -p27327 -sssS'description' -p27328 -(dp27329 -S'editable' -p27330 -I01 -sS'value' -p27331 -g47 -sssS'group' -p27332 -(dp27333 -S'mandatory' -p27334 -(dp27335 -S'editable' -p27336 -I00 -sS'value' -p27337 -I00 -ssS'name' -p27338 -(dp27339 -S'editable' -p27340 -I01 -sS'value' -p27341 -S'Group' -p27342 -ssS'data_type' -p27343 -(dp27344 -S'editable' -p27345 -I00 -sS'value' -p27346 -S'entity' -p27347 -ssS'entity_type' -p27348 -(dp27349 -S'editable' -p27350 -I00 -sS'value' -p27351 -S'GroupUserConnection' -p27352 -ssS'editable' -p27353 -(dp27354 -S'editable' -p27355 -I00 -sS'value' -p27356 -I00 -ssS'unique' -p27357 -(dp27358 -S'editable' -p27359 -I00 -sS'value' -p27360 -I00 -ssS'properties' -p27361 -(dp27362 -S'default_value' -p27363 -(dp27364 -S'editable' -p27365 -I00 -sS'value' -p27366 -NssS'summary_default' -p27367 -(dp27368 -S'editable' -p27369 -I00 -sS'value' -p27370 -S'none' -p27371 -ssS'valid_types' -p27372 -(dp27373 -S'editable' -p27374 -I00 -sS'value' -p27375 -(lp27376 -S'Group' -p27377 -asssS'description' -p27378 -(dp27379 -S'editable' -p27380 -I01 -sS'value' -p27381 -g47 -sssS'id' -p27382 -(dp27383 -S'mandatory' -p27384 -(dp27385 -S'editable' -p27386 -I00 -sS'value' -p27387 -I01 -ssS'name' -p27388 -(dp27389 -S'editable' -p27390 -I01 -sS'value' -p27391 -S'Id' -p27392 -ssS'data_type' -p27393 -(dp27394 -S'editable' -p27395 -I00 -sS'value' -p27396 -S'number' -p27397 -ssS'entity_type' -p27398 -(dp27399 -S'editable' -p27400 -I00 -sS'value' -p27401 -S'GroupUserConnection' -p27402 -ssS'editable' -p27403 -(dp27404 -S'editable' -p27405 -I00 -sS'value' -p27406 -I00 -ssS'unique' -p27407 -(dp27408 -S'editable' -p27409 -I00 -sS'value' -p27410 -I00 -ssS'properties' -p27411 -(dp27412 -S'default_value' -p27413 -(dp27414 -S'editable' -p27415 -I00 -sS'value' -p27416 -NssS'summary_default' -p27417 -(dp27418 -S'editable' -p27419 -I00 -sS'value' -p27420 -S'none' -p27421 -sssS'description' -p27422 -(dp27423 -S'editable' -p27424 -I01 -sS'value' -p27425 -g47 -sssS'user' -p27426 -(dp27427 -S'mandatory' -p27428 -(dp27429 -S'editable' -p27430 -I00 -sS'value' -p27431 -I00 -ssS'name' -p27432 -(dp27433 -S'editable' -p27434 -I01 -sS'value' -p27435 -S'Person' -p27436 -ssS'data_type' -p27437 -(dp27438 -S'editable' -p27439 -I00 -sS'value' -p27440 -S'entity' -p27441 -ssS'entity_type' -p27442 -(dp27443 -S'editable' -p27444 -I00 -sS'value' -p27445 -S'GroupUserConnection' -p27446 -ssS'editable' -p27447 -(dp27448 -S'editable' -p27449 -I00 -sS'value' -p27450 -I00 -ssS'unique' -p27451 -(dp27452 -S'editable' -p27453 -I00 -sS'value' -p27454 -I00 -ssS'properties' -p27455 -(dp27456 -S'default_value' -p27457 -(dp27458 -S'editable' -p27459 -I00 -sS'value' -p27460 -NssS'summary_default' -p27461 -(dp27462 -S'editable' -p27463 -I00 -sS'value' -p27464 -S'none' -p27465 -ssS'valid_types' -p27466 -(dp27467 -S'editable' -p27468 -I00 -sS'value' -p27469 -(lp27470 -S'HumanUser' -p27471 -asssS'description' -p27472 -(dp27473 -S'editable' -p27474 -I01 -sS'value' -p27475 -g47 -ssssS'AssetSequenceConnection' -p27476 -(dp27477 -S'id' -p27478 -(dp27479 -S'mandatory' -p27480 -(dp27481 -S'editable' -p27482 -I00 -sS'value' -p27483 -I01 -ssS'name' -p27484 -(dp27485 -S'editable' -p27486 -I01 -sS'value' -p27487 -S'Id' -p27488 -ssS'data_type' -p27489 -(dp27490 -S'editable' -p27491 -I00 -sS'value' -p27492 -S'number' -p27493 -ssS'entity_type' -p27494 -(dp27495 -S'editable' -p27496 -I00 -sS'value' -p27497 -S'AssetSequenceConnection' -p27498 -ssS'editable' -p27499 -(dp27500 -S'editable' -p27501 -I00 -sS'value' -p27502 -I00 -ssS'unique' -p27503 -(dp27504 -S'editable' -p27505 -I00 -sS'value' -p27506 -I00 -ssS'properties' -p27507 -(dp27508 -S'default_value' -p27509 -(dp27510 -S'editable' -p27511 -I00 -sS'value' -p27512 -NssS'summary_default' -p27513 -(dp27514 -S'editable' -p27515 -I00 -sS'value' -p27516 -S'none' -p27517 -sssS'description' -p27518 -(dp27519 -S'editable' -p27520 -I01 -sS'value' -p27521 -g47 -sssS'cached_display_name' -p27522 -(dp27523 -S'mandatory' -p27524 -(dp27525 -S'editable' -p27526 -I00 -sS'value' -p27527 -I00 -ssS'name' -p27528 -(dp27529 -S'editable' -p27530 -I01 -sS'value' -p27531 -S'Cached Display Name' -p27532 -ssS'data_type' -p27533 -(dp27534 -S'editable' -p27535 -I00 -sS'value' -p27536 -S'text' -p27537 -ssS'entity_type' -p27538 -(dp27539 -S'editable' -p27540 -I00 -sS'value' -p27541 -S'AssetSequenceConnection' -p27542 -ssS'editable' -p27543 -(dp27544 -S'editable' -p27545 -I00 -sS'value' -p27546 -I01 -ssS'unique' -p27547 -(dp27548 -S'editable' -p27549 -I00 -sS'value' -p27550 -I00 -ssS'properties' -p27551 -(dp27552 -S'default_value' -p27553 -(dp27554 -S'editable' -p27555 -I00 -sS'value' -p27556 -NssS'summary_default' -p27557 -(dp27558 -S'editable' -p27559 -I00 -sS'value' -p27560 -S'none' -p27561 -sssS'description' -p27562 -(dp27563 -S'editable' -p27564 -I01 -sS'value' -p27565 -g47 -sssS'asset' -p27566 -(dp27567 -S'mandatory' -p27568 -(dp27569 -S'editable' -p27570 -I00 -sS'value' -p27571 -I00 -ssS'name' -p27572 -(dp27573 -S'editable' -p27574 -I01 -sS'value' -p27575 -S'Asset' -p27576 -ssS'data_type' -p27577 -(dp27578 -S'editable' -p27579 -I00 -sS'value' -p27580 -S'entity' -p27581 -ssS'entity_type' -p27582 -(dp27583 -S'editable' -p27584 -I00 -sS'value' -p27585 -S'AssetSequenceConnection' -p27586 -ssS'editable' -p27587 -(dp27588 -S'editable' -p27589 -I00 -sS'value' -p27590 -I00 -ssS'unique' -p27591 -(dp27592 -S'editable' -p27593 -I00 -sS'value' -p27594 -I00 -ssS'properties' -p27595 -(dp27596 -S'default_value' -p27597 -(dp27598 -S'editable' -p27599 -I00 -sS'value' -p27600 -NssS'summary_default' -p27601 -(dp27602 -S'editable' -p27603 -I00 -sS'value' -p27604 -S'none' -p27605 -ssS'valid_types' -p27606 -(dp27607 -S'editable' -p27608 -I00 -sS'value' -p27609 -(lp27610 -S'Asset' -p27611 -asssS'description' -p27612 -(dp27613 -S'editable' -p27614 -I01 -sS'value' -p27615 -g47 -sssS'sequence' -p27616 -(dp27617 -S'mandatory' -p27618 -(dp27619 -S'editable' -p27620 -I00 -sS'value' -p27621 -I00 -ssS'name' -p27622 -(dp27623 -S'editable' -p27624 -I01 -sS'value' -p27625 -S'Sequence' -p27626 -ssS'data_type' -p27627 -(dp27628 -S'editable' -p27629 -I00 -sS'value' -p27630 -S'entity' -p27631 -ssS'entity_type' -p27632 -(dp27633 -S'editable' -p27634 -I00 -sS'value' -p27635 -S'AssetSequenceConnection' -p27636 -ssS'editable' -p27637 -(dp27638 -S'editable' -p27639 -I00 -sS'value' -p27640 -I00 -ssS'unique' -p27641 -(dp27642 -S'editable' -p27643 -I00 -sS'value' -p27644 -I00 -ssS'properties' -p27645 -(dp27646 -S'default_value' -p27647 -(dp27648 -S'editable' -p27649 -I00 -sS'value' -p27650 -NssS'summary_default' -p27651 -(dp27652 -S'editable' -p27653 -I00 -sS'value' -p27654 -S'none' -p27655 -ssS'valid_types' -p27656 -(dp27657 -S'editable' -p27658 -I00 -sS'value' -p27659 -(lp27660 -S'Sequence' -p27661 -asssS'description' -p27662 -(dp27663 -S'editable' -p27664 -I01 -sS'value' -p27665 -g47 -ssssS'Page' -p27666 -(dp27667 -S'updated_at' -p27668 -(dp27669 -S'mandatory' -p27670 -(dp27671 -S'editable' -p27672 -I00 -sS'value' -p27673 -I00 -ssS'name' -p27674 -(dp27675 -S'editable' -p27676 -I01 -sS'value' -p27677 -S'Date Updated' -p27678 -ssS'data_type' -p27679 -(dp27680 -S'editable' -p27681 -I00 -sS'value' -p27682 -S'date_time' -p27683 -ssS'entity_type' -p27684 -(dp27685 -S'editable' -p27686 -I00 -sS'value' -p27687 -S'Page' -p27688 -ssS'editable' -p27689 -(dp27690 -S'editable' -p27691 -I00 -sS'value' -p27692 -I00 -ssS'unique' -p27693 -(dp27694 -S'editable' -p27695 -I00 -sS'value' -p27696 -I00 -ssS'properties' -p27697 -(dp27698 -S'default_value' -p27699 -(dp27700 -S'editable' -p27701 -I00 -sS'value' -p27702 -NssS'summary_default' -p27703 -(dp27704 -S'editable' -p27705 -I00 -sS'value' -p27706 -S'none' -p27707 -sssS'description' -p27708 -(dp27709 -S'editable' -p27710 -I01 -sS'value' -p27711 -g47 -sssS'cached_display_name' -p27712 -(dp27713 -S'mandatory' -p27714 -(dp27715 -S'editable' -p27716 -I00 -sS'value' -p27717 -I00 -ssS'name' -p27718 -(dp27719 -S'editable' -p27720 -I01 -sS'value' -p27721 -S'Cached Display Name' -p27722 -ssS'data_type' -p27723 -(dp27724 -S'editable' -p27725 -I00 -sS'value' -p27726 -S'text' -p27727 -ssS'entity_type' -p27728 -(dp27729 -S'editable' -p27730 -I00 -sS'value' -p27731 -S'Page' -p27732 -ssS'editable' -p27733 -(dp27734 -S'editable' -p27735 -I00 -sS'value' -p27736 -I01 -ssS'unique' -p27737 -(dp27738 -S'editable' -p27739 -I00 -sS'value' -p27740 -I00 -ssS'properties' -p27741 -(dp27742 -S'default_value' -p27743 -(dp27744 -S'editable' -p27745 -I00 -sS'value' -p27746 -NssS'summary_default' -p27747 -(dp27748 -S'editable' -p27749 -I00 -sS'value' -p27750 -S'none' -p27751 -sssS'description' -p27752 -(dp27753 -S'editable' -p27754 -I01 -sS'value' -p27755 -g47 -sssS'id' -p27756 -(dp27757 -S'mandatory' -p27758 -(dp27759 -S'editable' -p27760 -I00 -sS'value' -p27761 -I00 -ssS'name' -p27762 -(dp27763 -S'editable' -p27764 -I01 -sS'value' -p27765 -S'Id' -p27766 -ssS'data_type' -p27767 -(dp27768 -S'editable' -p27769 -I00 -sS'value' -p27770 -S'number' -p27771 -ssS'entity_type' -p27772 -(dp27773 -S'editable' -p27774 -I00 -sS'value' -p27775 -S'Page' -p27776 -ssS'editable' -p27777 -(dp27778 -S'editable' -p27779 -I00 -sS'value' -p27780 -I00 -ssS'unique' -p27781 -(dp27782 -S'editable' -p27783 -I00 -sS'value' -p27784 -I00 -ssS'properties' -p27785 -(dp27786 -S'default_value' -p27787 -(dp27788 -S'editable' -p27789 -I00 -sS'value' -p27790 -NssS'summary_default' -p27791 -(dp27792 -S'editable' -p27793 -I01 -sS'value' -p27794 -S'none' -p27795 -sssS'description' -p27796 -(dp27797 -S'editable' -p27798 -I01 -sS'value' -p27799 -g47 -sssS'accesses_by_current_user' -p27800 -(dp27801 -S'mandatory' -p27802 -(dp27803 -S'editable' -p27804 -I00 -sS'value' -p27805 -I00 -ssS'name' -p27806 -(dp27807 -S'editable' -p27808 -I01 -sS'value' -p27809 -S'Times Accessed' -p27810 -ssS'data_type' -p27811 -(dp27812 -S'editable' -p27813 -I00 -sS'value' -p27814 -S'number' -p27815 -ssS'entity_type' -p27816 -(dp27817 -S'editable' -p27818 -I00 -sS'value' -p27819 -S'Page' -p27820 -ssS'editable' -p27821 -(dp27822 -S'editable' -p27823 -I00 -sS'value' -p27824 -I00 -ssS'unique' -p27825 -(dp27826 -S'editable' -p27827 -I00 -sS'value' -p27828 -I00 -ssS'properties' -p27829 -(dp27830 -S'default_value' -p27831 -(dp27832 -S'editable' -p27833 -I00 -sS'value' -p27834 -NssS'summary_default' -p27835 -(dp27836 -S'editable' -p27837 -I01 -sS'value' -p27838 -S'none' -p27839 -sssS'description' -p27840 -(dp27841 -S'editable' -p27842 -I01 -sS'value' -p27843 -g47 -sssS'updated_by' -p27844 -(dp27845 -S'mandatory' -p27846 -(dp27847 -S'editable' -p27848 -I00 -sS'value' -p27849 -I00 -ssS'name' -p27850 -(dp27851 -S'editable' -p27852 -I01 -sS'value' -p27853 -S'Updated by' -p27854 -ssS'data_type' -p27855 -(dp27856 -S'editable' -p27857 -I00 -sS'value' -p27858 -S'entity' -p27859 -ssS'entity_type' -p27860 -(dp27861 -S'editable' -p27862 -I00 -sS'value' -p27863 -S'Page' -p27864 -ssS'editable' -p27865 -(dp27866 -S'editable' -p27867 -I00 -sS'value' -p27868 -I00 -ssS'unique' -p27869 -(dp27870 -S'editable' -p27871 -I00 -sS'value' -p27872 -I00 -ssS'properties' -p27873 -(dp27874 -S'default_value' -p27875 -(dp27876 -S'editable' -p27877 -I00 -sS'value' -p27878 -NssS'summary_default' -p27879 -(dp27880 -S'editable' -p27881 -I00 -sS'value' -p27882 -S'none' -p27883 -ssS'valid_types' -p27884 -(dp27885 -S'editable' -p27886 -I00 -sS'value' -p27887 -(lp27888 -S'HumanUser' -p27889 -aS'ApiUser' -p27890 -asssS'description' -p27891 -(dp27892 -S'editable' -p27893 -I01 -sS'value' -p27894 -g47 -sssS'entity_type' -p27895 -(dp27896 -S'mandatory' -p27897 -(dp27898 -S'editable' -p27899 -I00 -sS'value' -p27900 -I00 -ssS'name' -p27901 -(dp27902 -S'editable' -p27903 -I01 -sS'value' -p27904 -S'Entity Type' -p27905 -ssS'data_type' -p27906 -(dp27907 -S'editable' -p27908 -I00 -sS'value' -p27909 -S'entity_type' -p27910 -ssS'entity_type' -p27911 -(dp27912 -S'editable' -p27913 -I00 -sS'value' -p27914 -S'Page' -p27915 -ssS'editable' -p27916 -(dp27917 -S'editable' -p27918 -I00 -sS'value' -p27919 -I00 -ssS'unique' -p27920 -(dp27921 -S'editable' -p27922 -I00 -sS'value' -p27923 -I00 -ssS'properties' -p27924 -(dp27925 -S'default_value' -p27926 -(dp27927 -S'editable' -p27928 -I00 -sS'value' -p27929 -NssS'summary_default' -p27930 -(dp27931 -S'editable' -p27932 -I01 -sS'value' -p27933 -S'none' -p27934 -sssS'description' -p27935 -(dp27936 -S'editable' -p27937 -I01 -sS'value' -p27938 -g47 -sssS'created_by' -p27939 -(dp27940 -S'mandatory' -p27941 -(dp27942 -S'editable' -p27943 -I00 -sS'value' -p27944 -I00 -ssS'name' -p27945 -(dp27946 -S'editable' -p27947 -I01 -sS'value' -p27948 -S'Created by' -p27949 -ssS'data_type' -p27950 -(dp27951 -S'editable' -p27952 -I00 -sS'value' -p27953 -S'entity' -p27954 -ssS'entity_type' -p27955 -(dp27956 -S'editable' -p27957 -I00 -sS'value' -p27958 -S'Page' -p27959 -ssS'editable' -p27960 -(dp27961 -S'editable' -p27962 -I00 -sS'value' -p27963 -I00 -ssS'unique' -p27964 -(dp27965 -S'editable' -p27966 -I00 -sS'value' -p27967 -I00 -ssS'properties' -p27968 -(dp27969 -S'default_value' -p27970 -(dp27971 -S'editable' -p27972 -I00 -sS'value' -p27973 -NssS'summary_default' -p27974 -(dp27975 -S'editable' -p27976 -I00 -sS'value' -p27977 -S'none' -p27978 -ssS'valid_types' -p27979 -(dp27980 -S'editable' -p27981 -I00 -sS'value' -p27982 -(lp27983 -S'HumanUser' -p27984 -aS'ApiUser' -p27985 -asssS'description' -p27986 -(dp27987 -S'editable' -p27988 -I01 -sS'value' -p27989 -g47 -sssS'page_type' -p27990 -(dp27991 -S'mandatory' -p27992 -(dp27993 -S'editable' -p27994 -I00 -sS'value' -p27995 -I00 -ssS'name' -p27996 -(dp27997 -S'editable' -p27998 -I01 -sS'value' -p27999 -S'Page Type' -p28000 -ssS'data_type' -p28001 -(dp28002 -S'editable' -p28003 -I00 -sS'value' -p28004 -S'text' -p28005 -ssS'entity_type' -p28006 -(dp28007 -S'editable' -p28008 -I00 -sS'value' -p28009 -S'Page' -p28010 -ssS'editable' -p28011 -(dp28012 -S'editable' -p28013 -I00 -sS'value' -p28014 -I00 -ssS'unique' -p28015 -(dp28016 -S'editable' -p28017 -I00 -sS'value' -p28018 -I00 -ssS'properties' -p28019 -(dp28020 -S'default_value' -p28021 -(dp28022 -S'editable' -p28023 -I00 -sS'value' -p28024 -NssS'summary_default' -p28025 -(dp28026 -S'editable' -p28027 -I01 -sS'value' -p28028 -S'none' -p28029 -sssS'description' -p28030 -(dp28031 -S'editable' -p28032 -I01 -sS'value' -p28033 -g47 -sssS'current_user_favorite' -p28034 -(dp28035 -S'mandatory' -p28036 -(dp28037 -S'editable' -p28038 -I00 -sS'value' -p28039 -I00 -ssS'name' -p28040 -(dp28041 -S'editable' -p28042 -I01 -sS'value' -p28043 -S'Favorite' -p28044 -ssS'data_type' -p28045 -(dp28046 -S'editable' -p28047 -I00 -sS'value' -p28048 -S'checkbox' -p28049 -ssS'entity_type' -p28050 -(dp28051 -S'editable' -p28052 -I00 -sS'value' -p28053 -S'Page' -p28054 -ssS'editable' -p28055 -(dp28056 -S'editable' -p28057 -I00 -sS'value' -p28058 -I01 -ssS'unique' -p28059 -(dp28060 -S'editable' -p28061 -I00 -sS'value' -p28062 -I00 -ssS'properties' -p28063 -(dp28064 -S'default_value' -p28065 -(dp28066 -S'editable' -p28067 -I00 -sS'value' -p28068 -NssS'summary_default' -p28069 -(dp28070 -S'editable' -p28071 -I01 -sS'value' -p28072 -S'none' -p28073 -sssS'description' -p28074 -(dp28075 -S'editable' -p28076 -I01 -sS'value' -p28077 -g47 -sssS'shared' -p28078 -(dp28079 -S'mandatory' -p28080 -(dp28081 -S'editable' -p28082 -I00 -sS'value' -p28083 -I00 -ssS'name' -p28084 -(dp28085 -S'editable' -p28086 -I01 -sS'value' -p28087 -S'Shared' -p28088 -ssS'data_type' -p28089 -(dp28090 -S'editable' -p28091 -I00 -sS'value' -p28092 -S'checkbox' -p28093 -ssS'entity_type' -p28094 -(dp28095 -S'editable' -p28096 -I00 -sS'value' -p28097 -S'Page' -p28098 -ssS'editable' -p28099 -(dp28100 -S'editable' -p28101 -I00 -sS'value' -p28102 -I01 -ssS'unique' -p28103 -(dp28104 -S'editable' -p28105 -I00 -sS'value' -p28106 -I00 -ssS'properties' -p28107 -(dp28108 -S'default_value' -p28109 -(dp28110 -S'editable' -p28111 -I00 -sS'value' -p28112 -I00 -ssS'summary_default' -p28113 -(dp28114 -S'editable' -p28115 -I01 -sS'value' -p28116 -S'none' -p28117 -sssS'description' -p28118 -(dp28119 -S'editable' -p28120 -I01 -sS'value' -p28121 -g47 -sssS'folder' -p28122 -(dp28123 -S'mandatory' -p28124 -(dp28125 -S'editable' -p28126 -I00 -sS'value' -p28127 -I00 -ssS'name' -p28128 -(dp28129 -S'editable' -p28130 -I01 -sS'value' -p28131 -S'Folder' -p28132 -ssS'data_type' -p28133 -(dp28134 -S'editable' -p28135 -I00 -sS'value' -p28136 -S'text' -p28137 -ssS'entity_type' -p28138 -(dp28139 -S'editable' -p28140 -I00 -sS'value' -p28141 -S'Page' -p28142 -ssS'editable' -p28143 -(dp28144 -S'editable' -p28145 -I00 -sS'value' -p28146 -I01 -ssS'unique' -p28147 -(dp28148 -S'editable' -p28149 -I00 -sS'value' -p28150 -I00 -ssS'properties' -p28151 -(dp28152 -S'default_value' -p28153 -(dp28154 -S'editable' -p28155 -I00 -sS'value' -p28156 -NssS'summary_default' -p28157 -(dp28158 -S'editable' -p28159 -I01 -sS'value' -p28160 -S'none' -p28161 -sssS'description' -p28162 -(dp28163 -S'editable' -p28164 -I01 -sS'value' -p28165 -g47 -sssS'last_accessed_by_current_user' -p28166 -(dp28167 -S'mandatory' -p28168 -(dp28169 -S'editable' -p28170 -I00 -sS'value' -p28171 -I00 -ssS'name' -p28172 -(dp28173 -S'editable' -p28174 -I01 -sS'value' -p28175 -S'Last Accessed by Me' -p28176 -ssS'data_type' -p28177 -(dp28178 -S'editable' -p28179 -I00 -sS'value' -p28180 -S'date_time' -p28181 -ssS'entity_type' -p28182 -(dp28183 -S'editable' -p28184 -I00 -sS'value' -p28185 -S'Page' -p28186 -ssS'editable' -p28187 -(dp28188 -S'editable' -p28189 -I00 -sS'value' -p28190 -I00 -ssS'unique' -p28191 -(dp28192 -S'editable' -p28193 -I00 -sS'value' -p28194 -I00 -ssS'properties' -p28195 -(dp28196 -S'default_value' -p28197 -(dp28198 -S'editable' -p28199 -I00 -sS'value' -p28200 -NssS'summary_default' -p28201 -(dp28202 -S'editable' -p28203 -I01 -sS'value' -p28204 -S'none' -p28205 -sssS'description' -p28206 -(dp28207 -S'editable' -p28208 -I01 -sS'value' -p28209 -g47 -sssS'description' -p28210 -(dp28211 -S'mandatory' -p28212 -(dp28213 -S'editable' -p28214 -I00 -sS'value' -p28215 -I00 -ssS'name' -p28216 -(dp28217 -S'editable' -p28218 -I01 -sS'value' -p28219 -S'Description' -p28220 -ssS'data_type' -p28221 -(dp28222 -S'editable' -p28223 -I00 -sS'value' -p28224 -S'text' -p28225 -ssS'entity_type' -p28226 -(dp28227 -S'editable' -p28228 -I00 -sS'value' -p28229 -S'Page' -p28230 -ssS'editable' -p28231 -(dp28232 -S'editable' -p28233 -I00 -sS'value' -p28234 -I01 -ssS'unique' -p28235 -(dp28236 -S'editable' -p28237 -I00 -sS'value' -p28238 -I00 -ssS'properties' -p28239 -(dp28240 -S'default_value' -p28241 -(dp28242 -S'editable' -p28243 -I00 -sS'value' -p28244 -NssS'summary_default' -p28245 -(dp28246 -S'editable' -p28247 -I00 -sS'value' -p28248 -S'none' -p28249 -sssS'description' -p28250 -(dp28251 -S'editable' -p28252 -I01 -sS'value' -p28253 -g47 -sssS'last_accessed' -p28254 -(dp28255 -S'mandatory' -p28256 -(dp28257 -S'editable' -p28258 -I00 -sS'value' -p28259 -I00 -ssS'name' -p28260 -(dp28261 -S'editable' -p28262 -I01 -sS'value' -p28263 -S'Last Accessed' -p28264 -ssS'data_type' -p28265 -(dp28266 -S'editable' -p28267 -I00 -sS'value' -p28268 -S'date_time' -p28269 -ssS'entity_type' -p28270 -(dp28271 -S'editable' -p28272 -I00 -sS'value' -p28273 -S'Page' -p28274 -ssS'editable' -p28275 -(dp28276 -S'editable' -p28277 -I00 -sS'value' -p28278 -I00 -ssS'unique' -p28279 -(dp28280 -S'editable' -p28281 -I00 -sS'value' -p28282 -I00 -ssS'properties' -p28283 -(dp28284 -S'default_value' -p28285 -(dp28286 -S'editable' -p28287 -I00 -sS'value' -p28288 -NssS'summary_default' -p28289 -(dp28290 -S'editable' -p28291 -I01 -sS'value' -p28292 -S'none' -p28293 -sssS'description' -p28294 -(dp28295 -S'editable' -p28296 -I01 -sS'value' -p28297 -g47 -sssS'default_type' -p28298 -(dp28299 -S'mandatory' -p28300 -(dp28301 -S'editable' -p28302 -I00 -sS'value' -p28303 -I00 -ssS'name' -p28304 -(dp28305 -S'editable' -p28306 -I01 -sS'value' -p28307 -S'Default Type' -p28308 -ssS'data_type' -p28309 -(dp28310 -S'editable' -p28311 -I00 -sS'value' -p28312 -S'text' -p28313 -ssS'entity_type' -p28314 -(dp28315 -S'editable' -p28316 -I00 -sS'value' -p28317 -S'Page' -p28318 -ssS'editable' -p28319 -(dp28320 -S'editable' -p28321 -I00 -sS'value' -p28322 -I00 -ssS'unique' -p28323 -(dp28324 -S'editable' -p28325 -I00 -sS'value' -p28326 -I00 -ssS'properties' -p28327 -(dp28328 -S'default_value' -p28329 -(dp28330 -S'editable' -p28331 -I00 -sS'value' -p28332 -NssS'summary_default' -p28333 -(dp28334 -S'editable' -p28335 -I01 -sS'value' -p28336 -S'none' -p28337 -sssS'description' -p28338 -(dp28339 -S'editable' -p28340 -I01 -sS'value' -p28341 -g47 -sssS'current_user_can_see' -p28342 -(dp28343 -S'mandatory' -p28344 -(dp28345 -S'editable' -p28346 -I00 -sS'value' -p28347 -I00 -ssS'name' -p28348 -(dp28349 -S'editable' -p28350 -I01 -sS'value' -p28351 -S'Current User Can See' -p28352 -ssS'data_type' -p28353 -(dp28354 -S'editable' -p28355 -I00 -sS'value' -p28356 -S'checkbox' -p28357 -ssS'entity_type' -p28358 -(dp28359 -S'editable' -p28360 -I00 -sS'value' -p28361 -S'Page' -p28362 -ssS'editable' -p28363 -(dp28364 -S'editable' -p28365 -I00 -sS'value' -p28366 -I00 -ssS'unique' -p28367 -(dp28368 -S'editable' -p28369 -I00 -sS'value' -p28370 -I00 -ssS'properties' -p28371 -(dp28372 -S'default_value' -p28373 -(dp28374 -S'editable' -p28375 -I00 -sS'value' -p28376 -NssS'summary_default' -p28377 -(dp28378 -S'editable' -p28379 -I00 -sS'value' -p28380 -S'none' -p28381 -sssS'description' -p28382 -(dp28383 -S'editable' -p28384 -I01 -sS'value' -p28385 -g47 -sssS'name' -p28386 -(dp28387 -S'mandatory' -p28388 -(dp28389 -S'editable' -p28390 -I00 -sS'value' -p28391 -I01 -ssS'name' -p28392 -(dp28393 -S'editable' -p28394 -I01 -sS'value' -p28395 -S'Name' -p28396 -ssS'data_type' -p28397 -(dp28398 -S'editable' -p28399 -I00 -sS'value' -p28400 -S'text' -p28401 -ssS'entity_type' -p28402 -(dp28403 -S'editable' -p28404 -I00 -sS'value' -p28405 -S'Page' -p28406 -ssS'editable' -p28407 -(dp28408 -S'editable' -p28409 -I00 -sS'value' -p28410 -I01 -ssS'unique' -p28411 -(dp28412 -S'editable' -p28413 -I00 -sS'value' -p28414 -I00 -ssS'properties' -p28415 -(dp28416 -S'default_value' -p28417 -(dp28418 -S'editable' -p28419 -I00 -sS'value' -p28420 -NssS'summary_default' -p28421 -(dp28422 -S'editable' -p28423 -I01 -sS'value' -p28424 -S'none' -p28425 -sssS'description' -p28426 -(dp28427 -S'editable' -p28428 -I01 -sS'value' -p28429 -g47 -sssS'admin' -p28430 -(dp28431 -S'mandatory' -p28432 -(dp28433 -S'editable' -p28434 -I00 -sS'value' -p28435 -I00 -ssS'name' -p28436 -(dp28437 -S'editable' -p28438 -I01 -sS'value' -p28439 -S'Admin Only' -p28440 -ssS'data_type' -p28441 -(dp28442 -S'editable' -p28443 -I00 -sS'value' -p28444 -S'checkbox' -p28445 -ssS'entity_type' -p28446 -(dp28447 -S'editable' -p28448 -I00 -sS'value' -p28449 -S'Page' -p28450 -ssS'editable' -p28451 -(dp28452 -S'editable' -p28453 -I00 -sS'value' -p28454 -I00 -ssS'unique' -p28455 -(dp28456 -S'editable' -p28457 -I00 -sS'value' -p28458 -I00 -ssS'properties' -p28459 -(dp28460 -S'default_value' -p28461 -(dp28462 -S'editable' -p28463 -I00 -sS'value' -p28464 -I00 -ssS'summary_default' -p28465 -(dp28466 -S'editable' -p28467 -I01 -sS'value' -p28468 -S'none' -p28469 -sssS'description' -p28470 -(dp28471 -S'editable' -p28472 -I01 -sS'value' -p28473 -g47 -sssS'created_at' -p28474 -(dp28475 -S'mandatory' -p28476 -(dp28477 -S'editable' -p28478 -I00 -sS'value' -p28479 -I00 -ssS'name' -p28480 -(dp28481 -S'editable' -p28482 -I01 -sS'value' -p28483 -S'Date Created' -p28484 -ssS'data_type' -p28485 -(dp28486 -S'editable' -p28487 -I00 -sS'value' -p28488 -S'date_time' -p28489 -ssS'entity_type' -p28490 -(dp28491 -S'editable' -p28492 -I00 -sS'value' -p28493 -S'Page' -p28494 -ssS'editable' -p28495 -(dp28496 -S'editable' -p28497 -I00 -sS'value' -p28498 -I00 -ssS'unique' -p28499 -(dp28500 -S'editable' -p28501 -I00 -sS'value' -p28502 -I00 -ssS'properties' -p28503 -(dp28504 -S'default_value' -p28505 -(dp28506 -S'editable' -p28507 -I00 -sS'value' -p28508 -NssS'summary_default' -p28509 -(dp28510 -S'editable' -p28511 -I00 -sS'value' -p28512 -S'none' -p28513 -sssS'description' -p28514 -(dp28515 -S'editable' -p28516 -I01 -sS'value' -p28517 -g47 -sssS'project' -p28518 -(dp28519 -S'mandatory' -p28520 -(dp28521 -S'editable' -p28522 -I00 -sS'value' -p28523 -I00 -ssS'name' -p28524 -(dp28525 -S'editable' -p28526 -I01 -sS'value' -p28527 -S'Project' -p28528 -ssS'data_type' -p28529 -(dp28530 -S'editable' -p28531 -I00 -sS'value' -p28532 -S'entity' -p28533 -ssS'entity_type' -p28534 -(dp28535 -S'editable' -p28536 -I00 -sS'value' -p28537 -S'Page' -p28538 -ssS'editable' -p28539 -(dp28540 -S'editable' -p28541 -I00 -sS'value' -p28542 -I01 -ssS'unique' -p28543 -(dp28544 -S'editable' -p28545 -I00 -sS'value' -p28546 -I00 -ssS'properties' -p28547 -(dp28548 -S'default_value' -p28549 -(dp28550 -S'editable' -p28551 -I00 -sS'value' -p28552 -NssS'summary_default' -p28553 -(dp28554 -S'editable' -p28555 -I01 -sS'value' -p28556 -S'none' -p28557 -ssS'valid_types' -p28558 -(dp28559 -S'editable' -p28560 -I01 -sS'value' -p28561 -(lp28562 -S'Project' -p28563 -asssS'description' -p28564 -(dp28565 -S'editable' -p28566 -I01 -sS'value' -p28567 -g47 -sssS'ui_category' -p28568 -(dp28569 -S'mandatory' -p28570 -(dp28571 -S'editable' -p28572 -I00 -sS'value' -p28573 -I00 -ssS'name' -p28574 -(dp28575 -S'editable' -p28576 -I01 -sS'value' -p28577 -S'UI Category' -p28578 -ssS'data_type' -p28579 -(dp28580 -S'editable' -p28581 -I00 -sS'value' -p28582 -S'text' -p28583 -ssS'entity_type' -p28584 -(dp28585 -S'editable' -p28586 -I00 -sS'value' -p28587 -S'Page' -p28588 -ssS'editable' -p28589 -(dp28590 -S'editable' -p28591 -I00 -sS'value' -p28592 -I00 -ssS'unique' -p28593 -(dp28594 -S'editable' -p28595 -I00 -sS'value' -p28596 -I00 -ssS'properties' -p28597 -(dp28598 -S'default_value' -p28599 -(dp28600 -S'editable' -p28601 -I00 -sS'value' -p28602 -NssS'summary_default' -p28603 -(dp28604 -S'editable' -p28605 -I01 -sS'value' -p28606 -S'none' -p28607 -sssS'description' -p28608 -(dp28609 -S'editable' -p28610 -I01 -sS'value' -p28611 -g47 -sssS'tag_list' -p28612 -(dp28613 -S'mandatory' -p28614 -(dp28615 -S'editable' -p28616 -I00 -sS'value' -p28617 -I00 -ssS'name' -p28618 -(dp28619 -S'editable' -p28620 -I01 -sS'value' -p28621 -S'Tags' -p28622 -ssS'data_type' -p28623 -(dp28624 -S'editable' -p28625 -I00 -sS'value' -p28626 -S'tag_list' -p28627 -ssS'entity_type' -p28628 -(dp28629 -S'editable' -p28630 -I00 -sS'value' -p28631 -S'Page' -p28632 -ssS'editable' -p28633 -(dp28634 -S'editable' -p28635 -I00 -sS'value' -p28636 -I01 -ssS'unique' -p28637 -(dp28638 -S'editable' -p28639 -I00 -sS'value' -p28640 -I00 -ssS'properties' -p28641 -(dp28642 -S'default_value' -p28643 -(dp28644 -S'editable' -p28645 -I00 -sS'value' -p28646 -NssS'summary_default' -p28647 -(dp28648 -S'editable' -p28649 -I01 -sS'value' -p28650 -S'none' -p28651 -ssS'valid_types' -p28652 -(dp28653 -S'editable' -p28654 -I01 -sS'value' -p28655 -(lp28656 -S'Tag' -p28657 -asssS'description' -p28658 -(dp28659 -S'editable' -p28660 -I01 -sS'value' -p28661 -g47 -sssS'hits_last_month' -p28662 -(dp28663 -S'mandatory' -p28664 -(dp28665 -S'editable' -p28666 -I00 -sS'value' -p28667 -I00 -ssS'name' -p28668 -(dp28669 -S'editable' -p28670 -I01 -sS'value' -p28671 -S'Page Hits Last Month' -p28672 -ssS'data_type' -p28673 -(dp28674 -S'editable' -p28675 -I00 -sS'value' -p28676 -S'number' -p28677 -ssS'entity_type' -p28678 -(dp28679 -S'editable' -p28680 -I00 -sS'value' -p28681 -S'Page' -p28682 -ssS'editable' -p28683 -(dp28684 -S'editable' -p28685 -I00 -sS'value' -p28686 -I00 -ssS'unique' -p28687 -(dp28688 -S'editable' -p28689 -I00 -sS'value' -p28690 -I00 -ssS'properties' -p28691 -(dp28692 -S'default_value' -p28693 -(dp28694 -S'editable' -p28695 -I00 -sS'value' -p28696 -NssS'summary_default' -p28697 -(dp28698 -S'editable' -p28699 -I01 -sS'value' -p28700 -S'none' -p28701 -sssS'description' -p28702 -(dp28703 -S'editable' -p28704 -I01 -sS'value' -p28705 -g47 -ssssS'CustomEntity02' -p28706 -(dp28707 -S'open_notes_count' -p28708 -(dp28709 -S'mandatory' -p28710 -(dp28711 -S'editable' -p28712 -I00 -sS'value' -p28713 -I00 -ssS'name' -p28714 -(dp28715 -S'editable' -p28716 -I01 -sS'value' -p28717 -S'Open Notes Count' -p28718 -ssS'data_type' -p28719 -(dp28720 -S'editable' -p28721 -I00 -sS'value' -p28722 -S'text' -p28723 -ssS'entity_type' -p28724 -(dp28725 -S'editable' -p28726 -I00 -sS'value' -p28727 -S'CustomEntity02' -p28728 -ssS'editable' -p28729 -(dp28730 -S'editable' -p28731 -I00 -sS'value' -p28732 -I00 -ssS'unique' -p28733 -(dp28734 -S'editable' -p28735 -I00 -sS'value' -p28736 -I00 -ssS'properties' -p28737 -(dp28738 -S'default_value' -p28739 -(dp28740 -S'editable' -p28741 -I00 -sS'value' -p28742 -NssS'summary_default' -p28743 -(dp28744 -S'editable' -p28745 -I01 -sS'value' -p28746 -S'none' -p28747 -sssS'description' -p28748 -(dp28749 -S'editable' -p28750 -I01 -sS'value' -p28751 -g47 -sssS'code' -p28752 -(dp28753 -S'mandatory' -p28754 -(dp28755 -S'editable' -p28756 -I00 -sS'value' -p28757 -I01 -ssS'name' -p28758 -(dp28759 -S'editable' -p28760 -I01 -sS'value' -p28761 -S'Custom Entity02 Name' -p28762 -ssS'data_type' -p28763 -(dp28764 -S'editable' -p28765 -I00 -sS'value' -p28766 -S'text' -p28767 -ssS'entity_type' -p28768 -(dp28769 -S'editable' -p28770 -I00 -sS'value' -p28771 -S'CustomEntity02' -p28772 -ssS'editable' -p28773 -(dp28774 -S'editable' -p28775 -I00 -sS'value' -p28776 -I01 -ssS'unique' -p28777 -(dp28778 -S'editable' -p28779 -I00 -sS'value' -p28780 -I00 -ssS'properties' -p28781 -(dp28782 -S'default_value' -p28783 -(dp28784 -S'editable' -p28785 -I00 -sS'value' -p28786 -NssS'summary_default' -p28787 -(dp28788 -S'editable' -p28789 -I01 -sS'value' -p28790 -S'none' -p28791 -sssS'description' -p28792 -(dp28793 -S'editable' -p28794 -I01 -sS'value' -p28795 -g47 -sssS'open_notes' -p28796 -(dp28797 -S'mandatory' -p28798 -(dp28799 -S'editable' -p28800 -I00 -sS'value' -p28801 -I00 -ssS'name' -p28802 -(dp28803 -S'editable' -p28804 -I01 -sS'value' -p28805 -S'Open Notes' -p28806 -ssS'data_type' -p28807 -(dp28808 -S'editable' -p28809 -I00 -sS'value' -p28810 -S'multi_entity' -p28811 -ssS'entity_type' -p28812 -(dp28813 -S'editable' -p28814 -I00 -sS'value' -p28815 -S'CustomEntity02' -p28816 -ssS'editable' -p28817 -(dp28818 -S'editable' -p28819 -I00 -sS'value' -p28820 -I00 -ssS'unique' -p28821 -(dp28822 -S'editable' -p28823 -I00 -sS'value' -p28824 -I00 -ssS'properties' -p28825 -(dp28826 -S'default_value' -p28827 -(dp28828 -S'editable' -p28829 -I00 -sS'value' -p28830 -NssS'summary_default' -p28831 -(dp28832 -S'editable' -p28833 -I01 -sS'value' -p28834 -S'none' -p28835 -ssS'valid_types' -p28836 -(dp28837 -S'editable' -p28838 -I01 -sS'value' -p28839 -(lp28840 -S'Note' -p28841 -asssS'description' -p28842 -(dp28843 -S'editable' -p28844 -I01 -sS'value' -p28845 -g47 -sssS'description' -p28846 -(dp28847 -S'mandatory' -p28848 -(dp28849 -S'editable' -p28850 -I00 -sS'value' -p28851 -I00 -ssS'name' -p28852 -(dp28853 -S'editable' -p28854 -I01 -sS'value' -p28855 -S'Description' -p28856 -ssS'data_type' -p28857 -(dp28858 -S'editable' -p28859 -I00 -sS'value' -p28860 -S'text' -p28861 -ssS'entity_type' -p28862 -(dp28863 -S'editable' -p28864 -I00 -sS'value' -p28865 -S'CustomEntity02' -p28866 -ssS'editable' -p28867 -(dp28868 -S'editable' -p28869 -I00 -sS'value' -p28870 -I01 -ssS'unique' -p28871 -(dp28872 -S'editable' -p28873 -I00 -sS'value' -p28874 -I00 -ssS'properties' -p28875 -(dp28876 -S'default_value' -p28877 -(dp28878 -S'editable' -p28879 -I00 -sS'value' -p28880 -NssS'summary_default' -p28881 -(dp28882 -S'editable' -p28883 -I01 -sS'value' -p28884 -S'none' -p28885 -sssS'description' -p28886 -(dp28887 -S'editable' -p28888 -I01 -sS'value' -p28889 -g47 -sssS'created_at' -p28890 -(dp28891 -S'mandatory' -p28892 -(dp28893 -S'editable' -p28894 -I00 -sS'value' -p28895 -I00 -ssS'name' -p28896 -(dp28897 -S'editable' -p28898 -I01 -sS'value' -p28899 -S'Date Created' -p28900 -ssS'data_type' -p28901 -(dp28902 -S'editable' -p28903 -I00 -sS'value' -p28904 -S'date_time' -p28905 -ssS'entity_type' -p28906 -(dp28907 -S'editable' -p28908 -I00 -sS'value' -p28909 -S'CustomEntity02' -p28910 -ssS'editable' -p28911 -(dp28912 -S'editable' -p28913 -I00 -sS'value' -p28914 -I00 -ssS'unique' -p28915 -(dp28916 -S'editable' -p28917 -I00 -sS'value' -p28918 -I00 -ssS'properties' -p28919 -(dp28920 -S'default_value' -p28921 -(dp28922 -S'editable' -p28923 -I00 -sS'value' -p28924 -NssS'summary_default' -p28925 -(dp28926 -S'editable' -p28927 -I01 -sS'value' -p28928 -S'none' -p28929 -sssS'description' -p28930 -(dp28931 -S'editable' -p28932 -I01 -sS'value' -p28933 -g47 -sssS'updated_at' -p28934 -(dp28935 -S'mandatory' -p28936 -(dp28937 -S'editable' -p28938 -I00 -sS'value' -p28939 -I00 -ssS'name' -p28940 -(dp28941 -S'editable' -p28942 -I01 -sS'value' -p28943 -S'Date Updated' -p28944 -ssS'data_type' -p28945 -(dp28946 -S'editable' -p28947 -I00 -sS'value' -p28948 -S'date_time' -p28949 -ssS'entity_type' -p28950 -(dp28951 -S'editable' -p28952 -I00 -sS'value' -p28953 -S'CustomEntity02' -p28954 -ssS'editable' -p28955 -(dp28956 -S'editable' -p28957 -I00 -sS'value' -p28958 -I00 -ssS'unique' -p28959 -(dp28960 -S'editable' -p28961 -I00 -sS'value' -p28962 -I00 -ssS'properties' -p28963 -(dp28964 -S'default_value' -p28965 -(dp28966 -S'editable' -p28967 -I00 -sS'value' -p28968 -NssS'summary_default' -p28969 -(dp28970 -S'editable' -p28971 -I01 -sS'value' -p28972 -S'none' -p28973 -sssS'description' -p28974 -(dp28975 -S'editable' -p28976 -I01 -sS'value' -p28977 -g47 -sssS'created_by' -p28978 -(dp28979 -S'mandatory' -p28980 -(dp28981 -S'editable' -p28982 -I00 -sS'value' -p28983 -I00 -ssS'name' -p28984 -(dp28985 -S'editable' -p28986 -I01 -sS'value' -p28987 -S'Created by' -p28988 -ssS'data_type' -p28989 -(dp28990 -S'editable' -p28991 -I00 -sS'value' -p28992 -S'entity' -p28993 -ssS'entity_type' -p28994 -(dp28995 -S'editable' -p28996 -I00 -sS'value' -p28997 -S'CustomEntity02' -p28998 -ssS'editable' -p28999 -(dp29000 -S'editable' -p29001 -I00 -sS'value' -p29002 -I00 -ssS'unique' -p29003 -(dp29004 -S'editable' -p29005 -I00 -sS'value' -p29006 -I00 -ssS'properties' -p29007 -(dp29008 -S'default_value' -p29009 -(dp29010 -S'editable' -p29011 -I00 -sS'value' -p29012 -NssS'summary_default' -p29013 -(dp29014 -S'editable' -p29015 -I01 -sS'value' -p29016 -S'none' -p29017 -ssS'valid_types' -p29018 -(dp29019 -S'editable' -p29020 -I01 -sS'value' -p29021 -(lp29022 -S'HumanUser' -p29023 -aS'ApiUser' -p29024 -asssS'description' -p29025 -(dp29026 -S'editable' -p29027 -I01 -sS'value' -p29028 -g47 -sssS'id' -p29029 -(dp29030 -S'mandatory' -p29031 -(dp29032 -S'editable' -p29033 -I00 -sS'value' -p29034 -I00 -ssS'name' -p29035 -(dp29036 -S'editable' -p29037 -I01 -sS'value' -p29038 -S'Id' -p29039 -ssS'data_type' -p29040 -(dp29041 -S'editable' -p29042 -I00 -sS'value' -p29043 -S'number' -p29044 -ssS'entity_type' -p29045 -(dp29046 -S'editable' -p29047 -I00 -sS'value' -p29048 -S'CustomEntity02' -p29049 -ssS'editable' -p29050 -(dp29051 -S'editable' -p29052 -I00 -sS'value' -p29053 -I00 -ssS'unique' -p29054 -(dp29055 -S'editable' -p29056 -I00 -sS'value' -p29057 -I00 -ssS'properties' -p29058 -(dp29059 -S'default_value' -p29060 -(dp29061 -S'editable' -p29062 -I00 -sS'value' -p29063 -NssS'summary_default' -p29064 -(dp29065 -S'editable' -p29066 -I01 -sS'value' -p29067 -S'none' -p29068 -sssS'description' -p29069 -(dp29070 -S'editable' -p29071 -I01 -sS'value' -p29072 -g47 -sssS'project' -p29073 -(dp29074 -S'mandatory' -p29075 -(dp29076 -S'editable' -p29077 -I00 -sS'value' -p29078 -I00 -ssS'name' -p29079 -(dp29080 -S'editable' -p29081 -I01 -sS'value' -p29082 -S'Project' -p29083 -ssS'data_type' -p29084 -(dp29085 -S'editable' -p29086 -I00 -sS'value' -p29087 -S'entity' -p29088 -ssS'entity_type' -p29089 -(dp29090 -S'editable' -p29091 -I00 -sS'value' -p29092 -S'CustomEntity02' -p29093 -ssS'editable' -p29094 -(dp29095 -S'editable' -p29096 -I00 -sS'value' -p29097 -I01 -ssS'unique' -p29098 -(dp29099 -S'editable' -p29100 -I00 -sS'value' -p29101 -I00 -ssS'properties' -p29102 -(dp29103 -S'default_value' -p29104 -(dp29105 -S'editable' -p29106 -I00 -sS'value' -p29107 -NssS'summary_default' -p29108 -(dp29109 -S'editable' -p29110 -I01 -sS'value' -p29111 -S'none' -p29112 -ssS'valid_types' -p29113 -(dp29114 -S'editable' -p29115 -I01 -sS'value' -p29116 -(lp29117 -S'Project' -p29118 -asssS'description' -p29119 -(dp29120 -S'editable' -p29121 -I01 -sS'value' -p29122 -g47 -sssS'filmstrip_image' -p29123 -(dp29124 -S'mandatory' -p29125 -(dp29126 -S'editable' -p29127 -I00 -sS'value' -p29128 -I00 -ssS'name' -p29129 -(dp29130 -S'editable' -p29131 -I01 -sS'value' -p29132 -S'Filmstrip Thumbnail' -p29133 -ssS'data_type' -p29134 -(dp29135 -S'editable' -p29136 -I00 -sS'value' -p29137 -S'image' -p29138 -ssS'entity_type' -p29139 -(dp29140 -S'editable' -p29141 -I00 -sS'value' -p29142 -S'CustomEntity02' -p29143 -ssS'editable' -p29144 -(dp29145 -S'editable' -p29146 -I00 -sS'value' -p29147 -I01 -ssS'unique' -p29148 -(dp29149 -S'editable' -p29150 -I00 -sS'value' -p29151 -I00 -ssS'properties' -p29152 -(dp29153 -S'default_value' -p29154 -(dp29155 -S'editable' -p29156 -I00 -sS'value' -p29157 -NssS'summary_default' -p29158 -(dp29159 -S'editable' -p29160 -I01 -sS'value' -p29161 -S'none' -p29162 -sssS'description' -p29163 -(dp29164 -S'editable' -p29165 -I01 -sS'value' -p29166 -g47 -sssS'sg_status_list' -p29167 -(dp29168 -S'mandatory' -p29169 -(dp29170 -S'editable' -p29171 -I00 -sS'value' -p29172 -I00 -ssS'name' -p29173 -(dp29174 -S'editable' -p29175 -I01 -sS'value' -p29176 -S'Status' -p29177 -ssS'data_type' -p29178 -(dp29179 -S'editable' -p29180 -I00 -sS'value' -p29181 -S'status_list' -p29182 -ssS'entity_type' -p29183 -(dp29184 -S'editable' -p29185 -I00 -sS'value' -p29186 -S'CustomEntity02' -p29187 -ssS'editable' -p29188 -(dp29189 -S'editable' -p29190 -I00 -sS'value' -p29191 -I01 -ssS'unique' -p29192 -(dp29193 -S'editable' -p29194 -I00 -sS'value' -p29195 -I00 -ssS'properties' -p29196 -(dp29197 -S'default_value' -p29198 -(dp29199 -S'editable' -p29200 -I01 -sS'value' -p29201 -S'wtg' -p29202 -ssS'valid_values' -p29203 -(dp29204 -S'editable' -p29205 -I01 -sS'value' -p29206 -(lp29207 -S'cmpt' -p29208 -aS'ip' -p29209 -aS'wtg' -p29210 -assS'summary_default' -p29211 -(dp29212 -S'editable' -p29213 -I01 -sS'value' -p29214 -S'none' -p29215 -sssS'description' -p29216 -(dp29217 -S'editable' -p29218 -I01 -sS'value' -p29219 -g47 -sssS'image' -p29220 -(dp29221 -S'mandatory' -p29222 -(dp29223 -S'editable' -p29224 -I00 -sS'value' -p29225 -I00 -ssS'name' -p29226 -(dp29227 -S'editable' -p29228 -I01 -sS'value' -p29229 -S'Thumbnail' -p29230 -ssS'data_type' -p29231 -(dp29232 -S'editable' -p29233 -I00 -sS'value' -p29234 -S'image' -p29235 -ssS'entity_type' -p29236 -(dp29237 -S'editable' -p29238 -I00 -sS'value' -p29239 -S'CustomEntity02' -p29240 -ssS'editable' -p29241 -(dp29242 -S'editable' -p29243 -I00 -sS'value' -p29244 -I01 -ssS'unique' -p29245 -(dp29246 -S'editable' -p29247 -I00 -sS'value' -p29248 -I00 -ssS'properties' -p29249 -(dp29250 -S'default_value' -p29251 -(dp29252 -S'editable' -p29253 -I00 -sS'value' -p29254 -NssS'summary_default' -p29255 -(dp29256 -S'editable' -p29257 -I01 -sS'value' -p29258 -S'none' -p29259 -sssS'description' -p29260 -(dp29261 -S'editable' -p29262 -I01 -sS'value' -p29263 -g47 -sssS'cached_display_name' -p29264 -(dp29265 -S'mandatory' -p29266 -(dp29267 -S'editable' -p29268 -I00 -sS'value' -p29269 -I00 -ssS'name' -p29270 -(dp29271 -S'editable' -p29272 -I01 -sS'value' -p29273 -S'Cached Display Name' -p29274 -ssS'data_type' -p29275 -(dp29276 -S'editable' -p29277 -I00 -sS'value' -p29278 -S'text' -p29279 -ssS'entity_type' -p29280 -(dp29281 -S'editable' -p29282 -I00 -sS'value' -p29283 -S'CustomEntity02' -p29284 -ssS'editable' -p29285 -(dp29286 -S'editable' -p29287 -I00 -sS'value' -p29288 -I01 -ssS'unique' -p29289 -(dp29290 -S'editable' -p29291 -I00 -sS'value' -p29292 -I00 -ssS'properties' -p29293 -(dp29294 -S'default_value' -p29295 -(dp29296 -S'editable' -p29297 -I00 -sS'value' -p29298 -NssS'summary_default' -p29299 -(dp29300 -S'editable' -p29301 -I00 -sS'value' -p29302 -S'none' -p29303 -sssS'description' -p29304 -(dp29305 -S'editable' -p29306 -I01 -sS'value' -p29307 -g47 -sssS'tag_list' -p29308 -(dp29309 -S'mandatory' -p29310 -(dp29311 -S'editable' -p29312 -I00 -sS'value' -p29313 -I00 -ssS'name' -p29314 -(dp29315 -S'editable' -p29316 -I01 -sS'value' -p29317 -S'Tags' -p29318 -ssS'data_type' -p29319 -(dp29320 -S'editable' -p29321 -I00 -sS'value' -p29322 -S'tag_list' -p29323 -ssS'entity_type' -p29324 -(dp29325 -S'editable' -p29326 -I00 -sS'value' -p29327 -S'CustomEntity02' -p29328 -ssS'editable' -p29329 -(dp29330 -S'editable' -p29331 -I00 -sS'value' -p29332 -I01 -ssS'unique' -p29333 -(dp29334 -S'editable' -p29335 -I00 -sS'value' -p29336 -I00 -ssS'properties' -p29337 -(dp29338 -S'default_value' -p29339 -(dp29340 -S'editable' -p29341 -I00 -sS'value' -p29342 -NssS'summary_default' -p29343 -(dp29344 -S'editable' -p29345 -I01 -sS'value' -p29346 -S'none' -p29347 -ssS'valid_types' -p29348 -(dp29349 -S'editable' -p29350 -I01 -sS'value' -p29351 -(lp29352 -S'Tag' -p29353 -asssS'description' -p29354 -(dp29355 -S'editable' -p29356 -I01 -sS'value' -p29357 -g47 -sssS'notes' -p29358 -(dp29359 -S'mandatory' -p29360 -(dp29361 -S'editable' -p29362 -I00 -sS'value' -p29363 -I00 -ssS'name' -p29364 -(dp29365 -S'editable' -p29366 -I01 -sS'value' -p29367 -S'Notes' -p29368 -ssS'data_type' -p29369 -(dp29370 -S'editable' -p29371 -I00 -sS'value' -p29372 -S'multi_entity' -p29373 -ssS'entity_type' -p29374 -(dp29375 -S'editable' -p29376 -I00 -sS'value' -p29377 -S'CustomEntity02' -p29378 -ssS'editable' -p29379 -(dp29380 -S'editable' -p29381 -I00 -sS'value' -p29382 -I01 -ssS'unique' -p29383 -(dp29384 -S'editable' -p29385 -I00 -sS'value' -p29386 -I00 -ssS'properties' -p29387 -(dp29388 -S'default_value' -p29389 -(dp29390 -S'editable' -p29391 -I00 -sS'value' -p29392 -NssS'summary_default' -p29393 -(dp29394 -S'editable' -p29395 -I01 -sS'value' -p29396 -S'none' -p29397 -ssS'valid_types' -p29398 -(dp29399 -S'editable' -p29400 -I01 -sS'value' -p29401 -(lp29402 -S'Note' -p29403 -asssS'description' -p29404 -(dp29405 -S'editable' -p29406 -I01 -sS'value' -p29407 -g47 -sssS'updated_by' -p29408 -(dp29409 -S'mandatory' -p29410 -(dp29411 -S'editable' -p29412 -I00 -sS'value' -p29413 -I00 -ssS'name' -p29414 -(dp29415 -S'editable' -p29416 -I01 -sS'value' -p29417 -S'Updated by' -p29418 -ssS'data_type' -p29419 -(dp29420 -S'editable' -p29421 -I00 -sS'value' -p29422 -S'entity' -p29423 -ssS'entity_type' -p29424 -(dp29425 -S'editable' -p29426 -I00 -sS'value' -p29427 -S'CustomEntity02' -p29428 -ssS'editable' -p29429 -(dp29430 -S'editable' -p29431 -I00 -sS'value' -p29432 -I00 -ssS'unique' -p29433 -(dp29434 -S'editable' -p29435 -I00 -sS'value' -p29436 -I00 -ssS'properties' -p29437 -(dp29438 -S'default_value' -p29439 -(dp29440 -S'editable' -p29441 -I00 -sS'value' -p29442 -NssS'summary_default' -p29443 -(dp29444 -S'editable' -p29445 -I01 -sS'value' -p29446 -S'none' -p29447 -ssS'valid_types' -p29448 -(dp29449 -S'editable' -p29450 -I01 -sS'value' -p29451 -(lp29452 -S'HumanUser' -p29453 -aS'ApiUser' -p29454 -asssS'description' -p29455 -(dp29456 -S'editable' -p29457 -I01 -sS'value' -p29458 -g47 -ssssS'CustomEntity03' -p29459 -(dp29460 -S'open_notes_count' -p29461 -(dp29462 -S'mandatory' -p29463 -(dp29464 -S'editable' -p29465 -I00 -sS'value' -p29466 -I00 -ssS'name' -p29467 -(dp29468 -S'editable' -p29469 -I01 -sS'value' -p29470 -S'Open Notes Count' -p29471 -ssS'data_type' -p29472 -(dp29473 -S'editable' -p29474 -I00 -sS'value' -p29475 -S'text' -p29476 -ssS'entity_type' -p29477 -(dp29478 -S'editable' -p29479 -I00 -sS'value' -p29480 -S'CustomEntity03' -p29481 -ssS'editable' -p29482 -(dp29483 -S'editable' -p29484 -I00 -sS'value' -p29485 -I00 -ssS'unique' -p29486 -(dp29487 -S'editable' -p29488 -I00 -sS'value' -p29489 -I00 -ssS'properties' -p29490 -(dp29491 -S'default_value' -p29492 -(dp29493 -S'editable' -p29494 -I00 -sS'value' -p29495 -NssS'summary_default' -p29496 -(dp29497 -S'editable' -p29498 -I01 -sS'value' -p29499 -S'none' -p29500 -sssS'description' -p29501 -(dp29502 -S'editable' -p29503 -I01 -sS'value' -p29504 -g47 -sssS'code' -p29505 -(dp29506 -S'mandatory' -p29507 -(dp29508 -S'editable' -p29509 -I00 -sS'value' -p29510 -I01 -ssS'name' -p29511 -(dp29512 -S'editable' -p29513 -I01 -sS'value' -p29514 -S'Custom Entity03 Name' -p29515 -ssS'data_type' -p29516 -(dp29517 -S'editable' -p29518 -I00 -sS'value' -p29519 -S'text' -p29520 -ssS'entity_type' -p29521 -(dp29522 -S'editable' -p29523 -I00 -sS'value' -p29524 -S'CustomEntity03' -p29525 -ssS'editable' -p29526 -(dp29527 -S'editable' -p29528 -I00 -sS'value' -p29529 -I01 -ssS'unique' -p29530 -(dp29531 -S'editable' -p29532 -I00 -sS'value' -p29533 -I00 -ssS'properties' -p29534 -(dp29535 -S'default_value' -p29536 -(dp29537 -S'editable' -p29538 -I00 -sS'value' -p29539 -NssS'summary_default' -p29540 -(dp29541 -S'editable' -p29542 -I01 -sS'value' -p29543 -S'none' -p29544 -sssS'description' -p29545 -(dp29546 -S'editable' -p29547 -I01 -sS'value' -p29548 -g47 -sssS'open_notes' -p29549 -(dp29550 -S'mandatory' -p29551 -(dp29552 -S'editable' -p29553 -I00 -sS'value' -p29554 -I00 -ssS'name' -p29555 -(dp29556 -S'editable' -p29557 -I01 -sS'value' -p29558 -S'Open Notes' -p29559 -ssS'data_type' -p29560 -(dp29561 -S'editable' -p29562 -I00 -sS'value' -p29563 -S'multi_entity' -p29564 -ssS'entity_type' -p29565 -(dp29566 -S'editable' -p29567 -I00 -sS'value' -p29568 -S'CustomEntity03' -p29569 -ssS'editable' -p29570 -(dp29571 -S'editable' -p29572 -I00 -sS'value' -p29573 -I00 -ssS'unique' -p29574 -(dp29575 -S'editable' -p29576 -I00 -sS'value' -p29577 -I00 -ssS'properties' -p29578 -(dp29579 -S'default_value' -p29580 -(dp29581 -S'editable' -p29582 -I00 -sS'value' -p29583 -NssS'summary_default' -p29584 -(dp29585 -S'editable' -p29586 -I01 -sS'value' -p29587 -S'none' -p29588 -ssS'valid_types' -p29589 -(dp29590 -S'editable' -p29591 -I01 -sS'value' -p29592 -(lp29593 -S'Note' -p29594 -asssS'description' -p29595 -(dp29596 -S'editable' -p29597 -I01 -sS'value' -p29598 -g47 -sssS'description' -p29599 -(dp29600 -S'mandatory' -p29601 -(dp29602 -S'editable' -p29603 -I00 -sS'value' -p29604 -I00 -ssS'name' -p29605 -(dp29606 -S'editable' -p29607 -I01 -sS'value' -p29608 -S'Description' -p29609 -ssS'data_type' -p29610 -(dp29611 -S'editable' -p29612 -I00 -sS'value' -p29613 -S'text' -p29614 -ssS'entity_type' -p29615 -(dp29616 -S'editable' -p29617 -I00 -sS'value' -p29618 -S'CustomEntity03' -p29619 -ssS'editable' -p29620 -(dp29621 -S'editable' -p29622 -I00 -sS'value' -p29623 -I01 -ssS'unique' -p29624 -(dp29625 -S'editable' -p29626 -I00 -sS'value' -p29627 -I00 -ssS'properties' -p29628 -(dp29629 -S'default_value' -p29630 -(dp29631 -S'editable' -p29632 -I00 -sS'value' -p29633 -NssS'summary_default' -p29634 -(dp29635 -S'editable' -p29636 -I01 -sS'value' -p29637 -S'none' -p29638 -sssS'description' -p29639 -(dp29640 -S'editable' -p29641 -I01 -sS'value' -p29642 -g47 -sssS'created_at' -p29643 -(dp29644 -S'mandatory' -p29645 -(dp29646 -S'editable' -p29647 -I00 -sS'value' -p29648 -I00 -ssS'name' -p29649 -(dp29650 -S'editable' -p29651 -I01 -sS'value' -p29652 -S'Date Created' -p29653 -ssS'data_type' -p29654 -(dp29655 -S'editable' -p29656 -I00 -sS'value' -p29657 -S'date_time' -p29658 -ssS'entity_type' -p29659 -(dp29660 -S'editable' -p29661 -I00 -sS'value' -p29662 -S'CustomEntity03' -p29663 -ssS'editable' -p29664 -(dp29665 -S'editable' -p29666 -I00 -sS'value' -p29667 -I00 -ssS'unique' -p29668 -(dp29669 -S'editable' -p29670 -I00 -sS'value' -p29671 -I00 -ssS'properties' -p29672 -(dp29673 -S'default_value' -p29674 -(dp29675 -S'editable' -p29676 -I00 -sS'value' -p29677 -NssS'summary_default' -p29678 -(dp29679 -S'editable' -p29680 -I01 -sS'value' -p29681 -S'none' -p29682 -sssS'description' -p29683 -(dp29684 -S'editable' -p29685 -I01 -sS'value' -p29686 -g47 -sssS'updated_at' -p29687 -(dp29688 -S'mandatory' -p29689 -(dp29690 -S'editable' -p29691 -I00 -sS'value' -p29692 -I00 -ssS'name' -p29693 -(dp29694 -S'editable' -p29695 -I01 -sS'value' -p29696 -S'Date Updated' -p29697 -ssS'data_type' -p29698 -(dp29699 -S'editable' -p29700 -I00 -sS'value' -p29701 -S'date_time' -p29702 -ssS'entity_type' -p29703 -(dp29704 -S'editable' -p29705 -I00 -sS'value' -p29706 -S'CustomEntity03' -p29707 -ssS'editable' -p29708 -(dp29709 -S'editable' -p29710 -I00 -sS'value' -p29711 -I00 -ssS'unique' -p29712 -(dp29713 -S'editable' -p29714 -I00 -sS'value' -p29715 -I00 -ssS'properties' -p29716 -(dp29717 -S'default_value' -p29718 -(dp29719 -S'editable' -p29720 -I00 -sS'value' -p29721 -NssS'summary_default' -p29722 -(dp29723 -S'editable' -p29724 -I01 -sS'value' -p29725 -S'none' -p29726 -sssS'description' -p29727 -(dp29728 -S'editable' -p29729 -I01 -sS'value' -p29730 -g47 -sssS'created_by' -p29731 -(dp29732 -S'mandatory' -p29733 -(dp29734 -S'editable' -p29735 -I00 -sS'value' -p29736 -I00 -ssS'name' -p29737 -(dp29738 -S'editable' -p29739 -I01 -sS'value' -p29740 -S'Created by' -p29741 -ssS'data_type' -p29742 -(dp29743 -S'editable' -p29744 -I00 -sS'value' -p29745 -S'entity' -p29746 -ssS'entity_type' -p29747 -(dp29748 -S'editable' -p29749 -I00 -sS'value' -p29750 -S'CustomEntity03' -p29751 -ssS'editable' -p29752 -(dp29753 -S'editable' -p29754 -I00 -sS'value' -p29755 -I00 -ssS'unique' -p29756 -(dp29757 -S'editable' -p29758 -I00 -sS'value' -p29759 -I00 -ssS'properties' -p29760 -(dp29761 -S'default_value' -p29762 -(dp29763 -S'editable' -p29764 -I00 -sS'value' -p29765 -NssS'summary_default' -p29766 -(dp29767 -S'editable' -p29768 -I01 -sS'value' -p29769 -S'none' -p29770 -ssS'valid_types' -p29771 -(dp29772 -S'editable' -p29773 -I01 -sS'value' -p29774 -(lp29775 -S'HumanUser' -p29776 -aS'ApiUser' -p29777 -asssS'description' -p29778 -(dp29779 -S'editable' -p29780 -I01 -sS'value' -p29781 -g47 -sssS'project' -p29782 -(dp29783 -S'mandatory' -p29784 -(dp29785 -S'editable' -p29786 -I00 -sS'value' -p29787 -I00 -ssS'name' -p29788 -(dp29789 -S'editable' -p29790 -I01 -sS'value' -p29791 -S'Project' -p29792 -ssS'data_type' -p29793 -(dp29794 -S'editable' -p29795 -I00 -sS'value' -p29796 -S'entity' -p29797 -ssS'entity_type' -p29798 -(dp29799 -S'editable' -p29800 -I00 -sS'value' -p29801 -S'CustomEntity03' -p29802 -ssS'editable' -p29803 -(dp29804 -S'editable' -p29805 -I00 -sS'value' -p29806 -I01 -ssS'unique' -p29807 -(dp29808 -S'editable' -p29809 -I00 -sS'value' -p29810 -I00 -ssS'properties' -p29811 -(dp29812 -S'default_value' -p29813 -(dp29814 -S'editable' -p29815 -I00 -sS'value' -p29816 -NssS'summary_default' -p29817 -(dp29818 -S'editable' -p29819 -I01 -sS'value' -p29820 -S'none' -p29821 -ssS'valid_types' -p29822 -(dp29823 -S'editable' -p29824 -I01 -sS'value' -p29825 -(lp29826 -S'Project' -p29827 -asssS'description' -p29828 -(dp29829 -S'editable' -p29830 -I01 -sS'value' -p29831 -g47 -sssS'filmstrip_image' -p29832 -(dp29833 -S'mandatory' -p29834 -(dp29835 -S'editable' -p29836 -I00 -sS'value' -p29837 -I00 -ssS'name' -p29838 -(dp29839 -S'editable' -p29840 -I01 -sS'value' -p29841 -S'Filmstrip Thumbnail' -p29842 -ssS'data_type' -p29843 -(dp29844 -S'editable' -p29845 -I00 -sS'value' -p29846 -S'image' -p29847 -ssS'entity_type' -p29848 -(dp29849 -S'editable' -p29850 -I00 -sS'value' -p29851 -S'CustomEntity03' -p29852 -ssS'editable' -p29853 -(dp29854 -S'editable' -p29855 -I00 -sS'value' -p29856 -I01 -ssS'unique' -p29857 -(dp29858 -S'editable' -p29859 -I00 -sS'value' -p29860 -I00 -ssS'properties' -p29861 -(dp29862 -S'default_value' -p29863 -(dp29864 -S'editable' -p29865 -I00 -sS'value' -p29866 -NssS'summary_default' -p29867 -(dp29868 -S'editable' -p29869 -I01 -sS'value' -p29870 -S'none' -p29871 -sssS'description' -p29872 -(dp29873 -S'editable' -p29874 -I01 -sS'value' -p29875 -g47 -sssS'sg_status_list' -p29876 -(dp29877 -S'mandatory' -p29878 -(dp29879 -S'editable' -p29880 -I00 -sS'value' -p29881 -I00 -ssS'name' -p29882 -(dp29883 -S'editable' -p29884 -I01 -sS'value' -p29885 -S'Status' -p29886 -ssS'data_type' -p29887 -(dp29888 -S'editable' -p29889 -I00 -sS'value' -p29890 -S'status_list' -p29891 -ssS'entity_type' -p29892 -(dp29893 -S'editable' -p29894 -I00 -sS'value' -p29895 -S'CustomEntity03' -p29896 -ssS'editable' -p29897 -(dp29898 -S'editable' -p29899 -I00 -sS'value' -p29900 -I01 -ssS'unique' -p29901 -(dp29902 -S'editable' -p29903 -I00 -sS'value' -p29904 -I00 -ssS'properties' -p29905 -(dp29906 -S'default_value' -p29907 -(dp29908 -S'editable' -p29909 -I01 -sS'value' -p29910 -S'wtg' -p29911 -ssS'valid_values' -p29912 -(dp29913 -S'editable' -p29914 -I01 -sS'value' -p29915 -(lp29916 -S'cmpt' -p29917 -aS'ip' -p29918 -aS'wtg' -p29919 -assS'summary_default' -p29920 -(dp29921 -S'editable' -p29922 -I01 -sS'value' -p29923 -S'none' -p29924 -sssS'description' -p29925 -(dp29926 -S'editable' -p29927 -I01 -sS'value' -p29928 -g47 -sssS'notes' -p29929 -(dp29930 -S'mandatory' -p29931 -(dp29932 -S'editable' -p29933 -I00 -sS'value' -p29934 -I00 -ssS'name' -p29935 -(dp29936 -S'editable' -p29937 -I01 -sS'value' -p29938 -S'Notes' -p29939 -ssS'data_type' -p29940 -(dp29941 -S'editable' -p29942 -I00 -sS'value' -p29943 -S'multi_entity' -p29944 -ssS'entity_type' -p29945 -(dp29946 -S'editable' -p29947 -I00 -sS'value' -p29948 -S'CustomEntity03' -p29949 -ssS'editable' -p29950 -(dp29951 -S'editable' -p29952 -I00 -sS'value' -p29953 -I01 -ssS'unique' -p29954 -(dp29955 -S'editable' -p29956 -I00 -sS'value' -p29957 -I00 -ssS'properties' -p29958 -(dp29959 -S'default_value' -p29960 -(dp29961 -S'editable' -p29962 -I00 -sS'value' -p29963 -NssS'summary_default' -p29964 -(dp29965 -S'editable' -p29966 -I01 -sS'value' -p29967 -S'none' -p29968 -ssS'valid_types' -p29969 -(dp29970 -S'editable' -p29971 -I01 -sS'value' -p29972 -(lp29973 -S'Note' -p29974 -asssS'description' -p29975 -(dp29976 -S'editable' -p29977 -I01 -sS'value' -p29978 -g47 -sssS'image' -p29979 -(dp29980 -S'mandatory' -p29981 -(dp29982 -S'editable' -p29983 -I00 -sS'value' -p29984 -I00 -ssS'name' -p29985 -(dp29986 -S'editable' -p29987 -I01 -sS'value' -p29988 -S'Thumbnail' -p29989 -ssS'data_type' -p29990 -(dp29991 -S'editable' -p29992 -I00 -sS'value' -p29993 -S'image' -p29994 -ssS'entity_type' -p29995 -(dp29996 -S'editable' -p29997 -I00 -sS'value' -p29998 -S'CustomEntity03' -p29999 -ssS'editable' -p30000 -(dp30001 -S'editable' -p30002 -I00 -sS'value' -p30003 -I01 -ssS'unique' -p30004 -(dp30005 -S'editable' -p30006 -I00 -sS'value' -p30007 -I00 -ssS'properties' -p30008 -(dp30009 -S'default_value' -p30010 -(dp30011 -S'editable' -p30012 -I00 -sS'value' -p30013 -NssS'summary_default' -p30014 -(dp30015 -S'editable' -p30016 -I01 -sS'value' -p30017 -S'none' -p30018 -sssS'description' -p30019 -(dp30020 -S'editable' -p30021 -I01 -sS'value' -p30022 -g47 -sssS'cached_display_name' -p30023 -(dp30024 -S'mandatory' -p30025 -(dp30026 -S'editable' -p30027 -I00 -sS'value' -p30028 -I00 -ssS'name' -p30029 -(dp30030 -S'editable' -p30031 -I01 -sS'value' -p30032 -S'Cached Display Name' -p30033 -ssS'data_type' -p30034 -(dp30035 -S'editable' -p30036 -I00 -sS'value' -p30037 -S'text' -p30038 -ssS'entity_type' -p30039 -(dp30040 -S'editable' -p30041 -I00 -sS'value' -p30042 -S'CustomEntity03' -p30043 -ssS'editable' -p30044 -(dp30045 -S'editable' -p30046 -I00 -sS'value' -p30047 -I01 -ssS'unique' -p30048 -(dp30049 -S'editable' -p30050 -I00 -sS'value' -p30051 -I00 -ssS'properties' -p30052 -(dp30053 -S'default_value' -p30054 -(dp30055 -S'editable' -p30056 -I00 -sS'value' -p30057 -NssS'summary_default' -p30058 -(dp30059 -S'editable' -p30060 -I00 -sS'value' -p30061 -S'none' -p30062 -sssS'description' -p30063 -(dp30064 -S'editable' -p30065 -I01 -sS'value' -p30066 -g47 -sssS'tag_list' -p30067 -(dp30068 -S'mandatory' -p30069 -(dp30070 -S'editable' -p30071 -I00 -sS'value' -p30072 -I00 -ssS'name' -p30073 -(dp30074 -S'editable' -p30075 -I01 -sS'value' -p30076 -S'Tags' -p30077 -ssS'data_type' -p30078 -(dp30079 -S'editable' -p30080 -I00 -sS'value' -p30081 -S'tag_list' -p30082 -ssS'entity_type' -p30083 -(dp30084 -S'editable' -p30085 -I00 -sS'value' -p30086 -S'CustomEntity03' -p30087 -ssS'editable' -p30088 -(dp30089 -S'editable' -p30090 -I00 -sS'value' -p30091 -I01 -ssS'unique' -p30092 -(dp30093 -S'editable' -p30094 -I00 -sS'value' -p30095 -I00 -ssS'properties' -p30096 -(dp30097 -S'default_value' -p30098 -(dp30099 -S'editable' -p30100 -I00 -sS'value' -p30101 -NssS'summary_default' -p30102 -(dp30103 -S'editable' -p30104 -I01 -sS'value' -p30105 -S'none' -p30106 -ssS'valid_types' -p30107 -(dp30108 -S'editable' -p30109 -I01 -sS'value' -p30110 -(lp30111 -S'Tag' -p30112 -asssS'description' -p30113 -(dp30114 -S'editable' -p30115 -I01 -sS'value' -p30116 -g47 -sssS'id' -p30117 -(dp30118 -S'mandatory' -p30119 -(dp30120 -S'editable' -p30121 -I00 -sS'value' -p30122 -I00 -ssS'name' -p30123 -(dp30124 -S'editable' -p30125 -I01 -sS'value' -p30126 -S'Id' -p30127 -ssS'data_type' -p30128 -(dp30129 -S'editable' -p30130 -I00 -sS'value' -p30131 -S'number' -p30132 -ssS'entity_type' -p30133 -(dp30134 -S'editable' -p30135 -I00 -sS'value' -p30136 -S'CustomEntity03' -p30137 -ssS'editable' -p30138 -(dp30139 -S'editable' -p30140 -I00 -sS'value' -p30141 -I00 -ssS'unique' -p30142 -(dp30143 -S'editable' -p30144 -I00 -sS'value' -p30145 -I00 -ssS'properties' -p30146 -(dp30147 -S'default_value' -p30148 -(dp30149 -S'editable' -p30150 -I00 -sS'value' -p30151 -NssS'summary_default' -p30152 -(dp30153 -S'editable' -p30154 -I01 -sS'value' -p30155 -S'none' -p30156 -sssS'description' -p30157 -(dp30158 -S'editable' -p30159 -I01 -sS'value' -p30160 -g47 -sssS'updated_by' -p30161 -(dp30162 -S'mandatory' -p30163 -(dp30164 -S'editable' -p30165 -I00 -sS'value' -p30166 -I00 -ssS'name' -p30167 -(dp30168 -S'editable' -p30169 -I01 -sS'value' -p30170 -S'Updated by' -p30171 -ssS'data_type' -p30172 -(dp30173 -S'editable' -p30174 -I00 -sS'value' -p30175 -S'entity' -p30176 -ssS'entity_type' -p30177 -(dp30178 -S'editable' -p30179 -I00 -sS'value' -p30180 -S'CustomEntity03' -p30181 -ssS'editable' -p30182 -(dp30183 -S'editable' -p30184 -I00 -sS'value' -p30185 -I00 -ssS'unique' -p30186 -(dp30187 -S'editable' -p30188 -I00 -sS'value' -p30189 -I00 -ssS'properties' -p30190 -(dp30191 -S'default_value' -p30192 -(dp30193 -S'editable' -p30194 -I00 -sS'value' -p30195 -NssS'summary_default' -p30196 -(dp30197 -S'editable' -p30198 -I01 -sS'value' -p30199 -S'none' -p30200 -ssS'valid_types' -p30201 -(dp30202 -S'editable' -p30203 -I01 -sS'value' -p30204 -(lp30205 -S'HumanUser' -p30206 -aS'ApiUser' -p30207 -asssS'description' -p30208 -(dp30209 -S'editable' -p30210 -I01 -sS'value' -p30211 -g47 -ssssS'FilesystemLocation' -p30212 -(dp30213 -S'code' -p30214 -(dp30215 -S'mandatory' -p30216 -(dp30217 -S'editable' -p30218 -I00 -sS'value' -p30219 -I01 -ssS'name' -p30220 -(dp30221 -S'editable' -p30222 -I01 -sS'value' -p30223 -S'FilesystemLocation Name' -p30224 -ssS'data_type' -p30225 -(dp30226 -S'editable' -p30227 -I00 -sS'value' -p30228 -S'text' -p30229 -ssS'entity_type' -p30230 -(dp30231 -S'editable' -p30232 -I00 -sS'value' -p30233 -S'FilesystemLocation' -p30234 -ssS'editable' -p30235 -(dp30236 -S'editable' -p30237 -I00 -sS'value' -p30238 -I01 -ssS'unique' -p30239 -(dp30240 -S'editable' -p30241 -I00 -sS'value' -p30242 -I00 -ssS'properties' -p30243 -(dp30244 -S'default_value' -p30245 -(dp30246 -S'editable' -p30247 -I00 -sS'value' -p30248 -NssS'summary_default' -p30249 -(dp30250 -S'editable' -p30251 -I00 -sS'value' -p30252 -S'none' -p30253 -sssS'description' -p30254 -(dp30255 -S'editable' -p30256 -I01 -sS'value' -p30257 -g47 -sssS'linked_entity_type' -p30258 -(dp30259 -S'mandatory' -p30260 -(dp30261 -S'editable' -p30262 -I00 -sS'value' -p30263 -I00 -ssS'name' -p30264 -(dp30265 -S'editable' -p30266 -I01 -sS'value' -p30267 -S'Linked Entity Type' -p30268 -ssS'data_type' -p30269 -(dp30270 -S'editable' -p30271 -I00 -sS'value' -p30272 -S'text' -p30273 -ssS'entity_type' -p30274 -(dp30275 -S'editable' -p30276 -I00 -sS'value' -p30277 -S'FilesystemLocation' -p30278 -ssS'editable' -p30279 -(dp30280 -S'editable' -p30281 -I00 -sS'value' -p30282 -I01 -ssS'unique' -p30283 -(dp30284 -S'editable' -p30285 -I00 -sS'value' -p30286 -I00 -ssS'properties' -p30287 -(dp30288 -S'default_value' -p30289 -(dp30290 -S'editable' -p30291 -I00 -sS'value' -p30292 -NssS'summary_default' -p30293 -(dp30294 -S'editable' -p30295 -I01 -sS'value' -p30296 -S'none' -p30297 -sssS'description' -p30298 -(dp30299 -S'editable' -p30300 -I01 -sS'value' -p30301 -g47 -sssS'linked_entity_id' -p30302 -(dp30303 -S'mandatory' -p30304 -(dp30305 -S'editable' -p30306 -I00 -sS'value' -p30307 -I00 -ssS'name' -p30308 -(dp30309 -S'editable' -p30310 -I01 -sS'value' -p30311 -S'Linked Entity Id' -p30312 -ssS'data_type' -p30313 -(dp30314 -S'editable' -p30315 -I00 -sS'value' -p30316 -S'number' -p30317 -ssS'entity_type' -p30318 -(dp30319 -S'editable' -p30320 -I00 -sS'value' -p30321 -S'FilesystemLocation' -p30322 -ssS'editable' -p30323 -(dp30324 -S'editable' -p30325 -I00 -sS'value' -p30326 -I01 -ssS'unique' -p30327 -(dp30328 -S'editable' -p30329 -I00 -sS'value' -p30330 -I00 -ssS'properties' -p30331 -(dp30332 -S'default_value' -p30333 -(dp30334 -S'editable' -p30335 -I00 -sS'value' -p30336 -NssS'summary_default' -p30337 -(dp30338 -S'editable' -p30339 -I01 -sS'value' -p30340 -S'none' -p30341 -sssS'description' -p30342 -(dp30343 -S'editable' -p30344 -I01 -sS'value' -p30345 -g47 -sssS'is_primary' -p30346 -(dp30347 -S'mandatory' -p30348 -(dp30349 -S'editable' -p30350 -I00 -sS'value' -p30351 -I00 -ssS'name' -p30352 -(dp30353 -S'editable' -p30354 -I01 -sS'value' -p30355 -S'Primary' -p30356 -ssS'data_type' -p30357 -(dp30358 -S'editable' -p30359 -I00 -sS'value' -p30360 -S'checkbox' -p30361 -ssS'entity_type' -p30362 -(dp30363 -S'editable' -p30364 -I00 -sS'value' -p30365 -S'FilesystemLocation' -p30366 -ssS'editable' -p30367 -(dp30368 -S'editable' -p30369 -I00 -sS'value' -p30370 -I01 -ssS'unique' -p30371 -(dp30372 -S'editable' -p30373 -I00 -sS'value' -p30374 -I00 -ssS'properties' -p30375 -(dp30376 -S'default_value' -p30377 -(dp30378 -S'editable' -p30379 -I00 -sS'value' -p30380 -NssS'summary_default' -p30381 -(dp30382 -S'editable' -p30383 -I01 -sS'value' -p30384 -S'none' -p30385 -sssS'description' -p30386 -(dp30387 -S'editable' -p30388 -I01 -sS'value' -p30389 -g47 -sssS'created_at' -p30390 -(dp30391 -S'mandatory' -p30392 -(dp30393 -S'editable' -p30394 -I00 -sS'value' -p30395 -I00 -ssS'name' -p30396 -(dp30397 -S'editable' -p30398 -I01 -sS'value' -p30399 -S'Date Created' -p30400 -ssS'data_type' -p30401 -(dp30402 -S'editable' -p30403 -I00 -sS'value' -p30404 -S'date_time' -p30405 -ssS'entity_type' -p30406 -(dp30407 -S'editable' -p30408 -I00 -sS'value' -p30409 -S'FilesystemLocation' -p30410 -ssS'editable' -p30411 -(dp30412 -S'editable' -p30413 -I00 -sS'value' -p30414 -I00 -ssS'unique' -p30415 -(dp30416 -S'editable' -p30417 -I00 -sS'value' -p30418 -I00 -ssS'properties' -p30419 -(dp30420 -S'default_value' -p30421 -(dp30422 -S'editable' -p30423 -I00 -sS'value' -p30424 -NssS'summary_default' -p30425 -(dp30426 -S'editable' -p30427 -I01 -sS'value' -p30428 -S'none' -p30429 -sssS'description' -p30430 -(dp30431 -S'editable' -p30432 -I01 -sS'value' -p30433 -g47 -sssS'updated_at' -p30434 -(dp30435 -S'mandatory' -p30436 -(dp30437 -S'editable' -p30438 -I00 -sS'value' -p30439 -I00 -ssS'name' -p30440 -(dp30441 -S'editable' -p30442 -I01 -sS'value' -p30443 -S'Date Updated' -p30444 -ssS'data_type' -p30445 -(dp30446 -S'editable' -p30447 -I00 -sS'value' -p30448 -S'date_time' -p30449 -ssS'entity_type' -p30450 -(dp30451 -S'editable' -p30452 -I00 -sS'value' -p30453 -S'FilesystemLocation' -p30454 -ssS'editable' -p30455 -(dp30456 -S'editable' -p30457 -I00 -sS'value' -p30458 -I00 -ssS'unique' -p30459 -(dp30460 -S'editable' -p30461 -I00 -sS'value' -p30462 -I00 -ssS'properties' -p30463 -(dp30464 -S'default_value' -p30465 -(dp30466 -S'editable' -p30467 -I00 -sS'value' -p30468 -NssS'summary_default' -p30469 -(dp30470 -S'editable' -p30471 -I01 -sS'value' -p30472 -S'none' -p30473 -sssS'description' -p30474 -(dp30475 -S'editable' -p30476 -I01 -sS'value' -p30477 -g47 -sssS'created_by' -p30478 -(dp30479 -S'mandatory' -p30480 -(dp30481 -S'editable' -p30482 -I00 -sS'value' -p30483 -I00 -ssS'name' -p30484 -(dp30485 -S'editable' -p30486 -I01 -sS'value' -p30487 -S'Created by' -p30488 -ssS'data_type' -p30489 -(dp30490 -S'editable' -p30491 -I00 -sS'value' -p30492 -S'entity' -p30493 -ssS'entity_type' -p30494 -(dp30495 -S'editable' -p30496 -I00 -sS'value' -p30497 -S'FilesystemLocation' -p30498 -ssS'editable' -p30499 -(dp30500 -S'editable' -p30501 -I00 -sS'value' -p30502 -I00 -ssS'unique' -p30503 -(dp30504 -S'editable' -p30505 -I00 -sS'value' -p30506 -I00 -ssS'properties' -p30507 -(dp30508 -S'default_value' -p30509 -(dp30510 -S'editable' -p30511 -I00 -sS'value' -p30512 -NssS'summary_default' -p30513 -(dp30514 -S'editable' -p30515 -I01 -sS'value' -p30516 -S'none' -p30517 -ssS'valid_types' -p30518 -(dp30519 -S'editable' -p30520 -I01 -sS'value' -p30521 -(lp30522 -S'HumanUser' -p30523 -aS'ApiUser' -p30524 -asssS'description' -p30525 -(dp30526 -S'editable' -p30527 -I01 -sS'value' -p30528 -g47 -sssS'entity' -p30529 -(dp30530 -S'mandatory' -p30531 -(dp30532 -S'editable' -p30533 -I00 -sS'value' -p30534 -I00 -ssS'name' -p30535 -(dp30536 -S'editable' -p30537 -I01 -sS'value' -p30538 -S'Link' -p30539 -ssS'data_type' -p30540 -(dp30541 -S'editable' -p30542 -I00 -sS'value' -p30543 -S'entity' -p30544 -ssS'entity_type' -p30545 -(dp30546 -S'editable' -p30547 -I00 -sS'value' -p30548 -S'FilesystemLocation' -p30549 -ssS'editable' -p30550 -(dp30551 -S'editable' -p30552 -I00 -sS'value' -p30553 -I01 -ssS'unique' -p30554 -(dp30555 -S'editable' -p30556 -I00 -sS'value' -p30557 -I00 -ssS'properties' -p30558 -(dp30559 -S'default_value' -p30560 -(dp30561 -S'editable' -p30562 -I00 -sS'value' -p30563 -NssS'summary_default' -p30564 -(dp30565 -S'editable' -p30566 -I01 -sS'value' -p30567 -S'none' -p30568 -ssS'valid_types' -p30569 -(dp30570 -S'editable' -p30571 -I01 -sS'value' -p30572 -(lp30573 -S'Asset' -p30574 -aS'Shot' -p30575 -aS'Sequence' -p30576 -asssS'description' -p30577 -(dp30578 -S'editable' -p30579 -I01 -sS'value' -p30580 -g47 -sssS'project' -p30581 -(dp30582 -S'mandatory' -p30583 -(dp30584 -S'editable' -p30585 -I00 -sS'value' -p30586 -I00 -ssS'name' -p30587 -(dp30588 -S'editable' -p30589 -I01 -sS'value' -p30590 -S'Project' -p30591 -ssS'data_type' -p30592 -(dp30593 -S'editable' -p30594 -I00 -sS'value' -p30595 -S'entity' -p30596 -ssS'entity_type' -p30597 -(dp30598 -S'editable' -p30599 -I00 -sS'value' -p30600 -S'FilesystemLocation' -p30601 -ssS'editable' -p30602 -(dp30603 -S'editable' -p30604 -I00 -sS'value' -p30605 -I01 -ssS'unique' -p30606 -(dp30607 -S'editable' -p30608 -I00 -sS'value' -p30609 -I00 -ssS'properties' -p30610 -(dp30611 -S'default_value' -p30612 -(dp30613 -S'editable' -p30614 -I00 -sS'value' -p30615 -NssS'summary_default' -p30616 -(dp30617 -S'editable' -p30618 -I01 -sS'value' -p30619 -S'none' -p30620 -ssS'valid_types' -p30621 -(dp30622 -S'editable' -p30623 -I01 -sS'value' -p30624 -(lp30625 -S'Project' -p30626 -asssS'description' -p30627 -(dp30628 -S'editable' -p30629 -I01 -sS'value' -p30630 -g47 -sssS'updated_by' -p30631 -(dp30632 -S'mandatory' -p30633 -(dp30634 -S'editable' -p30635 -I00 -sS'value' -p30636 -I00 -ssS'name' -p30637 -(dp30638 -S'editable' -p30639 -I01 -sS'value' -p30640 -S'Updated by' -p30641 -ssS'data_type' -p30642 -(dp30643 -S'editable' -p30644 -I00 -sS'value' -p30645 -S'entity' -p30646 -ssS'entity_type' -p30647 -(dp30648 -S'editable' -p30649 -I00 -sS'value' -p30650 -S'FilesystemLocation' -p30651 -ssS'editable' -p30652 -(dp30653 -S'editable' -p30654 -I00 -sS'value' -p30655 -I00 -ssS'unique' -p30656 -(dp30657 -S'editable' -p30658 -I00 -sS'value' -p30659 -I00 -ssS'properties' -p30660 -(dp30661 -S'default_value' -p30662 -(dp30663 -S'editable' -p30664 -I00 -sS'value' -p30665 -NssS'summary_default' -p30666 -(dp30667 -S'editable' -p30668 -I01 -sS'value' -p30669 -S'none' -p30670 -ssS'valid_types' -p30671 -(dp30672 -S'editable' -p30673 -I01 -sS'value' -p30674 -(lp30675 -S'HumanUser' -p30676 -aS'ApiUser' -p30677 -asssS'description' -p30678 -(dp30679 -S'editable' -p30680 -I01 -sS'value' -p30681 -g47 -sssS'configuration_metadata' -p30682 -(dp30683 -S'mandatory' -p30684 -(dp30685 -S'editable' -p30686 -I00 -sS'value' -p30687 -I00 -ssS'name' -p30688 -(dp30689 -S'editable' -p30690 -I01 -sS'value' -p30691 -S'Configuration Metadata' -p30692 -ssS'data_type' -p30693 -(dp30694 -S'editable' -p30695 -I00 -sS'value' -p30696 -S'text' -p30697 -ssS'entity_type' -p30698 -(dp30699 -S'editable' -p30700 -I00 -sS'value' -p30701 -S'FilesystemLocation' -p30702 -ssS'editable' -p30703 -(dp30704 -S'editable' -p30705 -I00 -sS'value' -p30706 -I01 -ssS'unique' -p30707 -(dp30708 -S'editable' -p30709 -I00 -sS'value' -p30710 -I00 -ssS'properties' -p30711 -(dp30712 -S'default_value' -p30713 -(dp30714 -S'editable' -p30715 -I00 -sS'value' -p30716 -NssS'summary_default' -p30717 -(dp30718 -S'editable' -p30719 -I01 -sS'value' -p30720 -S'none' -p30721 -sssS'description' -p30722 -(dp30723 -S'editable' -p30724 -I01 -sS'value' -p30725 -g47 -sssS'path' -p30726 -(dp30727 -S'mandatory' -p30728 -(dp30729 -S'editable' -p30730 -I00 -sS'value' -p30731 -I00 -ssS'name' -p30732 -(dp30733 -S'editable' -p30734 -I01 -sS'value' -p30735 -S'Path' -p30736 -ssS'data_type' -p30737 -(dp30738 -S'editable' -p30739 -I00 -sS'value' -p30740 -S'url' -p30741 -ssS'entity_type' -p30742 -(dp30743 -S'editable' -p30744 -I00 -sS'value' -p30745 -S'FilesystemLocation' -p30746 -ssS'editable' -p30747 -(dp30748 -S'editable' -p30749 -I00 -sS'value' -p30750 -I01 -ssS'unique' -p30751 -(dp30752 -S'editable' -p30753 -I00 -sS'value' -p30754 -I00 -ssS'properties' -p30755 -(dp30756 -S'default_value' -p30757 -(dp30758 -S'editable' -p30759 -I00 -sS'value' -p30760 -NssS'open_in_new_window' -p30761 -(dp30762 -S'editable' -p30763 -I01 -sS'value' -p30764 -I01 -ssS'summary_default' -p30765 -(dp30766 -S'editable' -p30767 -I01 -sS'value' -p30768 -S'none' -p30769 -sssS'description' -p30770 -(dp30771 -S'editable' -p30772 -I01 -sS'value' -p30773 -g47 -sssS'id' -p30774 -(dp30775 -S'mandatory' -p30776 -(dp30777 -S'editable' -p30778 -I00 -sS'value' -p30779 -I00 -ssS'name' -p30780 -(dp30781 -S'editable' -p30782 -I01 -sS'value' -p30783 -S'Id' -p30784 -ssS'data_type' -p30785 -(dp30786 -S'editable' -p30787 -I00 -sS'value' -p30788 -S'number' -p30789 -ssS'entity_type' -p30790 -(dp30791 -S'editable' -p30792 -I00 -sS'value' -p30793 -S'FilesystemLocation' -p30794 -ssS'editable' -p30795 -(dp30796 -S'editable' -p30797 -I00 -sS'value' -p30798 -I00 -ssS'unique' -p30799 -(dp30800 -S'editable' -p30801 -I00 -sS'value' -p30802 -I00 -ssS'properties' -p30803 -(dp30804 -S'default_value' -p30805 -(dp30806 -S'editable' -p30807 -I00 -sS'value' -p30808 -NssS'summary_default' -p30809 -(dp30810 -S'editable' -p30811 -I00 -sS'value' -p30812 -S'none' -p30813 -sssS'description' -p30814 -(dp30815 -S'editable' -p30816 -I01 -sS'value' -p30817 -g47 -sssS'pipeline_configuration' -p30818 -(dp30819 -S'mandatory' -p30820 -(dp30821 -S'editable' -p30822 -I00 -sS'value' -p30823 -I00 -ssS'name' -p30824 -(dp30825 -S'editable' -p30826 -I01 -sS'value' -p30827 -S'Pipeline Configuration' -p30828 -ssS'data_type' -p30829 -(dp30830 -S'editable' -p30831 -I00 -sS'value' -p30832 -S'entity' -p30833 -ssS'entity_type' -p30834 -(dp30835 -S'editable' -p30836 -I00 -sS'value' -p30837 -S'FilesystemLocation' -p30838 -ssS'editable' -p30839 -(dp30840 -S'editable' -p30841 -I00 -sS'value' -p30842 -I01 -ssS'unique' -p30843 -(dp30844 -S'editable' -p30845 -I00 -sS'value' -p30846 -I00 -ssS'properties' -p30847 -(dp30848 -S'default_value' -p30849 -(dp30850 -S'editable' -p30851 -I00 -sS'value' -p30852 -NssS'summary_default' -p30853 -(dp30854 -S'editable' -p30855 -I01 -sS'value' -p30856 -S'none' -p30857 -ssS'valid_types' -p30858 -(dp30859 -S'editable' -p30860 -I01 -sS'value' -p30861 -(lp30862 -S'PipelineConfiguration' -p30863 -asssS'description' -p30864 -(dp30865 -S'editable' -p30866 -I01 -sS'value' -p30867 -g47 -ssssS'CustomEntity01' -p30868 -(dp30869 -S'open_notes_count' -p30870 -(dp30871 -S'mandatory' -p30872 -(dp30873 -S'editable' -p30874 -I00 -sS'value' -p30875 -I00 -ssS'name' -p30876 -(dp30877 -S'editable' -p30878 -I01 -sS'value' -p30879 -S'Open Notes Count' -p30880 -ssS'data_type' -p30881 -(dp30882 -S'editable' -p30883 -I00 -sS'value' -p30884 -S'text' -p30885 -ssS'entity_type' -p30886 -(dp30887 -S'editable' -p30888 -I00 -sS'value' -p30889 -S'CustomEntity01' -p30890 -ssS'editable' -p30891 -(dp30892 -S'editable' -p30893 -I00 -sS'value' -p30894 -I00 -ssS'unique' -p30895 -(dp30896 -S'editable' -p30897 -I00 -sS'value' -p30898 -I00 -ssS'properties' -p30899 -(dp30900 -S'default_value' -p30901 -(dp30902 -S'editable' -p30903 -I00 -sS'value' -p30904 -NssS'summary_default' -p30905 -(dp30906 -S'editable' -p30907 -I01 -sS'value' -p30908 -S'none' -p30909 -sssS'description' -p30910 -(dp30911 -S'editable' -p30912 -I01 -sS'value' -p30913 -g47 -sssS'code' -p30914 -(dp30915 -S'mandatory' -p30916 -(dp30917 -S'editable' -p30918 -I00 -sS'value' -p30919 -I01 -ssS'name' -p30920 -(dp30921 -S'editable' -p30922 -I01 -sS'value' -p30923 -S'Disk Location Name' -p30924 -ssS'data_type' -p30925 -(dp30926 -S'editable' -p30927 -I00 -sS'value' -p30928 -S'text' -p30929 -ssS'entity_type' -p30930 -(dp30931 -S'editable' -p30932 -I00 -sS'value' -p30933 -S'CustomEntity01' -p30934 -ssS'editable' -p30935 -(dp30936 -S'editable' -p30937 -I00 -sS'value' -p30938 -I01 -ssS'unique' -p30939 -(dp30940 -S'editable' -p30941 -I00 -sS'value' -p30942 -I00 -ssS'properties' -p30943 -(dp30944 -S'default_value' -p30945 -(dp30946 -S'editable' -p30947 -I00 -sS'value' -p30948 -NssS'summary_default' -p30949 -(dp30950 -S'editable' -p30951 -I01 -sS'value' -p30952 -S'none' -p30953 -sssS'description' -p30954 -(dp30955 -S'editable' -p30956 -I01 -sS'value' -p30957 -g47 -sssS'image' -p30958 -(dp30959 -S'mandatory' -p30960 -(dp30961 -S'editable' -p30962 -I00 -sS'value' -p30963 -I00 -ssS'name' -p30964 -(dp30965 -S'editable' -p30966 -I01 -sS'value' -p30967 -S'Thumbnail' -p30968 -ssS'data_type' -p30969 -(dp30970 -S'editable' -p30971 -I00 -sS'value' -p30972 -S'image' -p30973 -ssS'entity_type' -p30974 -(dp30975 -S'editable' -p30976 -I00 -sS'value' -p30977 -S'CustomEntity01' -p30978 -ssS'editable' -p30979 -(dp30980 -S'editable' -p30981 -I00 -sS'value' -p30982 -I01 -ssS'unique' -p30983 -(dp30984 -S'editable' -p30985 -I00 -sS'value' -p30986 -I00 -ssS'properties' -p30987 -(dp30988 -S'default_value' -p30989 -(dp30990 -S'editable' -p30991 -I00 -sS'value' -p30992 -NssS'summary_default' -p30993 -(dp30994 -S'editable' -p30995 -I01 -sS'value' -p30996 -S'none' -p30997 -sssS'description' -p30998 -(dp30999 -S'editable' -p31000 -I01 -sS'value' -p31001 -g47 -sssS'updated_at' -p31002 -(dp31003 -S'mandatory' -p31004 -(dp31005 -S'editable' -p31006 -I00 -sS'value' -p31007 -I00 -ssS'name' -p31008 -(dp31009 -S'editable' -p31010 -I01 -sS'value' -p31011 -S'Date Updated' -p31012 -ssS'data_type' -p31013 -(dp31014 -S'editable' -p31015 -I00 -sS'value' -p31016 -S'date_time' -p31017 -ssS'entity_type' -p31018 -(dp31019 -S'editable' -p31020 -I00 -sS'value' -p31021 -S'CustomEntity01' -p31022 -ssS'editable' -p31023 -(dp31024 -S'editable' -p31025 -I00 -sS'value' -p31026 -I00 -ssS'unique' -p31027 -(dp31028 -S'editable' -p31029 -I00 -sS'value' -p31030 -I00 -ssS'properties' -p31031 -(dp31032 -S'default_value' -p31033 -(dp31034 -S'editable' -p31035 -I00 -sS'value' -p31036 -NssS'summary_default' -p31037 -(dp31038 -S'editable' -p31039 -I01 -sS'value' -p31040 -S'none' -p31041 -sssS'description' -p31042 -(dp31043 -S'editable' -p31044 -I01 -sS'value' -p31045 -g47 -sssS'cached_display_name' -p31046 -(dp31047 -S'mandatory' -p31048 -(dp31049 -S'editable' -p31050 -I00 -sS'value' -p31051 -I00 -ssS'name' -p31052 -(dp31053 -S'editable' -p31054 -I01 -sS'value' -p31055 -S'Cached Display Name' -p31056 -ssS'data_type' -p31057 -(dp31058 -S'editable' -p31059 -I00 -sS'value' -p31060 -S'text' -p31061 -ssS'entity_type' -p31062 -(dp31063 -S'editable' -p31064 -I00 -sS'value' -p31065 -S'CustomEntity01' -p31066 -ssS'editable' -p31067 -(dp31068 -S'editable' -p31069 -I00 -sS'value' -p31070 -I01 -ssS'unique' -p31071 -(dp31072 -S'editable' -p31073 -I00 -sS'value' -p31074 -I00 -ssS'properties' -p31075 -(dp31076 -S'default_value' -p31077 -(dp31078 -S'editable' -p31079 -I00 -sS'value' -p31080 -NssS'summary_default' -p31081 -(dp31082 -S'editable' -p31083 -I00 -sS'value' -p31084 -S'none' -p31085 -sssS'description' -p31086 -(dp31087 -S'editable' -p31088 -I01 -sS'value' -p31089 -g47 -sssS'id' -p31090 -(dp31091 -S'mandatory' -p31092 -(dp31093 -S'editable' -p31094 -I00 -sS'value' -p31095 -I00 -ssS'name' -p31096 -(dp31097 -S'editable' -p31098 -I01 -sS'value' -p31099 -S'Id' -p31100 -ssS'data_type' -p31101 -(dp31102 -S'editable' -p31103 -I00 -sS'value' -p31104 -S'number' -p31105 -ssS'entity_type' -p31106 -(dp31107 -S'editable' -p31108 -I00 -sS'value' -p31109 -S'CustomEntity01' -p31110 -ssS'editable' -p31111 -(dp31112 -S'editable' -p31113 -I00 -sS'value' -p31114 -I00 -ssS'unique' -p31115 -(dp31116 -S'editable' -p31117 -I00 -sS'value' -p31118 -I00 -ssS'properties' -p31119 -(dp31120 -S'default_value' -p31121 -(dp31122 -S'editable' -p31123 -I00 -sS'value' -p31124 -NssS'summary_default' -p31125 -(dp31126 -S'editable' -p31127 -I01 -sS'value' -p31128 -S'none' -p31129 -sssS'description' -p31130 -(dp31131 -S'editable' -p31132 -I01 -sS'value' -p31133 -g47 -sssS'updated_by' -p31134 -(dp31135 -S'mandatory' -p31136 -(dp31137 -S'editable' -p31138 -I00 -sS'value' -p31139 -I00 -ssS'name' -p31140 -(dp31141 -S'editable' -p31142 -I01 -sS'value' -p31143 -S'Updated by' -p31144 -ssS'data_type' -p31145 -(dp31146 -S'editable' -p31147 -I00 -sS'value' -p31148 -S'entity' -p31149 -ssS'entity_type' -p31150 -(dp31151 -S'editable' -p31152 -I00 -sS'value' -p31153 -S'CustomEntity01' -p31154 -ssS'editable' -p31155 -(dp31156 -S'editable' -p31157 -I00 -sS'value' -p31158 -I00 -ssS'unique' -p31159 -(dp31160 -S'editable' -p31161 -I00 -sS'value' -p31162 -I00 -ssS'properties' -p31163 -(dp31164 -S'default_value' -p31165 -(dp31166 -S'editable' -p31167 -I00 -sS'value' -p31168 -NssS'summary_default' -p31169 -(dp31170 -S'editable' -p31171 -I01 -sS'value' -p31172 -S'none' -p31173 -ssS'valid_types' -p31174 -(dp31175 -S'editable' -p31176 -I01 -sS'value' -p31177 -(lp31178 -S'HumanUser' -p31179 -aS'ApiUser' -p31180 -asssS'description' -p31181 -(dp31182 -S'editable' -p31183 -I01 -sS'value' -p31184 -g47 -sssS'open_notes' -p31185 -(dp31186 -S'mandatory' -p31187 -(dp31188 -S'editable' -p31189 -I00 -sS'value' -p31190 -I00 -ssS'name' -p31191 -(dp31192 -S'editable' -p31193 -I01 -sS'value' -p31194 -S'Open Notes' -p31195 -ssS'data_type' -p31196 -(dp31197 -S'editable' -p31198 -I00 -sS'value' -p31199 -S'multi_entity' -p31200 -ssS'entity_type' -p31201 -(dp31202 -S'editable' -p31203 -I00 -sS'value' -p31204 -S'CustomEntity01' -p31205 -ssS'editable' -p31206 -(dp31207 -S'editable' -p31208 -I00 -sS'value' -p31209 -I00 -ssS'unique' -p31210 -(dp31211 -S'editable' -p31212 -I00 -sS'value' -p31213 -I00 -ssS'properties' -p31214 -(dp31215 -S'default_value' -p31216 -(dp31217 -S'editable' -p31218 -I00 -sS'value' -p31219 -NssS'summary_default' -p31220 -(dp31221 -S'editable' -p31222 -I01 -sS'value' -p31223 -S'none' -p31224 -ssS'valid_types' -p31225 -(dp31226 -S'editable' -p31227 -I01 -sS'value' -p31228 -(lp31229 -S'Note' -p31230 -asssS'description' -p31231 -(dp31232 -S'editable' -p31233 -I01 -sS'value' -p31234 -g47 -sssS'sg_metadata' -p31235 -(dp31236 -S'mandatory' -p31237 -(dp31238 -S'editable' -p31239 -I00 -sS'value' -p31240 -I00 -ssS'name' -p31241 -(dp31242 -S'editable' -p31243 -I01 -sS'value' -p31244 -S'metadata' -p31245 -ssS'data_type' -p31246 -(dp31247 -S'editable' -p31248 -I00 -sS'value' -p31249 -S'text' -p31250 -ssS'entity_type' -p31251 -(dp31252 -S'editable' -p31253 -I00 -sS'value' -p31254 -S'CustomEntity01' -p31255 -ssS'editable' -p31256 -(dp31257 -S'editable' -p31258 -I00 -sS'value' -p31259 -I01 -ssS'unique' -p31260 -(dp31261 -S'editable' -p31262 -I00 -sS'value' -p31263 -I00 -ssS'properties' -p31264 -(dp31265 -S'default_value' -p31266 -(dp31267 -S'editable' -p31268 -I00 -sS'value' -p31269 -NssS'summary_default' -p31270 -(dp31271 -S'editable' -p31272 -I01 -sS'value' -p31273 -S'none' -p31274 -sssS'description' -p31275 -(dp31276 -S'editable' -p31277 -I01 -sS'value' -p31278 -g47 -sssS'created_by' -p31279 -(dp31280 -S'mandatory' -p31281 -(dp31282 -S'editable' -p31283 -I00 -sS'value' -p31284 -I00 -ssS'name' -p31285 -(dp31286 -S'editable' -p31287 -I01 -sS'value' -p31288 -S'Created by' -p31289 -ssS'data_type' -p31290 -(dp31291 -S'editable' -p31292 -I00 -sS'value' -p31293 -S'entity' -p31294 -ssS'entity_type' -p31295 -(dp31296 -S'editable' -p31297 -I00 -sS'value' -p31298 -S'CustomEntity01' -p31299 -ssS'editable' -p31300 -(dp31301 -S'editable' -p31302 -I00 -sS'value' -p31303 -I00 -ssS'unique' -p31304 -(dp31305 -S'editable' -p31306 -I00 -sS'value' -p31307 -I00 -ssS'properties' -p31308 -(dp31309 -S'default_value' -p31310 -(dp31311 -S'editable' -p31312 -I00 -sS'value' -p31313 -NssS'summary_default' -p31314 -(dp31315 -S'editable' -p31316 -I01 -sS'value' -p31317 -S'none' -p31318 -ssS'valid_types' -p31319 -(dp31320 -S'editable' -p31321 -I01 -sS'value' -p31322 -(lp31323 -S'HumanUser' -p31324 -aS'ApiUser' -p31325 -asssS'description' -p31326 -(dp31327 -S'editable' -p31328 -I01 -sS'value' -p31329 -g47 -sssS'sg_path' -p31330 -(dp31331 -S'mandatory' -p31332 -(dp31333 -S'editable' -p31334 -I00 -sS'value' -p31335 -I00 -ssS'name' -p31336 -(dp31337 -S'editable' -p31338 -I01 -sS'value' -p31339 -S'Path' -p31340 -ssS'data_type' -p31341 -(dp31342 -S'editable' -p31343 -I00 -sS'value' -p31344 -S'url' -p31345 -ssS'entity_type' -p31346 -(dp31347 -S'editable' -p31348 -I00 -sS'value' -p31349 -S'CustomEntity01' -p31350 -ssS'editable' -p31351 -(dp31352 -S'editable' -p31353 -I00 -sS'value' -p31354 -I01 -ssS'unique' -p31355 -(dp31356 -S'editable' -p31357 -I00 -sS'value' -p31358 -I00 -ssS'properties' -p31359 -(dp31360 -S'default_value' -p31361 -(dp31362 -S'editable' -p31363 -I00 -sS'value' -p31364 -NssS'open_in_new_window' -p31365 -(dp31366 -S'editable' -p31367 -I01 -sS'value' -p31368 -I01 -ssS'summary_default' -p31369 -(dp31370 -S'editable' -p31371 -I01 -sS'value' -p31372 -S'none' -p31373 -sssS'description' -p31374 -(dp31375 -S'editable' -p31376 -I01 -sS'value' -p31377 -g47 -sssS'sg_status_list' -p31378 -(dp31379 -S'mandatory' -p31380 -(dp31381 -S'editable' -p31382 -I00 -sS'value' -p31383 -I00 -ssS'name' -p31384 -(dp31385 -S'editable' -p31386 -I01 -sS'value' -p31387 -S'Status' -p31388 -ssS'data_type' -p31389 -(dp31390 -S'editable' -p31391 -I00 -sS'value' -p31392 -S'status_list' -p31393 -ssS'entity_type' -p31394 -(dp31395 -S'editable' -p31396 -I00 -sS'value' -p31397 -S'CustomEntity01' -p31398 -ssS'editable' -p31399 -(dp31400 -S'editable' -p31401 -I00 -sS'value' -p31402 -I01 -ssS'unique' -p31403 -(dp31404 -S'editable' -p31405 -I00 -sS'value' -p31406 -I00 -ssS'properties' -p31407 -(dp31408 -S'default_value' -p31409 -(dp31410 -S'editable' -p31411 -I01 -sS'value' -p31412 -S'wtg' -p31413 -ssS'valid_values' -p31414 -(dp31415 -S'editable' -p31416 -I01 -sS'value' -p31417 -(lp31418 -S'cmpt' -p31419 -aS'ip' -p31420 -aS'wtg' -p31421 -assS'summary_default' -p31422 -(dp31423 -S'editable' -p31424 -I01 -sS'value' -p31425 -S'none' -p31426 -sssS'description' -p31427 -(dp31428 -S'editable' -p31429 -I01 -sS'value' -p31430 -g47 -sssS'sg_entity_name' -p31431 -(dp31432 -S'mandatory' -p31433 -(dp31434 -S'editable' -p31435 -I00 -sS'value' -p31436 -I00 -ssS'name' -p31437 -(dp31438 -S'editable' -p31439 -I01 -sS'value' -p31440 -S'Entity Name' -p31441 -ssS'data_type' -p31442 -(dp31443 -S'editable' -p31444 -I00 -sS'value' -p31445 -S'text' -p31446 -ssS'entity_type' -p31447 -(dp31448 -S'editable' -p31449 -I00 -sS'value' -p31450 -S'CustomEntity01' -p31451 -ssS'editable' -p31452 -(dp31453 -S'editable' -p31454 -I00 -sS'value' -p31455 -I01 -ssS'unique' -p31456 -(dp31457 -S'editable' -p31458 -I00 -sS'value' -p31459 -I00 -ssS'properties' -p31460 -(dp31461 -S'default_value' -p31462 -(dp31463 -S'editable' -p31464 -I00 -sS'value' -p31465 -NssS'summary_default' -p31466 -(dp31467 -S'editable' -p31468 -I01 -sS'value' -p31469 -S'none' -p31470 -sssS'description' -p31471 -(dp31472 -S'editable' -p31473 -I01 -sS'value' -p31474 -g47 -sssS'sg_secondary_entities' -p31475 -(dp31476 -S'mandatory' -p31477 -(dp31478 -S'editable' -p31479 -I00 -sS'value' -p31480 -I00 -ssS'name' -p31481 -(dp31482 -S'editable' -p31483 -I01 -sS'value' -p31484 -S'Secondary Entities' -p31485 -ssS'data_type' -p31486 -(dp31487 -S'editable' -p31488 -I00 -sS'value' -p31489 -S'text' -p31490 -ssS'entity_type' -p31491 -(dp31492 -S'editable' -p31493 -I00 -sS'value' -p31494 -S'CustomEntity01' -p31495 -ssS'editable' -p31496 -(dp31497 -S'editable' -p31498 -I00 -sS'value' -p31499 -I01 -ssS'unique' -p31500 -(dp31501 -S'editable' -p31502 -I00 -sS'value' -p31503 -I00 -ssS'properties' -p31504 -(dp31505 -S'default_value' -p31506 -(dp31507 -S'editable' -p31508 -I00 -sS'value' -p31509 -NssS'summary_default' -p31510 -(dp31511 -S'editable' -p31512 -I01 -sS'value' -p31513 -S'none' -p31514 -sssS'description' -p31515 -(dp31516 -S'editable' -p31517 -I01 -sS'value' -p31518 -g47 -sssS'sg_entity' -p31519 -(dp31520 -S'mandatory' -p31521 -(dp31522 -S'editable' -p31523 -I00 -sS'value' -p31524 -I00 -ssS'name' -p31525 -(dp31526 -S'editable' -p31527 -I01 -sS'value' -p31528 -S'Entity' -p31529 -ssS'data_type' -p31530 -(dp31531 -S'editable' -p31532 -I00 -sS'value' -p31533 -S'entity' -p31534 -ssS'entity_type' -p31535 -(dp31536 -S'editable' -p31537 -I00 -sS'value' -p31538 -S'CustomEntity01' -p31539 -ssS'editable' -p31540 -(dp31541 -S'editable' -p31542 -I00 -sS'value' -p31543 -I01 -ssS'unique' -p31544 -(dp31545 -S'editable' -p31546 -I00 -sS'value' -p31547 -I00 -ssS'properties' -p31548 -(dp31549 -S'default_value' -p31550 -(dp31551 -S'editable' -p31552 -I00 -sS'value' -p31553 -NssS'summary_default' -p31554 -(dp31555 -S'editable' -p31556 -I01 -sS'value' -p31557 -S'none' -p31558 -ssS'valid_types' -p31559 -(dp31560 -S'editable' -p31561 -I01 -sS'value' -p31562 -(lp31563 -S'Asset' -p31564 -aS'Booking' -p31565 -aS'Department' -p31566 -aS'CustomEntity01' -p31567 -aS'Attachment' -p31568 -aS'Group' -p31569 -aS'Note' -p31570 -aS'Page' -p31571 -aS'HumanUser' -p31572 -aS'Phase' -p31573 -aS'Playlist' -p31574 -aS'PipelineConfiguration' -p31575 -aS'Project' -p31576 -aS'PublishedFileDependency' -p31577 -aS'PublishedFile' -p31578 -aS'PublishedFileType' -p31579 -aS'ApiUser' -p31580 -aS'Sequence' -p31581 -aS'Shot' -p31582 -aS'Step' -p31583 -aS'TankDependency' -p31584 -aS'TankPublishedFile' -p31585 -aS'TankType' -p31586 -aS'Task' -p31587 -aS'TimeLog' -p31588 -aS'Version' -p31589 -aS'TaskTemplate' -p31590 -asssS'description' -p31591 -(dp31592 -S'editable' -p31593 -I01 -sS'value' -p31594 -g47 -sssS'description' -p31595 -(dp31596 -S'mandatory' -p31597 -(dp31598 -S'editable' -p31599 -I00 -sS'value' -p31600 -I00 -ssS'name' -p31601 -(dp31602 -S'editable' -p31603 -I01 -sS'value' -p31604 -S'Description' -p31605 -ssS'data_type' -p31606 -(dp31607 -S'editable' -p31608 -I00 -sS'value' -p31609 -S'text' -p31610 -ssS'entity_type' -p31611 -(dp31612 -S'editable' -p31613 -I00 -sS'value' -p31614 -S'CustomEntity01' -p31615 -ssS'editable' -p31616 -(dp31617 -S'editable' -p31618 -I00 -sS'value' -p31619 -I01 -ssS'unique' -p31620 -(dp31621 -S'editable' -p31622 -I00 -sS'value' -p31623 -I00 -ssS'properties' -p31624 -(dp31625 -S'default_value' -p31626 -(dp31627 -S'editable' -p31628 -I00 -sS'value' -p31629 -NssS'summary_default' -p31630 -(dp31631 -S'editable' -p31632 -I01 -sS'value' -p31633 -S'none' -p31634 -sssS'description' -p31635 -(dp31636 -S'editable' -p31637 -I01 -sS'value' -p31638 -g47 -sssS'sg_pipeline_configuration' -p31639 -(dp31640 -S'mandatory' -p31641 -(dp31642 -S'editable' -p31643 -I00 -sS'value' -p31644 -I00 -ssS'name' -p31645 -(dp31646 -S'editable' -p31647 -I01 -sS'value' -p31648 -S'Pipeline Configuration' -p31649 -ssS'data_type' -p31650 -(dp31651 -S'editable' -p31652 -I00 -sS'value' -p31653 -S'entity' -p31654 -ssS'entity_type' -p31655 -(dp31656 -S'editable' -p31657 -I00 -sS'value' -p31658 -S'CustomEntity01' -p31659 -ssS'editable' -p31660 -(dp31661 -S'editable' -p31662 -I00 -sS'value' -p31663 -I01 -ssS'unique' -p31664 -(dp31665 -S'editable' -p31666 -I00 -sS'value' -p31667 -I00 -ssS'properties' -p31668 -(dp31669 -S'default_value' -p31670 -(dp31671 -S'editable' -p31672 -I00 -sS'value' -p31673 -NssS'summary_default' -p31674 -(dp31675 -S'editable' -p31676 -I01 -sS'value' -p31677 -S'none' -p31678 -ssS'valid_types' -p31679 -(dp31680 -S'editable' -p31681 -I01 -sS'value' -p31682 -(lp31683 -S'PipelineConfiguration' -p31684 -asssS'description' -p31685 -(dp31686 -S'editable' -p31687 -I01 -sS'value' -p31688 -g47 -sssS'sg_primary' -p31689 -(dp31690 -S'mandatory' -p31691 -(dp31692 -S'editable' -p31693 -I00 -sS'value' -p31694 -I00 -ssS'name' -p31695 -(dp31696 -S'editable' -p31697 -I01 -sS'value' -p31698 -S'Primary' -p31699 -ssS'data_type' -p31700 -(dp31701 -S'editable' -p31702 -I00 -sS'value' -p31703 -S'checkbox' -p31704 -ssS'entity_type' -p31705 -(dp31706 -S'editable' -p31707 -I00 -sS'value' -p31708 -S'CustomEntity01' -p31709 -ssS'editable' -p31710 -(dp31711 -S'editable' -p31712 -I00 -sS'value' -p31713 -I01 -ssS'unique' -p31714 -(dp31715 -S'editable' -p31716 -I00 -sS'value' -p31717 -I00 -ssS'properties' -p31718 -(dp31719 -S'default_value' -p31720 -(dp31721 -S'editable' -p31722 -I00 -sS'value' -p31723 -I00 -ssS'summary_default' -p31724 -(dp31725 -S'editable' -p31726 -I01 -sS'value' -p31727 -S'none' -p31728 -sssS'description' -p31729 -(dp31730 -S'editable' -p31731 -I01 -sS'value' -p31732 -g47 -sssS'sg_id_at_creation' -p31733 -(dp31734 -S'mandatory' -p31735 -(dp31736 -S'editable' -p31737 -I00 -sS'value' -p31738 -I00 -ssS'name' -p31739 -(dp31740 -S'editable' -p31741 -I01 -sS'value' -p31742 -S'Id At Creation' -p31743 -ssS'data_type' -p31744 -(dp31745 -S'editable' -p31746 -I00 -sS'value' -p31747 -S'number' -p31748 -ssS'entity_type' -p31749 -(dp31750 -S'editable' -p31751 -I00 -sS'value' -p31752 -S'CustomEntity01' -p31753 -ssS'editable' -p31754 -(dp31755 -S'editable' -p31756 -I00 -sS'value' -p31757 -I01 -ssS'unique' -p31758 -(dp31759 -S'editable' -p31760 -I00 -sS'value' -p31761 -I00 -ssS'properties' -p31762 -(dp31763 -S'default_value' -p31764 -(dp31765 -S'editable' -p31766 -I00 -sS'value' -p31767 -NssS'summary_default' -p31768 -(dp31769 -S'editable' -p31770 -I01 -sS'value' -p31771 -S'none' -p31772 -sssS'description' -p31773 -(dp31774 -S'editable' -p31775 -I01 -sS'value' -p31776 -g47 -sssS'sg_name_at_creation' -p31777 -(dp31778 -S'mandatory' -p31779 -(dp31780 -S'editable' -p31781 -I00 -sS'value' -p31782 -I00 -ssS'name' -p31783 -(dp31784 -S'editable' -p31785 -I01 -sS'value' -p31786 -S'Name At Creation' -p31787 -ssS'data_type' -p31788 -(dp31789 -S'editable' -p31790 -I00 -sS'value' -p31791 -S'text' -p31792 -ssS'entity_type' -p31793 -(dp31794 -S'editable' -p31795 -I00 -sS'value' -p31796 -S'CustomEntity01' -p31797 -ssS'editable' -p31798 -(dp31799 -S'editable' -p31800 -I00 -sS'value' -p31801 -I01 -ssS'unique' -p31802 -(dp31803 -S'editable' -p31804 -I00 -sS'value' -p31805 -I00 -ssS'properties' -p31806 -(dp31807 -S'default_value' -p31808 -(dp31809 -S'editable' -p31810 -I00 -sS'value' -p31811 -NssS'summary_default' -p31812 -(dp31813 -S'editable' -p31814 -I01 -sS'value' -p31815 -S'none' -p31816 -sssS'description' -p31817 -(dp31818 -S'editable' -p31819 -I01 -sS'value' -p31820 -g47 -sssS'sg_root' -p31821 -(dp31822 -S'mandatory' -p31823 -(dp31824 -S'editable' -p31825 -I00 -sS'value' -p31826 -I00 -ssS'name' -p31827 -(dp31828 -S'editable' -p31829 -I01 -sS'value' -p31830 -S'Root' -p31831 -ssS'data_type' -p31832 -(dp31833 -S'editable' -p31834 -I00 -sS'value' -p31835 -S'text' -p31836 -ssS'entity_type' -p31837 -(dp31838 -S'editable' -p31839 -I00 -sS'value' -p31840 -S'CustomEntity01' -p31841 -ssS'editable' -p31842 -(dp31843 -S'editable' -p31844 -I00 -sS'value' -p31845 -I01 -ssS'unique' -p31846 -(dp31847 -S'editable' -p31848 -I00 -sS'value' -p31849 -I00 -ssS'properties' -p31850 -(dp31851 -S'default_value' -p31852 -(dp31853 -S'editable' -p31854 -I00 -sS'value' -p31855 -NssS'summary_default' -p31856 -(dp31857 -S'editable' -p31858 -I01 -sS'value' -p31859 -S'none' -p31860 -sssS'description' -p31861 -(dp31862 -S'editable' -p31863 -I01 -sS'value' -p31864 -g47 -sssS'sg_entity_type_1' -p31865 -(dp31866 -S'mandatory' -p31867 -(dp31868 -S'editable' -p31869 -I00 -sS'value' -p31870 -I00 -ssS'name' -p31871 -(dp31872 -S'editable' -p31873 -I01 -sS'value' -p31874 -S'Entity Type' -p31875 -ssS'data_type' -p31876 -(dp31877 -S'editable' -p31878 -I00 -sS'value' -p31879 -S'text' -p31880 -ssS'entity_type' -p31881 -(dp31882 -S'editable' -p31883 -I00 -sS'value' -p31884 -S'CustomEntity01' -p31885 -ssS'editable' -p31886 -(dp31887 -S'editable' -p31888 -I00 -sS'value' -p31889 -I01 -ssS'unique' -p31890 -(dp31891 -S'editable' -p31892 -I00 -sS'value' -p31893 -I00 -ssS'properties' -p31894 -(dp31895 -S'default_value' -p31896 -(dp31897 -S'editable' -p31898 -I00 -sS'value' -p31899 -NssS'summary_default' -p31900 -(dp31901 -S'editable' -p31902 -I01 -sS'value' -p31903 -S'none' -p31904 -sssS'description' -p31905 -(dp31906 -S'editable' -p31907 -I01 -sS'value' -p31908 -g47 -sssS'notes' -p31909 -(dp31910 -S'mandatory' -p31911 -(dp31912 -S'editable' -p31913 -I00 -sS'value' -p31914 -I00 -ssS'name' -p31915 -(dp31916 -S'editable' -p31917 -I01 -sS'value' -p31918 -S'Notes' -p31919 -ssS'data_type' -p31920 -(dp31921 -S'editable' -p31922 -I00 -sS'value' -p31923 -S'multi_entity' -p31924 -ssS'entity_type' -p31925 -(dp31926 -S'editable' -p31927 -I00 -sS'value' -p31928 -S'CustomEntity01' -p31929 -ssS'editable' -p31930 -(dp31931 -S'editable' -p31932 -I00 -sS'value' -p31933 -I01 -ssS'unique' -p31934 -(dp31935 -S'editable' -p31936 -I00 -sS'value' -p31937 -I00 -ssS'properties' -p31938 -(dp31939 -S'default_value' -p31940 -(dp31941 -S'editable' -p31942 -I00 -sS'value' -p31943 -NssS'summary_default' -p31944 -(dp31945 -S'editable' -p31946 -I01 -sS'value' -p31947 -S'none' -p31948 -ssS'valid_types' -p31949 -(dp31950 -S'editable' -p31951 -I01 -sS'value' -p31952 -(lp31953 -S'Note' -p31954 -asssS'description' -p31955 -(dp31956 -S'editable' -p31957 -I01 -sS'value' -p31958 -g47 -sssS'sg_relative_path' -p31959 -(dp31960 -S'mandatory' -p31961 -(dp31962 -S'editable' -p31963 -I00 -sS'value' -p31964 -I00 -ssS'name' -p31965 -(dp31966 -S'editable' -p31967 -I01 -sS'value' -p31968 -S'Relative Path' -p31969 -ssS'data_type' -p31970 -(dp31971 -S'editable' -p31972 -I00 -sS'value' -p31973 -S'text' -p31974 -ssS'entity_type' -p31975 -(dp31976 -S'editable' -p31977 -I00 -sS'value' -p31978 -S'CustomEntity01' -p31979 -ssS'editable' -p31980 -(dp31981 -S'editable' -p31982 -I00 -sS'value' -p31983 -I01 -ssS'unique' -p31984 -(dp31985 -S'editable' -p31986 -I00 -sS'value' -p31987 -I00 -ssS'properties' -p31988 -(dp31989 -S'default_value' -p31990 -(dp31991 -S'editable' -p31992 -I00 -sS'value' -p31993 -NssS'summary_default' -p31994 -(dp31995 -S'editable' -p31996 -I01 -sS'value' -p31997 -S'none' -p31998 -sssS'description' -p31999 -(dp32000 -S'editable' -p32001 -I01 -sS'value' -p32002 -g47 -sssS'project' -p32003 -(dp32004 -S'mandatory' -p32005 -(dp32006 -S'editable' -p32007 -I00 -sS'value' -p32008 -I00 -ssS'name' -p32009 -(dp32010 -S'editable' -p32011 -I01 -sS'value' -p32012 -S'Project' -p32013 -ssS'data_type' -p32014 -(dp32015 -S'editable' -p32016 -I00 -sS'value' -p32017 -S'entity' -p32018 -ssS'entity_type' -p32019 -(dp32020 -S'editable' -p32021 -I00 -sS'value' -p32022 -S'CustomEntity01' -p32023 -ssS'editable' -p32024 -(dp32025 -S'editable' -p32026 -I00 -sS'value' -p32027 -I01 -ssS'unique' -p32028 -(dp32029 -S'editable' -p32030 -I00 -sS'value' -p32031 -I00 -ssS'properties' -p32032 -(dp32033 -S'default_value' -p32034 -(dp32035 -S'editable' -p32036 -I00 -sS'value' -p32037 -NssS'summary_default' -p32038 -(dp32039 -S'editable' -p32040 -I01 -sS'value' -p32041 -S'none' -p32042 -ssS'valid_types' -p32043 -(dp32044 -S'editable' -p32045 -I01 -sS'value' -p32046 -(lp32047 -S'Project' -p32048 -asssS'description' -p32049 -(dp32050 -S'editable' -p32051 -I01 -sS'value' -p32052 -g47 -sssS'filmstrip_image' -p32053 -(dp32054 -S'mandatory' -p32055 -(dp32056 -S'editable' -p32057 -I00 -sS'value' -p32058 -I00 -ssS'name' -p32059 -(dp32060 -S'editable' -p32061 -I01 -sS'value' -p32062 -S'Filmstrip Thumbnail' -p32063 -ssS'data_type' -p32064 -(dp32065 -S'editable' -p32066 -I00 -sS'value' -p32067 -S'image' -p32068 -ssS'entity_type' -p32069 -(dp32070 -S'editable' -p32071 -I00 -sS'value' -p32072 -S'CustomEntity01' -p32073 -ssS'editable' -p32074 -(dp32075 -S'editable' -p32076 -I00 -sS'value' -p32077 -I01 -ssS'unique' -p32078 -(dp32079 -S'editable' -p32080 -I00 -sS'value' -p32081 -I00 -ssS'properties' -p32082 -(dp32083 -S'default_value' -p32084 -(dp32085 -S'editable' -p32086 -I00 -sS'value' -p32087 -NssS'summary_default' -p32088 -(dp32089 -S'editable' -p32090 -I01 -sS'value' -p32091 -S'none' -p32092 -sssS'description' -p32093 -(dp32094 -S'editable' -p32095 -I01 -sS'value' -p32096 -g47 -sssS'sg_type_at_creation' -p32097 -(dp32098 -S'mandatory' -p32099 -(dp32100 -S'editable' -p32101 -I00 -sS'value' -p32102 -I00 -ssS'name' -p32103 -(dp32104 -S'editable' -p32105 -I01 -sS'value' -p32106 -S'Type At Creation' -p32107 -ssS'data_type' -p32108 -(dp32109 -S'editable' -p32110 -I00 -sS'value' -p32111 -S'text' -p32112 -ssS'entity_type' -p32113 -(dp32114 -S'editable' -p32115 -I00 -sS'value' -p32116 -S'CustomEntity01' -p32117 -ssS'editable' -p32118 -(dp32119 -S'editable' -p32120 -I00 -sS'value' -p32121 -I01 -ssS'unique' -p32122 -(dp32123 -S'editable' -p32124 -I00 -sS'value' -p32125 -I00 -ssS'properties' -p32126 -(dp32127 -S'default_value' -p32128 -(dp32129 -S'editable' -p32130 -I00 -sS'value' -p32131 -NssS'summary_default' -p32132 -(dp32133 -S'editable' -p32134 -I01 -sS'value' -p32135 -S'none' -p32136 -sssS'description' -p32137 -(dp32138 -S'editable' -p32139 -I01 -sS'value' -p32140 -g47 -sssS'tag_list' -p32141 -(dp32142 -S'mandatory' -p32143 -(dp32144 -S'editable' -p32145 -I00 -sS'value' -p32146 -I00 -ssS'name' -p32147 -(dp32148 -S'editable' -p32149 -I01 -sS'value' -p32150 -S'Tags' -p32151 -ssS'data_type' -p32152 -(dp32153 -S'editable' -p32154 -I00 -sS'value' -p32155 -S'tag_list' -p32156 -ssS'entity_type' -p32157 -(dp32158 -S'editable' -p32159 -I00 -sS'value' -p32160 -S'CustomEntity01' -p32161 -ssS'editable' -p32162 -(dp32163 -S'editable' -p32164 -I00 -sS'value' -p32165 -I01 -ssS'unique' -p32166 -(dp32167 -S'editable' -p32168 -I00 -sS'value' -p32169 -I00 -ssS'properties' -p32170 -(dp32171 -S'default_value' -p32172 -(dp32173 -S'editable' -p32174 -I00 -sS'value' -p32175 -NssS'summary_default' -p32176 -(dp32177 -S'editable' -p32178 -I01 -sS'value' -p32179 -S'none' -p32180 -ssS'valid_types' -p32181 -(dp32182 -S'editable' -p32183 -I01 -sS'value' -p32184 -(lp32185 -S'Tag' -p32186 -asssS'description' -p32187 -(dp32188 -S'editable' -p32189 -I01 -sS'value' -p32190 -g47 -sssS'created_at' -p32191 -(dp32192 -S'mandatory' -p32193 -(dp32194 -S'editable' -p32195 -I00 -sS'value' -p32196 -I00 -ssS'name' -p32197 -(dp32198 -S'editable' -p32199 -I01 -sS'value' -p32200 -S'Date Created' -p32201 -ssS'data_type' -p32202 -(dp32203 -S'editable' -p32204 -I00 -sS'value' -p32205 -S'date_time' -p32206 -ssS'entity_type' -p32207 -(dp32208 -S'editable' -p32209 -I00 -sS'value' -p32210 -S'CustomEntity01' -p32211 -ssS'editable' -p32212 -(dp32213 -S'editable' -p32214 -I00 -sS'value' -p32215 -I00 -ssS'unique' -p32216 -(dp32217 -S'editable' -p32218 -I00 -sS'value' -p32219 -I00 -ssS'properties' -p32220 -(dp32221 -S'default_value' -p32222 -(dp32223 -S'editable' -p32224 -I00 -sS'value' -p32225 -NssS'summary_default' -p32226 -(dp32227 -S'editable' -p32228 -I01 -sS'value' -p32229 -S'none' -p32230 -sssS'description' -p32231 -(dp32232 -S'editable' -p32233 -I01 -sS'value' -p32234 -g47 -sssS'sg_configuration_metadata' -p32235 -(dp32236 -S'mandatory' -p32237 -(dp32238 -S'editable' -p32239 -I00 -sS'value' -p32240 -I00 -ssS'name' -p32241 -(dp32242 -S'editable' -p32243 -I01 -sS'value' -p32244 -S'Configuration Metadata' -p32245 -ssS'data_type' -p32246 -(dp32247 -S'editable' -p32248 -I00 -sS'value' -p32249 -S'text' -p32250 -ssS'entity_type' -p32251 -(dp32252 -S'editable' -p32253 -I00 -sS'value' -p32254 -S'CustomEntity01' -p32255 -ssS'editable' -p32256 -(dp32257 -S'editable' -p32258 -I00 -sS'value' -p32259 -I01 -ssS'unique' -p32260 -(dp32261 -S'editable' -p32262 -I00 -sS'value' -p32263 -I00 -ssS'properties' -p32264 -(dp32265 -S'default_value' -p32266 -(dp32267 -S'editable' -p32268 -I00 -sS'value' -p32269 -NssS'summary_default' -p32270 -(dp32271 -S'editable' -p32272 -I01 -sS'value' -p32273 -S'none' -p32274 -sssS'description' -p32275 -(dp32276 -S'editable' -p32277 -I01 -sS'value' -p32278 -g47 -ssssS'Shot' -p32279 -(dp32280 -S'open_notes_count' -p32281 -(dp32282 -S'mandatory' -p32283 -(dp32284 -S'editable' -p32285 -I00 -sS'value' -p32286 -I00 -ssS'name' -p32287 -(dp32288 -S'editable' -p32289 -I01 -sS'value' -p32290 -S'Open Notes Count' -p32291 -ssS'data_type' -p32292 -(dp32293 -S'editable' -p32294 -I00 -sS'value' -p32295 -S'text' -p32296 -ssS'entity_type' -p32297 -(dp32298 -S'editable' -p32299 -I00 -sS'value' -p32300 -S'Shot' -p32301 -ssS'editable' -p32302 -(dp32303 -S'editable' -p32304 -I00 -sS'value' -p32305 -I00 -ssS'unique' -p32306 -(dp32307 -S'editable' -p32308 -I00 -sS'value' -p32309 -I00 -ssS'properties' -p32310 -(dp32311 -S'default_value' -p32312 -(dp32313 -S'editable' -p32314 -I00 -sS'value' -p32315 -NssS'summary_default' -p32316 -(dp32317 -S'editable' -p32318 -I01 -sS'value' -p32319 -S'none' -p32320 -sssS'description' -p32321 -(dp32322 -S'editable' -p32323 -I01 -sS'value' -p32324 -g47 -sssS'code' -p32325 -(dp32326 -S'mandatory' -p32327 -(dp32328 -S'editable' -p32329 -I00 -sS'value' -p32330 -I01 -ssS'name' -p32331 -(dp32332 -S'editable' -p32333 -I01 -sS'value' -p32334 -S'Shot Code' -p32335 -ssS'data_type' -p32336 -(dp32337 -S'editable' -p32338 -I00 -sS'value' -p32339 -S'text' -p32340 -ssS'entity_type' -p32341 -(dp32342 -S'editable' -p32343 -I00 -sS'value' -p32344 -S'Shot' -p32345 -ssS'editable' -p32346 -(dp32347 -S'editable' -p32348 -I00 -sS'value' -p32349 -I01 -ssS'unique' -p32350 -(dp32351 -S'editable' -p32352 -I00 -sS'value' -p32353 -I00 -ssS'properties' -p32354 -(dp32355 -S'default_value' -p32356 -(dp32357 -S'editable' -p32358 -I00 -sS'value' -p32359 -NssS'summary_default' -p32360 -(dp32361 -S'editable' -p32362 -I01 -sS'value' -p32363 -S'none' -p32364 -sssS'description' -p32365 -(dp32366 -S'editable' -p32367 -I01 -sS'value' -p32368 -g47 -sssS'step_13' -p32369 -(dp32370 -S'mandatory' -p32371 -(dp32372 -S'editable' -p32373 -I00 -sS'value' -p32374 -I00 -ssS'name' -p32375 -(dp32376 -S'editable' -p32377 -I01 -sS'value' -p32378 -S'Layout' -p32379 -ssS'data_type' -p32380 -(dp32381 -S'editable' -p32382 -I00 -sS'value' -p32383 -S'pivot_column' -p32384 -ssS'entity_type' -p32385 -(dp32386 -S'editable' -p32387 -I00 -sS'value' -p32388 -S'Shot' -p32389 -ssS'editable' -p32390 -(dp32391 -S'editable' -p32392 -I00 -sS'value' -p32393 -I00 -ssS'unique' -p32394 -(dp32395 -S'editable' -p32396 -I00 -sS'value' -p32397 -I00 -ssS'properties' -p32398 -(dp32399 -S'default_value' -p32400 -(dp32401 -S'editable' -p32402 -I00 -sS'value' -p32403 -NssS'summary_default' -p32404 -(dp32405 -S'editable' -p32406 -I00 -sS'value' -p32407 -S'none' -p32408 -sssS'description' -p32409 -(dp32410 -S'editable' -p32411 -I01 -sS'value' -p32412 -g47 -sssS'smart_head_out' -p32413 -(dp32414 -S'mandatory' -p32415 -(dp32416 -S'editable' -p32417 -I00 -sS'value' -p32418 -I00 -ssS'name' -p32419 -(dp32420 -S'editable' -p32421 -I01 -sS'value' -p32422 -S'Head Out' -p32423 -ssS'data_type' -p32424 -(dp32425 -S'editable' -p32426 -I00 -sS'value' -p32427 -S'number' -p32428 -ssS'entity_type' -p32429 -(dp32430 -S'editable' -p32431 -I00 -sS'value' -p32432 -S'Shot' -p32433 -ssS'editable' -p32434 -(dp32435 -S'editable' -p32436 -I00 -sS'value' -p32437 -I01 -ssS'unique' -p32438 -(dp32439 -S'editable' -p32440 -I00 -sS'value' -p32441 -I00 -ssS'properties' -p32442 -(dp32443 -S'default_value' -p32444 -(dp32445 -S'editable' -p32446 -I00 -sS'value' -p32447 -NssS'summary_default' -p32448 -(dp32449 -S'editable' -p32450 -I01 -sS'value' -p32451 -S'none' -p32452 -sssS'description' -p32453 -(dp32454 -S'editable' -p32455 -I01 -sS'value' -p32456 -g47 -sssS'sg_sequence' -p32457 -(dp32458 -S'mandatory' -p32459 -(dp32460 -S'editable' -p32461 -I00 -sS'value' -p32462 -I00 -ssS'name' -p32463 -(dp32464 -S'editable' -p32465 -I01 -sS'value' -p32466 -S'Sequence' -p32467 -ssS'data_type' -p32468 -(dp32469 -S'editable' -p32470 -I00 -sS'value' -p32471 -S'entity' -p32472 -ssS'entity_type' -p32473 -(dp32474 -S'editable' -p32475 -I00 -sS'value' -p32476 -S'Shot' -p32477 -ssS'editable' -p32478 -(dp32479 -S'editable' -p32480 -I00 -sS'value' -p32481 -I01 -ssS'unique' -p32482 -(dp32483 -S'editable' -p32484 -I00 -sS'value' -p32485 -I00 -ssS'properties' -p32486 -(dp32487 -S'default_value' -p32488 -(dp32489 -S'editable' -p32490 -I00 -sS'value' -p32491 -NssS'summary_default' -p32492 -(dp32493 -S'editable' -p32494 -I01 -sS'value' -p32495 -S'none' -p32496 -ssS'valid_types' -p32497 -(dp32498 -S'editable' -p32499 -I01 -sS'value' -p32500 -(lp32501 -S'Sequence' -p32502 -asssS'description' -p32503 -(dp32504 -S'editable' -p32505 -I01 -sS'value' -p32506 -g47 -sssS'image' -p32507 -(dp32508 -S'mandatory' -p32509 -(dp32510 -S'editable' -p32511 -I00 -sS'value' -p32512 -I00 -ssS'name' -p32513 -(dp32514 -S'editable' -p32515 -I01 -sS'value' -p32516 -S'Thumbnail' -p32517 -ssS'data_type' -p32518 -(dp32519 -S'editable' -p32520 -I00 -sS'value' -p32521 -S'image' -p32522 -ssS'entity_type' -p32523 -(dp32524 -S'editable' -p32525 -I00 -sS'value' -p32526 -S'Shot' -p32527 -ssS'editable' -p32528 -(dp32529 -S'editable' -p32530 -I00 -sS'value' -p32531 -I01 -ssS'unique' -p32532 -(dp32533 -S'editable' -p32534 -I00 -sS'value' -p32535 -I00 -ssS'properties' -p32536 -(dp32537 -S'default_value' -p32538 -(dp32539 -S'editable' -p32540 -I00 -sS'value' -p32541 -NssS'summary_default' -p32542 -(dp32543 -S'editable' -p32544 -I01 -sS'value' -p32545 -S'none' -p32546 -sssS'description' -p32547 -(dp32548 -S'editable' -p32549 -I01 -sS'value' -p32550 -g47 -sssS'tag_list' -p32551 -(dp32552 -S'mandatory' -p32553 -(dp32554 -S'editable' -p32555 -I00 -sS'value' -p32556 -I00 -ssS'name' -p32557 -(dp32558 -S'editable' -p32559 -I01 -sS'value' -p32560 -S'Tags' -p32561 -ssS'data_type' -p32562 -(dp32563 -S'editable' -p32564 -I00 -sS'value' -p32565 -S'tag_list' -p32566 -ssS'entity_type' -p32567 -(dp32568 -S'editable' -p32569 -I00 -sS'value' -p32570 -S'Shot' -p32571 -ssS'editable' -p32572 -(dp32573 -S'editable' -p32574 -I00 -sS'value' -p32575 -I01 -ssS'unique' -p32576 -(dp32577 -S'editable' -p32578 -I00 -sS'value' -p32579 -I00 -ssS'properties' -p32580 -(dp32581 -S'default_value' -p32582 -(dp32583 -S'editable' -p32584 -I00 -sS'value' -p32585 -NssS'summary_default' -p32586 -(dp32587 -S'editable' -p32588 -I01 -sS'value' -p32589 -S'none' -p32590 -ssS'valid_types' -p32591 -(dp32592 -S'editable' -p32593 -I01 -sS'value' -p32594 -(lp32595 -S'Tag' -p32596 -asssS'description' -p32597 -(dp32598 -S'editable' -p32599 -I01 -sS'value' -p32600 -g47 -sssS'head_duration' -p32601 -(dp32602 -S'mandatory' -p32603 -(dp32604 -S'editable' -p32605 -I00 -sS'value' -p32606 -I00 -ssS'name' -p32607 -(dp32608 -S'editable' -p32609 -I01 -sS'value' -p32610 -S'Raw Head Duration' -p32611 -ssS'data_type' -p32612 -(dp32613 -S'editable' -p32614 -I00 -sS'value' -p32615 -S'number' -p32616 -ssS'entity_type' -p32617 -(dp32618 -S'editable' -p32619 -I00 -sS'value' -p32620 -S'Shot' -p32621 -ssS'editable' -p32622 -(dp32623 -S'editable' -p32624 -I00 -sS'value' -p32625 -I01 -ssS'unique' -p32626 -(dp32627 -S'editable' -p32628 -I00 -sS'value' -p32629 -I00 -ssS'properties' -p32630 -(dp32631 -S'default_value' -p32632 -(dp32633 -S'editable' -p32634 -I00 -sS'value' -p32635 -NssS'summary_default' -p32636 -(dp32637 -S'editable' -p32638 -I01 -sS'value' -p32639 -S'none' -p32640 -sssS'description' -p32641 -(dp32642 -S'editable' -p32643 -I01 -sS'value' -p32644 -g47 -sssS'updated_at' -p32645 -(dp32646 -S'mandatory' -p32647 -(dp32648 -S'editable' -p32649 -I00 -sS'value' -p32650 -I00 -ssS'name' -p32651 -(dp32652 -S'editable' -p32653 -I01 -sS'value' -p32654 -S'Date Updated' -p32655 -ssS'data_type' -p32656 -(dp32657 -S'editable' -p32658 -I00 -sS'value' -p32659 -S'date_time' -p32660 -ssS'entity_type' -p32661 -(dp32662 -S'editable' -p32663 -I00 -sS'value' -p32664 -S'Shot' -p32665 -ssS'editable' -p32666 -(dp32667 -S'editable' -p32668 -I00 -sS'value' -p32669 -I00 -ssS'unique' -p32670 -(dp32671 -S'editable' -p32672 -I00 -sS'value' -p32673 -I00 -ssS'properties' -p32674 -(dp32675 -S'default_value' -p32676 -(dp32677 -S'editable' -p32678 -I00 -sS'value' -p32679 -NssS'summary_default' -p32680 -(dp32681 -S'editable' -p32682 -I01 -sS'value' -p32683 -S'none' -p32684 -sssS'description' -p32685 -(dp32686 -S'editable' -p32687 -I01 -sS'value' -p32688 -g47 -sssS'head_in' -p32689 -(dp32690 -S'mandatory' -p32691 -(dp32692 -S'editable' -p32693 -I00 -sS'value' -p32694 -I00 -ssS'name' -p32695 -(dp32696 -S'editable' -p32697 -I01 -sS'value' -p32698 -S'Raw Head In' -p32699 -ssS'data_type' -p32700 -(dp32701 -S'editable' -p32702 -I00 -sS'value' -p32703 -S'number' -p32704 -ssS'entity_type' -p32705 -(dp32706 -S'editable' -p32707 -I00 -sS'value' -p32708 -S'Shot' -p32709 -ssS'editable' -p32710 -(dp32711 -S'editable' -p32712 -I00 -sS'value' -p32713 -I01 -ssS'unique' -p32714 -(dp32715 -S'editable' -p32716 -I00 -sS'value' -p32717 -I00 -ssS'properties' -p32718 -(dp32719 -S'default_value' -p32720 -(dp32721 -S'editable' -p32722 -I00 -sS'value' -p32723 -NssS'summary_default' -p32724 -(dp32725 -S'editable' -p32726 -I01 -sS'value' -p32727 -S'none' -p32728 -sssS'description' -p32729 -(dp32730 -S'editable' -p32731 -I01 -sS'value' -p32732 -g47 -sssS'tasks' -p32733 -(dp32734 -S'mandatory' -p32735 -(dp32736 -S'editable' -p32737 -I00 -sS'value' -p32738 -I00 -ssS'name' -p32739 -(dp32740 -S'editable' -p32741 -I01 -sS'value' -p32742 -S'Tasks' -p32743 -ssS'data_type' -p32744 -(dp32745 -S'editable' -p32746 -I00 -sS'value' -p32747 -S'multi_entity' -p32748 -ssS'entity_type' -p32749 -(dp32750 -S'editable' -p32751 -I00 -sS'value' -p32752 -S'Shot' -p32753 -ssS'editable' -p32754 -(dp32755 -S'editable' -p32756 -I00 -sS'value' -p32757 -I01 -ssS'unique' -p32758 -(dp32759 -S'editable' -p32760 -I00 -sS'value' -p32761 -I00 -ssS'properties' -p32762 -(dp32763 -S'default_value' -p32764 -(dp32765 -S'editable' -p32766 -I00 -sS'value' -p32767 -NssS'summary_default' -p32768 -(dp32769 -S'editable' -p32770 -I01 -sS'value' -p32771 -S'none' -p32772 -ssS'valid_types' -p32773 -(dp32774 -S'editable' -p32775 -I01 -sS'value' -p32776 -(lp32777 -S'Task' -p32778 -asssS'description' -p32779 -(dp32780 -S'editable' -p32781 -I01 -sS'value' -p32782 -g47 -sssS'filmstrip_image' -p32783 -(dp32784 -S'mandatory' -p32785 -(dp32786 -S'editable' -p32787 -I00 -sS'value' -p32788 -I00 -ssS'name' -p32789 -(dp32790 -S'editable' -p32791 -I01 -sS'value' -p32792 -S'Filmstrip Thumbnail' -p32793 -ssS'data_type' -p32794 -(dp32795 -S'editable' -p32796 -I00 -sS'value' -p32797 -S'image' -p32798 -ssS'entity_type' -p32799 -(dp32800 -S'editable' -p32801 -I00 -sS'value' -p32802 -S'Shot' -p32803 -ssS'editable' -p32804 -(dp32805 -S'editable' -p32806 -I00 -sS'value' -p32807 -I01 -ssS'unique' -p32808 -(dp32809 -S'editable' -p32810 -I00 -sS'value' -p32811 -I00 -ssS'properties' -p32812 -(dp32813 -S'default_value' -p32814 -(dp32815 -S'editable' -p32816 -I00 -sS'value' -p32817 -NssS'summary_default' -p32818 -(dp32819 -S'editable' -p32820 -I01 -sS'value' -p32821 -S'none' -p32822 -sssS'description' -p32823 -(dp32824 -S'editable' -p32825 -I01 -sS'value' -p32826 -g47 -sssS'sg_cut_duration' -p32827 -(dp32828 -S'mandatory' -p32829 -(dp32830 -S'editable' -p32831 -I00 -sS'value' -p32832 -I00 -ssS'name' -p32833 -(dp32834 -S'editable' -p32835 -I01 -sS'value' -p32836 -S'Cut Duration' -p32837 -ssS'data_type' -p32838 -(dp32839 -S'editable' -p32840 -I00 -sS'value' -p32841 -S'number' -p32842 -ssS'entity_type' -p32843 -(dp32844 -S'editable' -p32845 -I00 -sS'value' -p32846 -S'Shot' -p32847 -ssS'editable' -p32848 -(dp32849 -S'editable' -p32850 -I00 -sS'value' -p32851 -I01 -ssS'unique' -p32852 -(dp32853 -S'editable' -p32854 -I00 -sS'value' -p32855 -I00 -ssS'properties' -p32856 -(dp32857 -S'default_value' -p32858 -(dp32859 -S'editable' -p32860 -I00 -sS'value' -p32861 -NssS'summary_default' -p32862 -(dp32863 -S'editable' -p32864 -I01 -sS'value' -p32865 -S'sum' -p32866 -sssS'description' -p32867 -(dp32868 -S'editable' -p32869 -I01 -sS'value' -p32870 -S'Duration of this shot in the cut.' -p32871 -sssS'cached_display_name' -p32872 -(dp32873 -S'mandatory' -p32874 -(dp32875 -S'editable' -p32876 -I00 -sS'value' -p32877 -I00 -ssS'name' -p32878 -(dp32879 -S'editable' -p32880 -I01 -sS'value' -p32881 -S'Cached Display Name' -p32882 -ssS'data_type' -p32883 -(dp32884 -S'editable' -p32885 -I00 -sS'value' -p32886 -S'text' -p32887 -ssS'entity_type' -p32888 -(dp32889 -S'editable' -p32890 -I00 -sS'value' -p32891 -S'Shot' -p32892 -ssS'editable' -p32893 -(dp32894 -S'editable' -p32895 -I00 -sS'value' -p32896 -I01 -ssS'unique' -p32897 -(dp32898 -S'editable' -p32899 -I00 -sS'value' -p32900 -I00 -ssS'properties' -p32901 -(dp32902 -S'default_value' -p32903 -(dp32904 -S'editable' -p32905 -I00 -sS'value' -p32906 -NssS'summary_default' -p32907 -(dp32908 -S'editable' -p32909 -I00 -sS'value' -p32910 -S'none' -p32911 -sssS'description' -p32912 -(dp32913 -S'editable' -p32914 -I01 -sS'value' -p32915 -g47 -sssS'smart_cut_duration' -p32916 -(dp32917 -S'mandatory' -p32918 -(dp32919 -S'editable' -p32920 -I00 -sS'value' -p32921 -I00 -ssS'name' -p32922 -(dp32923 -S'editable' -p32924 -I01 -sS'value' -p32925 -S'Cut Duration' -p32926 -ssS'data_type' -p32927 -(dp32928 -S'editable' -p32929 -I00 -sS'value' -p32930 -S'number' -p32931 -ssS'entity_type' -p32932 -(dp32933 -S'editable' -p32934 -I00 -sS'value' -p32935 -S'Shot' -p32936 -ssS'editable' -p32937 -(dp32938 -S'editable' -p32939 -I00 -sS'value' -p32940 -I01 -ssS'unique' -p32941 -(dp32942 -S'editable' -p32943 -I00 -sS'value' -p32944 -I00 -ssS'properties' -p32945 -(dp32946 -S'default_value' -p32947 -(dp32948 -S'editable' -p32949 -I00 -sS'value' -p32950 -NssS'summary_default' -p32951 -(dp32952 -S'editable' -p32953 -I01 -sS'value' -p32954 -S'none' -p32955 -sssS'description' -p32956 -(dp32957 -S'editable' -p32958 -I01 -sS'value' -p32959 -g47 -sssS'id' -p32960 -(dp32961 -S'mandatory' -p32962 -(dp32963 -S'editable' -p32964 -I00 -sS'value' -p32965 -I00 -ssS'name' -p32966 -(dp32967 -S'editable' -p32968 -I01 -sS'value' -p32969 -S'Id' -p32970 -ssS'data_type' -p32971 -(dp32972 -S'editable' -p32973 -I00 -sS'value' -p32974 -S'number' -p32975 -ssS'entity_type' -p32976 -(dp32977 -S'editable' -p32978 -I00 -sS'value' -p32979 -S'Shot' -p32980 -ssS'editable' -p32981 -(dp32982 -S'editable' -p32983 -I00 -sS'value' -p32984 -I00 -ssS'unique' -p32985 -(dp32986 -S'editable' -p32987 -I00 -sS'value' -p32988 -I00 -ssS'properties' -p32989 -(dp32990 -S'default_value' -p32991 -(dp32992 -S'editable' -p32993 -I00 -sS'value' -p32994 -NssS'summary_default' -p32995 -(dp32996 -S'editable' -p32997 -I01 -sS'value' -p32998 -S'none' -p32999 -sssS'description' -p33000 -(dp33001 -S'editable' -p33002 -I01 -sS'value' -p33003 -g47 -sssS'updated_by' -p33004 -(dp33005 -S'mandatory' -p33006 -(dp33007 -S'editable' -p33008 -I00 -sS'value' -p33009 -I00 -ssS'name' -p33010 -(dp33011 -S'editable' -p33012 -I01 -sS'value' -p33013 -S'Updated by' -p33014 -ssS'data_type' -p33015 -(dp33016 -S'editable' -p33017 -I00 -sS'value' -p33018 -S'entity' -p33019 -ssS'entity_type' -p33020 -(dp33021 -S'editable' -p33022 -I00 -sS'value' -p33023 -S'Shot' -p33024 -ssS'editable' -p33025 -(dp33026 -S'editable' -p33027 -I00 -sS'value' -p33028 -I00 -ssS'unique' -p33029 -(dp33030 -S'editable' -p33031 -I00 -sS'value' -p33032 -I00 -ssS'properties' -p33033 -(dp33034 -S'default_value' -p33035 -(dp33036 -S'editable' -p33037 -I00 -sS'value' -p33038 -NssS'summary_default' -p33039 -(dp33040 -S'editable' -p33041 -I01 -sS'value' -p33042 -S'none' -p33043 -ssS'valid_types' -p33044 -(dp33045 -S'editable' -p33046 -I01 -sS'value' -p33047 -(lp33048 -S'HumanUser' -p33049 -aS'ApiUser' -p33050 -asssS'description' -p33051 -(dp33052 -S'editable' -p33053 -I01 -sS'value' -p33054 -g47 -sssS'open_notes' -p33055 -(dp33056 -S'mandatory' -p33057 -(dp33058 -S'editable' -p33059 -I00 -sS'value' -p33060 -I00 -ssS'name' -p33061 -(dp33062 -S'editable' -p33063 -I01 -sS'value' -p33064 -S'Open Notes' -p33065 -ssS'data_type' -p33066 -(dp33067 -S'editable' -p33068 -I00 -sS'value' -p33069 -S'multi_entity' -p33070 -ssS'entity_type' -p33071 -(dp33072 -S'editable' -p33073 -I00 -sS'value' -p33074 -S'Shot' -p33075 -ssS'editable' -p33076 -(dp33077 -S'editable' -p33078 -I00 -sS'value' -p33079 -I00 -ssS'unique' -p33080 -(dp33081 -S'editable' -p33082 -I00 -sS'value' -p33083 -I00 -ssS'properties' -p33084 -(dp33085 -S'default_value' -p33086 -(dp33087 -S'editable' -p33088 -I00 -sS'value' -p33089 -NssS'summary_default' -p33090 -(dp33091 -S'editable' -p33092 -I01 -sS'value' -p33093 -S'none' -p33094 -ssS'valid_types' -p33095 -(dp33096 -S'editable' -p33097 -I01 -sS'value' -p33098 -(lp33099 -S'Note' -p33100 -asssS'description' -p33101 -(dp33102 -S'editable' -p33103 -I01 -sS'value' -p33104 -g47 -sssS'addressings_cc' -p33105 -(dp33106 -S'mandatory' -p33107 -(dp33108 -S'editable' -p33109 -I00 -sS'value' -p33110 -I00 -ssS'name' -p33111 -(dp33112 -S'editable' -p33113 -I01 -sS'value' -p33114 -S'Cc' -p33115 -ssS'data_type' -p33116 -(dp33117 -S'editable' -p33118 -I00 -sS'value' -p33119 -S'multi_entity' -p33120 -ssS'entity_type' -p33121 -(dp33122 -S'editable' -p33123 -I00 -sS'value' -p33124 -S'Shot' -p33125 -ssS'editable' -p33126 -(dp33127 -S'editable' -p33128 -I00 -sS'value' -p33129 -I01 -ssS'unique' -p33130 -(dp33131 -S'editable' -p33132 -I00 -sS'value' -p33133 -I00 -ssS'properties' -p33134 -(dp33135 -S'default_value' -p33136 -(dp33137 -S'editable' -p33138 -I00 -sS'value' -p33139 -NssS'summary_default' -p33140 -(dp33141 -S'editable' -p33142 -I01 -sS'value' -p33143 -S'none' -p33144 -ssS'valid_types' -p33145 -(dp33146 -S'editable' -p33147 -I01 -sS'value' -p33148 -(lp33149 -S'Group' -p33150 -aS'HumanUser' -p33151 -asssS'description' -p33152 -(dp33153 -S'editable' -p33154 -I01 -sS'value' -p33155 -g47 -sssS'sg_working_duration' -p33156 -(dp33157 -S'mandatory' -p33158 -(dp33159 -S'editable' -p33160 -I00 -sS'value' -p33161 -I00 -ssS'name' -p33162 -(dp33163 -S'editable' -p33164 -I01 -sS'value' -p33165 -S'Working Duration' -p33166 -ssS'data_type' -p33167 -(dp33168 -S'editable' -p33169 -I00 -sS'value' -p33170 -S'number' -p33171 -ssS'entity_type' -p33172 -(dp33173 -S'editable' -p33174 -I00 -sS'value' -p33175 -S'Shot' -p33176 -ssS'editable' -p33177 -(dp33178 -S'editable' -p33179 -I00 -sS'value' -p33180 -I01 -ssS'unique' -p33181 -(dp33182 -S'editable' -p33183 -I00 -sS'value' -p33184 -I00 -ssS'properties' -p33185 -(dp33186 -S'default_value' -p33187 -(dp33188 -S'editable' -p33189 -I00 -sS'value' -p33190 -NssS'summary_default' -p33191 -(dp33192 -S'editable' -p33193 -I01 -sS'value' -p33194 -S'none' -p33195 -sssS'description' -p33196 -(dp33197 -S'editable' -p33198 -I01 -sS'value' -p33199 -S'The full duration of available frames in this Shot from Head In to Tail Out.' -p33200 -sssS'sg_shotnumber' -p33201 -(dp33202 -S'mandatory' -p33203 -(dp33204 -S'editable' -p33205 -I00 -sS'value' -p33206 -I00 -ssS'name' -p33207 -(dp33208 -S'editable' -p33209 -I01 -sS'value' -p33210 -S'shotnumber' -p33211 -ssS'data_type' -p33212 -(dp33213 -S'editable' -p33214 -I00 -sS'value' -p33215 -S'text' -p33216 -ssS'entity_type' -p33217 -(dp33218 -S'editable' -p33219 -I00 -sS'value' -p33220 -S'Shot' -p33221 -ssS'editable' -p33222 -(dp33223 -S'editable' -p33224 -I00 -sS'value' -p33225 -I01 -ssS'unique' -p33226 -(dp33227 -S'editable' -p33228 -I00 -sS'value' -p33229 -I00 -ssS'properties' -p33230 -(dp33231 -S'default_value' -p33232 -(dp33233 -S'editable' -p33234 -I00 -sS'value' -p33235 -NssS'summary_default' -p33236 -(dp33237 -S'editable' -p33238 -I01 -sS'value' -p33239 -S'none' -p33240 -sssS'description' -p33241 -(dp33242 -S'editable' -p33243 -I01 -sS'value' -p33244 -g47 -sssS'task_template' -p33245 -(dp33246 -S'mandatory' -p33247 -(dp33248 -S'editable' -p33249 -I00 -sS'value' -p33250 -I00 -ssS'name' -p33251 -(dp33252 -S'editable' -p33253 -I01 -sS'value' -p33254 -S'Task Template' -p33255 -ssS'data_type' -p33256 -(dp33257 -S'editable' -p33258 -I00 -sS'value' -p33259 -S'entity' -p33260 -ssS'entity_type' -p33261 -(dp33262 -S'editable' -p33263 -I00 -sS'value' -p33264 -S'Shot' -p33265 -ssS'editable' -p33266 -(dp33267 -S'editable' -p33268 -I00 -sS'value' -p33269 -I01 -ssS'unique' -p33270 -(dp33271 -S'editable' -p33272 -I00 -sS'value' -p33273 -I00 -ssS'properties' -p33274 -(dp33275 -S'default_value' -p33276 -(dp33277 -S'editable' -p33278 -I00 -sS'value' -p33279 -NssS'summary_default' -p33280 -(dp33281 -S'editable' -p33282 -I01 -sS'value' -p33283 -S'none' -p33284 -ssS'valid_types' -p33285 -(dp33286 -S'editable' -p33287 -I01 -sS'value' -p33288 -(lp33289 -S'TaskTemplate' -p33290 -asssS'description' -p33291 -(dp33292 -S'editable' -p33293 -I01 -sS'value' -p33294 -g47 -sssS'created_by' -p33295 -(dp33296 -S'mandatory' -p33297 -(dp33298 -S'editable' -p33299 -I00 -sS'value' -p33300 -I00 -ssS'name' -p33301 -(dp33302 -S'editable' -p33303 -I01 -sS'value' -p33304 -S'Created by' -p33305 -ssS'data_type' -p33306 -(dp33307 -S'editable' -p33308 -I00 -sS'value' -p33309 -S'entity' -p33310 -ssS'entity_type' -p33311 -(dp33312 -S'editable' -p33313 -I00 -sS'value' -p33314 -S'Shot' -p33315 -ssS'editable' -p33316 -(dp33317 -S'editable' -p33318 -I00 -sS'value' -p33319 -I00 -ssS'unique' -p33320 -(dp33321 -S'editable' -p33322 -I00 -sS'value' -p33323 -I00 -ssS'properties' -p33324 -(dp33325 -S'default_value' -p33326 -(dp33327 -S'editable' -p33328 -I00 -sS'value' -p33329 -NssS'summary_default' -p33330 -(dp33331 -S'editable' -p33332 -I01 -sS'value' -p33333 -S'none' -p33334 -ssS'valid_types' -p33335 -(dp33336 -S'editable' -p33337 -I01 -sS'value' -p33338 -(lp33339 -S'HumanUser' -p33340 -aS'ApiUser' -p33341 -asssS'description' -p33342 -(dp33343 -S'editable' -p33344 -I01 -sS'value' -p33345 -g47 -sssS'smart_tail_duration' -p33346 -(dp33347 -S'mandatory' -p33348 -(dp33349 -S'editable' -p33350 -I00 -sS'value' -p33351 -I00 -ssS'name' -p33352 -(dp33353 -S'editable' -p33354 -I01 -sS'value' -p33355 -S'Tail Duration' -p33356 -ssS'data_type' -p33357 -(dp33358 -S'editable' -p33359 -I00 -sS'value' -p33360 -S'number' -p33361 -ssS'entity_type' -p33362 -(dp33363 -S'editable' -p33364 -I00 -sS'value' -p33365 -S'Shot' -p33366 -ssS'editable' -p33367 -(dp33368 -S'editable' -p33369 -I00 -sS'value' -p33370 -I01 -ssS'unique' -p33371 -(dp33372 -S'editable' -p33373 -I00 -sS'value' -p33374 -I00 -ssS'properties' -p33375 -(dp33376 -S'default_value' -p33377 -(dp33378 -S'editable' -p33379 -I00 -sS'value' -p33380 -NssS'summary_default' -p33381 -(dp33382 -S'editable' -p33383 -I01 -sS'value' -p33384 -S'none' -p33385 -sssS'description' -p33386 -(dp33387 -S'editable' -p33388 -I01 -sS'value' -p33389 -g47 -sssS'parent_shots' -p33390 -(dp33391 -S'mandatory' -p33392 -(dp33393 -S'editable' -p33394 -I00 -sS'value' -p33395 -I00 -ssS'name' -p33396 -(dp33397 -S'editable' -p33398 -I01 -sS'value' -p33399 -S'Parent Shots' -p33400 -ssS'data_type' -p33401 -(dp33402 -S'editable' -p33403 -I00 -sS'value' -p33404 -S'multi_entity' -p33405 -ssS'entity_type' -p33406 -(dp33407 -S'editable' -p33408 -I00 -sS'value' -p33409 -S'Shot' -p33410 -ssS'editable' -p33411 -(dp33412 -S'editable' -p33413 -I00 -sS'value' -p33414 -I01 -ssS'unique' -p33415 -(dp33416 -S'editable' -p33417 -I00 -sS'value' -p33418 -I00 -ssS'properties' -p33419 -(dp33420 -S'default_value' -p33421 -(dp33422 -S'editable' -p33423 -I00 -sS'value' -p33424 -NssS'summary_default' -p33425 -(dp33426 -S'editable' -p33427 -I01 -sS'value' -p33428 -S'none' -p33429 -ssS'valid_types' -p33430 -(dp33431 -S'editable' -p33432 -I01 -sS'value' -p33433 -(lp33434 -S'Shot' -p33435 -asssS'description' -p33436 -(dp33437 -S'editable' -p33438 -I01 -sS'value' -p33439 -g47 -sssS'sg_status_list' -p33440 -(dp33441 -S'mandatory' -p33442 -(dp33443 -S'editable' -p33444 -I00 -sS'value' -p33445 -I00 -ssS'name' -p33446 -(dp33447 -S'editable' -p33448 -I01 -sS'value' -p33449 -S'Status' -p33450 -ssS'data_type' -p33451 -(dp33452 -S'editable' -p33453 -I00 -sS'value' -p33454 -S'status_list' -p33455 -ssS'entity_type' -p33456 -(dp33457 -S'editable' -p33458 -I00 -sS'value' -p33459 -S'Shot' -p33460 -ssS'editable' -p33461 -(dp33462 -S'editable' -p33463 -I00 -sS'value' -p33464 -I01 -ssS'unique' -p33465 -(dp33466 -S'editable' -p33467 -I00 -sS'value' -p33468 -I00 -ssS'properties' -p33469 -(dp33470 -S'default_value' -p33471 -(dp33472 -S'editable' -p33473 -I01 -sS'value' -p33474 -S'wtg' -p33475 -ssS'valid_values' -p33476 -(dp33477 -S'editable' -p33478 -I01 -sS'value' -p33479 -(lp33480 -S'cbb' -p33481 -aS'fin' -p33482 -aS'ip' -p33483 -aS'omt' -p33484 -aS'hld' -p33485 -aS'rdy' -p33486 -aS'wtg' -p33487 -assS'summary_default' -p33488 -(dp33489 -S'editable' -p33490 -I01 -sS'value' -p33491 -S'status_list' -p33492 -sssS'description' -p33493 -(dp33494 -S'editable' -p33495 -I01 -sS'value' -p33496 -g47 -sssS'smart_head_in' -p33497 -(dp33498 -S'mandatory' -p33499 -(dp33500 -S'editable' -p33501 -I00 -sS'value' -p33502 -I00 -ssS'name' -p33503 -(dp33504 -S'editable' -p33505 -I01 -sS'value' -p33506 -S'Head In' -p33507 -ssS'data_type' -p33508 -(dp33509 -S'editable' -p33510 -I00 -sS'value' -p33511 -S'number' -p33512 -ssS'entity_type' -p33513 -(dp33514 -S'editable' -p33515 -I00 -sS'value' -p33516 -S'Shot' -p33517 -ssS'editable' -p33518 -(dp33519 -S'editable' -p33520 -I00 -sS'value' -p33521 -I01 -ssS'unique' -p33522 -(dp33523 -S'editable' -p33524 -I00 -sS'value' -p33525 -I00 -ssS'properties' -p33526 -(dp33527 -S'default_value' -p33528 -(dp33529 -S'editable' -p33530 -I00 -sS'value' -p33531 -NssS'summary_default' -p33532 -(dp33533 -S'editable' -p33534 -I01 -sS'value' -p33535 -S'none' -p33536 -sssS'description' -p33537 -(dp33538 -S'editable' -p33539 -I01 -sS'value' -p33540 -g47 -sssS'smart_working_duration' -p33541 -(dp33542 -S'mandatory' -p33543 -(dp33544 -S'editable' -p33545 -I00 -sS'value' -p33546 -I00 -ssS'name' -p33547 -(dp33548 -S'editable' -p33549 -I01 -sS'value' -p33550 -S'Working Duration' -p33551 -ssS'data_type' -p33552 -(dp33553 -S'editable' -p33554 -I00 -sS'value' -p33555 -S'number' -p33556 -ssS'entity_type' -p33557 -(dp33558 -S'editable' -p33559 -I00 -sS'value' -p33560 -S'Shot' -p33561 -ssS'editable' -p33562 -(dp33563 -S'editable' -p33564 -I00 -sS'value' -p33565 -I00 -ssS'unique' -p33566 -(dp33567 -S'editable' -p33568 -I00 -sS'value' -p33569 -I00 -ssS'properties' -p33570 -(dp33571 -S'default_value' -p33572 -(dp33573 -S'editable' -p33574 -I00 -sS'value' -p33575 -NssS'summary_default' -p33576 -(dp33577 -S'editable' -p33578 -I01 -sS'value' -p33579 -S'none' -p33580 -sssS'description' -p33581 -(dp33582 -S'editable' -p33583 -I01 -sS'value' -p33584 -g47 -sssS'sg_cut_in' -p33585 -(dp33586 -S'mandatory' -p33587 -(dp33588 -S'editable' -p33589 -I00 -sS'value' -p33590 -I00 -ssS'name' -p33591 -(dp33592 -S'editable' -p33593 -I01 -sS'value' -p33594 -S'Cut In' -p33595 -ssS'data_type' -p33596 -(dp33597 -S'editable' -p33598 -I00 -sS'value' -p33599 -S'number' -p33600 -ssS'entity_type' -p33601 -(dp33602 -S'editable' -p33603 -I00 -sS'value' -p33604 -S'Shot' -p33605 -ssS'editable' -p33606 -(dp33607 -S'editable' -p33608 -I00 -sS'value' -p33609 -I01 -ssS'unique' -p33610 -(dp33611 -S'editable' -p33612 -I00 -sS'value' -p33613 -I00 -ssS'properties' -p33614 -(dp33615 -S'default_value' -p33616 -(dp33617 -S'editable' -p33618 -I00 -sS'value' -p33619 -NssS'summary_default' -p33620 -(dp33621 -S'editable' -p33622 -I01 -sS'value' -p33623 -S'sum' -p33624 -sssS'description' -p33625 -(dp33626 -S'editable' -p33627 -I01 -sS'value' -p33628 -S'The first frame used in the cut. This input comes from editorial and is used for playback of movie and frames.' -p33629 -sssS'elements' -p33630 -(dp33631 -S'mandatory' -p33632 -(dp33633 -S'editable' -p33634 -I00 -sS'value' -p33635 -I00 -ssS'name' -p33636 -(dp33637 -S'editable' -p33638 -I01 -sS'value' -p33639 -S'Elements' -p33640 -ssS'data_type' -p33641 -(dp33642 -S'editable' -p33643 -I00 -sS'value' -p33644 -S'multi_entity' -p33645 -ssS'entity_type' -p33646 -(dp33647 -S'editable' -p33648 -I00 -sS'value' -p33649 -S'Shot' -p33650 -ssS'editable' -p33651 -(dp33652 -S'editable' -p33653 -I00 -sS'value' -p33654 -I01 -ssS'unique' -p33655 -(dp33656 -S'editable' -p33657 -I00 -sS'value' -p33658 -I00 -ssS'properties' -p33659 -(dp33660 -S'default_value' -p33661 -(dp33662 -S'editable' -p33663 -I00 -sS'value' -p33664 -NssS'summary_default' -p33665 -(dp33666 -S'editable' -p33667 -I00 -sS'value' -p33668 -S'none' -p33669 -ssS'valid_types' -p33670 -(dp33671 -S'editable' -p33672 -I00 -sS'value' -p33673 -(lp33674 -S'Element' -p33675 -asssS'description' -p33676 -(dp33677 -S'editable' -p33678 -I01 -sS'value' -p33679 -g47 -sssS'sg_shot_type' -p33680 -(dp33681 -S'mandatory' -p33682 -(dp33683 -S'editable' -p33684 -I00 -sS'value' -p33685 -I00 -ssS'name' -p33686 -(dp33687 -S'editable' -p33688 -I01 -sS'value' -p33689 -S'Type' -p33690 -ssS'data_type' -p33691 -(dp33692 -S'editable' -p33693 -I00 -sS'value' -p33694 -S'list' -p33695 -ssS'entity_type' -p33696 -(dp33697 -S'editable' -p33698 -I00 -sS'value' -p33699 -S'Shot' -p33700 -ssS'editable' -p33701 -(dp33702 -S'editable' -p33703 -I00 -sS'value' -p33704 -I01 -ssS'unique' -p33705 -(dp33706 -S'editable' -p33707 -I00 -sS'value' -p33708 -I00 -ssS'properties' -p33709 -(dp33710 -S'default_value' -p33711 -(dp33712 -S'editable' -p33713 -I00 -sS'value' -p33714 -NssS'valid_values' -p33715 -(dp33716 -S'editable' -p33717 -I01 -sS'value' -p33718 -(lp33719 -ssS'summary_default' -p33720 -(dp33721 -S'editable' -p33722 -I01 -sS'value' -p33723 -S'none' -p33724 -sssS'description' -p33725 -(dp33726 -S'editable' -p33727 -I01 -sS'value' -p33728 -g47 -sssS'description' -p33729 -(dp33730 -S'mandatory' -p33731 -(dp33732 -S'editable' -p33733 -I00 -sS'value' -p33734 -I00 -ssS'name' -p33735 -(dp33736 -S'editable' -p33737 -I01 -sS'value' -p33738 -S'Description' -p33739 -ssS'data_type' -p33740 -(dp33741 -S'editable' -p33742 -I00 -sS'value' -p33743 -S'text' -p33744 -ssS'entity_type' -p33745 -(dp33746 -S'editable' -p33747 -I00 -sS'value' -p33748 -S'Shot' -p33749 -ssS'editable' -p33750 -(dp33751 -S'editable' -p33752 -I00 -sS'value' -p33753 -I01 -ssS'unique' -p33754 -(dp33755 -S'editable' -p33756 -I00 -sS'value' -p33757 -I00 -ssS'properties' -p33758 -(dp33759 -S'default_value' -p33760 -(dp33761 -S'editable' -p33762 -I00 -sS'value' -p33763 -NssS'summary_default' -p33764 -(dp33765 -S'editable' -p33766 -I01 -sS'value' -p33767 -S'none' -p33768 -sssS'description' -p33769 -(dp33770 -S'editable' -p33771 -I01 -sS'value' -p33772 -g47 -sssS'smart_cut_out' -p33773 -(dp33774 -S'mandatory' -p33775 -(dp33776 -S'editable' -p33777 -I00 -sS'value' -p33778 -I00 -ssS'name' -p33779 -(dp33780 -S'editable' -p33781 -I01 -sS'value' -p33782 -S'Cut Out' -p33783 -ssS'data_type' -p33784 -(dp33785 -S'editable' -p33786 -I00 -sS'value' -p33787 -S'number' -p33788 -ssS'entity_type' -p33789 -(dp33790 -S'editable' -p33791 -I00 -sS'value' -p33792 -S'Shot' -p33793 -ssS'editable' -p33794 -(dp33795 -S'editable' -p33796 -I00 -sS'value' -p33797 -I01 -ssS'unique' -p33798 -(dp33799 -S'editable' -p33800 -I00 -sS'value' -p33801 -I00 -ssS'properties' -p33802 -(dp33803 -S'default_value' -p33804 -(dp33805 -S'editable' -p33806 -I00 -sS'value' -p33807 -NssS'summary_default' -p33808 -(dp33809 -S'editable' -p33810 -I01 -sS'value' -p33811 -S'none' -p33812 -sssS'description' -p33813 -(dp33814 -S'editable' -p33815 -I01 -sS'value' -p33816 -g47 -sssS'tail_out' -p33817 -(dp33818 -S'mandatory' -p33819 -(dp33820 -S'editable' -p33821 -I00 -sS'value' -p33822 -I00 -ssS'name' -p33823 -(dp33824 -S'editable' -p33825 -I01 -sS'value' -p33826 -S'Raw Tail Out' -p33827 -ssS'data_type' -p33828 -(dp33829 -S'editable' -p33830 -I00 -sS'value' -p33831 -S'number' -p33832 -ssS'entity_type' -p33833 -(dp33834 -S'editable' -p33835 -I00 -sS'value' -p33836 -S'Shot' -p33837 -ssS'editable' -p33838 -(dp33839 -S'editable' -p33840 -I00 -sS'value' -p33841 -I01 -ssS'unique' -p33842 -(dp33843 -S'editable' -p33844 -I00 -sS'value' -p33845 -I00 -ssS'properties' -p33846 -(dp33847 -S'default_value' -p33848 -(dp33849 -S'editable' -p33850 -I00 -sS'value' -p33851 -NssS'summary_default' -p33852 -(dp33853 -S'editable' -p33854 -I01 -sS'value' -p33855 -S'none' -p33856 -sssS'description' -p33857 -(dp33858 -S'editable' -p33859 -I01 -sS'value' -p33860 -g47 -sssS'sg_cut_out' -p33861 -(dp33862 -S'mandatory' -p33863 -(dp33864 -S'editable' -p33865 -I00 -sS'value' -p33866 -I00 -ssS'name' -p33867 -(dp33868 -S'editable' -p33869 -I01 -sS'value' -p33870 -S'Cut Out' -p33871 -ssS'data_type' -p33872 -(dp33873 -S'editable' -p33874 -I00 -sS'value' -p33875 -S'number' -p33876 -ssS'entity_type' -p33877 -(dp33878 -S'editable' -p33879 -I00 -sS'value' -p33880 -S'Shot' -p33881 -ssS'editable' -p33882 -(dp33883 -S'editable' -p33884 -I00 -sS'value' -p33885 -I01 -ssS'unique' -p33886 -(dp33887 -S'editable' -p33888 -I00 -sS'value' -p33889 -I00 -ssS'properties' -p33890 -(dp33891 -S'default_value' -p33892 -(dp33893 -S'editable' -p33894 -I00 -sS'value' -p33895 -NssS'summary_default' -p33896 -(dp33897 -S'editable' -p33898 -I01 -sS'value' -p33899 -S'sum' -p33900 -sssS'description' -p33901 -(dp33902 -S'editable' -p33903 -I01 -sS'value' -p33904 -S'The last frame used in the cut. This input comes from editorial and is used for playback of movie and frames.' -p33905 -sssS'sg_tail_out' -p33906 -(dp33907 -S'mandatory' -p33908 -(dp33909 -S'editable' -p33910 -I00 -sS'value' -p33911 -I00 -ssS'name' -p33912 -(dp33913 -S'editable' -p33914 -I01 -sS'value' -p33915 -S'Tail Out' -p33916 -ssS'data_type' -p33917 -(dp33918 -S'editable' -p33919 -I00 -sS'value' -p33920 -S'number' -p33921 -ssS'entity_type' -p33922 -(dp33923 -S'editable' -p33924 -I00 -sS'value' -p33925 -S'Shot' -p33926 -ssS'editable' -p33927 -(dp33928 -S'editable' -p33929 -I00 -sS'value' -p33930 -I01 -ssS'unique' -p33931 -(dp33932 -S'editable' -p33933 -I00 -sS'value' -p33934 -I00 -ssS'properties' -p33935 -(dp33936 -S'default_value' -p33937 -(dp33938 -S'editable' -p33939 -I00 -sS'value' -p33940 -NssS'summary_default' -p33941 -(dp33942 -S'editable' -p33943 -I01 -sS'value' -p33944 -S'none' -p33945 -sssS'description' -p33946 -(dp33947 -S'editable' -p33948 -I01 -sS'value' -p33949 -S'The last frame number that footage is available for this Shot.' -p33950 -sssS'smart_cut_in' -p33951 -(dp33952 -S'mandatory' -p33953 -(dp33954 -S'editable' -p33955 -I00 -sS'value' -p33956 -I00 -ssS'name' -p33957 -(dp33958 -S'editable' -p33959 -I01 -sS'value' -p33960 -S'Cut In' -p33961 -ssS'data_type' -p33962 -(dp33963 -S'editable' -p33964 -I00 -sS'value' -p33965 -S'number' -p33966 -ssS'entity_type' -p33967 -(dp33968 -S'editable' -p33969 -I00 -sS'value' -p33970 -S'Shot' -p33971 -ssS'editable' -p33972 -(dp33973 -S'editable' -p33974 -I00 -sS'value' -p33975 -I01 -ssS'unique' -p33976 -(dp33977 -S'editable' -p33978 -I00 -sS'value' -p33979 -I00 -ssS'properties' -p33980 -(dp33981 -S'default_value' -p33982 -(dp33983 -S'editable' -p33984 -I00 -sS'value' -p33985 -NssS'summary_default' -p33986 -(dp33987 -S'editable' -p33988 -I01 -sS'value' -p33989 -S'none' -p33990 -sssS'description' -p33991 -(dp33992 -S'editable' -p33993 -I01 -sS'value' -p33994 -g47 -sssS'smart_cut_summary_display' -p33995 -(dp33996 -S'mandatory' -p33997 -(dp33998 -S'editable' -p33999 -I00 -sS'value' -p34000 -I00 -ssS'name' -p34001 -(dp34002 -S'editable' -p34003 -I01 -sS'value' -p34004 -S'Cut Summary' -p34005 -ssS'data_type' -p34006 -(dp34007 -S'editable' -p34008 -I00 -sS'value' -p34009 -S'text' -p34010 -ssS'entity_type' -p34011 -(dp34012 -S'editable' -p34013 -I00 -sS'value' -p34014 -S'Shot' -p34015 -ssS'editable' -p34016 -(dp34017 -S'editable' -p34018 -I00 -sS'value' -p34019 -I00 -ssS'unique' -p34020 -(dp34021 -S'editable' -p34022 -I00 -sS'value' -p34023 -I00 -ssS'properties' -p34024 -(dp34025 -S'default_value' -p34026 -(dp34027 -S'editable' -p34028 -I00 -sS'value' -p34029 -NssS'summary_default' -p34030 -(dp34031 -S'editable' -p34032 -I01 -sS'value' -p34033 -S'none' -p34034 -sssS'description' -p34035 -(dp34036 -S'editable' -p34037 -I01 -sS'value' -p34038 -g47 -sssS'cut_in' -p34039 -(dp34040 -S'mandatory' -p34041 -(dp34042 -S'editable' -p34043 -I00 -sS'value' -p34044 -I00 -ssS'name' -p34045 -(dp34046 -S'editable' -p34047 -I01 -sS'value' -p34048 -S'Raw Cut In' -p34049 -ssS'data_type' -p34050 -(dp34051 -S'editable' -p34052 -I00 -sS'value' -p34053 -S'number' -p34054 -ssS'entity_type' -p34055 -(dp34056 -S'editable' -p34057 -I00 -sS'value' -p34058 -S'Shot' -p34059 -ssS'editable' -p34060 -(dp34061 -S'editable' -p34062 -I00 -sS'value' -p34063 -I01 -ssS'unique' -p34064 -(dp34065 -S'editable' -p34066 -I00 -sS'value' -p34067 -I00 -ssS'properties' -p34068 -(dp34069 -S'default_value' -p34070 -(dp34071 -S'editable' -p34072 -I00 -sS'value' -p34073 -NssS'summary_default' -p34074 -(dp34075 -S'editable' -p34076 -I01 -sS'value' -p34077 -S'none' -p34078 -sssS'description' -p34079 -(dp34080 -S'editable' -p34081 -I01 -sS'value' -p34082 -g47 -sssS'smart_duration_summary_display' -p34083 -(dp34084 -S'mandatory' -p34085 -(dp34086 -S'editable' -p34087 -I00 -sS'value' -p34088 -I00 -ssS'name' -p34089 -(dp34090 -S'editable' -p34091 -I01 -sS'value' -p34092 -S'Duration Summary' -p34093 -ssS'data_type' -p34094 -(dp34095 -S'editable' -p34096 -I00 -sS'value' -p34097 -S'text' -p34098 -ssS'entity_type' -p34099 -(dp34100 -S'editable' -p34101 -I00 -sS'value' -p34102 -S'Shot' -p34103 -ssS'editable' -p34104 -(dp34105 -S'editable' -p34106 -I00 -sS'value' -p34107 -I00 -ssS'unique' -p34108 -(dp34109 -S'editable' -p34110 -I00 -sS'value' -p34111 -I00 -ssS'properties' -p34112 -(dp34113 -S'default_value' -p34114 -(dp34115 -S'editable' -p34116 -I00 -sS'value' -p34117 -NssS'summary_default' -p34118 -(dp34119 -S'editable' -p34120 -I01 -sS'value' -p34121 -S'none' -p34122 -sssS'description' -p34123 -(dp34124 -S'editable' -p34125 -I01 -sS'value' -p34126 -g47 -sssS'tail_duration' -p34127 -(dp34128 -S'mandatory' -p34129 -(dp34130 -S'editable' -p34131 -I00 -sS'value' -p34132 -I00 -ssS'name' -p34133 -(dp34134 -S'editable' -p34135 -I01 -sS'value' -p34136 -S'Raw Tail Duration' -p34137 -ssS'data_type' -p34138 -(dp34139 -S'editable' -p34140 -I00 -sS'value' -p34141 -S'number' -p34142 -ssS'entity_type' -p34143 -(dp34144 -S'editable' -p34145 -I00 -sS'value' -p34146 -S'Shot' -p34147 -ssS'editable' -p34148 -(dp34149 -S'editable' -p34150 -I00 -sS'value' -p34151 -I01 -ssS'unique' -p34152 -(dp34153 -S'editable' -p34154 -I00 -sS'value' -p34155 -I00 -ssS'properties' -p34156 -(dp34157 -S'default_value' -p34158 -(dp34159 -S'editable' -p34160 -I00 -sS'value' -p34161 -NssS'summary_default' -p34162 -(dp34163 -S'editable' -p34164 -I01 -sS'value' -p34165 -S'none' -p34166 -sssS'description' -p34167 -(dp34168 -S'editable' -p34169 -I01 -sS'value' -p34170 -g47 -sssS'smart_tail_out' -p34171 -(dp34172 -S'mandatory' -p34173 -(dp34174 -S'editable' -p34175 -I00 -sS'value' -p34176 -I00 -ssS'name' -p34177 -(dp34178 -S'editable' -p34179 -I01 -sS'value' -p34180 -S'Tail Out' -p34181 -ssS'data_type' -p34182 -(dp34183 -S'editable' -p34184 -I00 -sS'value' -p34185 -S'number' -p34186 -ssS'entity_type' -p34187 -(dp34188 -S'editable' -p34189 -I00 -sS'value' -p34190 -S'Shot' -p34191 -ssS'editable' -p34192 -(dp34193 -S'editable' -p34194 -I00 -sS'value' -p34195 -I01 -ssS'unique' -p34196 -(dp34197 -S'editable' -p34198 -I00 -sS'value' -p34199 -I00 -ssS'properties' -p34200 -(dp34201 -S'default_value' -p34202 -(dp34203 -S'editable' -p34204 -I00 -sS'value' -p34205 -NssS'summary_default' -p34206 -(dp34207 -S'editable' -p34208 -I01 -sS'value' -p34209 -S'none' -p34210 -sssS'description' -p34211 -(dp34212 -S'editable' -p34213 -I01 -sS'value' -p34214 -g47 -sssS'step_0' -p34215 -(dp34216 -S'mandatory' -p34217 -(dp34218 -S'editable' -p34219 -I00 -sS'value' -p34220 -I00 -ssS'name' -p34221 -(dp34222 -S'editable' -p34223 -I01 -sS'value' -p34224 -S'ALL TASKS' -p34225 -ssS'data_type' -p34226 -(dp34227 -S'editable' -p34228 -I00 -sS'value' -p34229 -S'pivot_column' -p34230 -ssS'entity_type' -p34231 -(dp34232 -S'editable' -p34233 -I00 -sS'value' -p34234 -S'Shot' -p34235 -ssS'editable' -p34236 -(dp34237 -S'editable' -p34238 -I00 -sS'value' -p34239 -I00 -ssS'unique' -p34240 -(dp34241 -S'editable' -p34242 -I00 -sS'value' -p34243 -I00 -ssS'properties' -p34244 -(dp34245 -S'default_value' -p34246 -(dp34247 -S'editable' -p34248 -I00 -sS'value' -p34249 -NssS'summary_default' -p34250 -(dp34251 -S'editable' -p34252 -I00 -sS'value' -p34253 -S'none' -p34254 -sssS'description' -p34255 -(dp34256 -S'editable' -p34257 -I01 -sS'value' -p34258 -g47 -sssS'cut_duration' -p34259 -(dp34260 -S'mandatory' -p34261 -(dp34262 -S'editable' -p34263 -I00 -sS'value' -p34264 -I00 -ssS'name' -p34265 -(dp34266 -S'editable' -p34267 -I01 -sS'value' -p34268 -S'Raw Cut Duration' -p34269 -ssS'data_type' -p34270 -(dp34271 -S'editable' -p34272 -I00 -sS'value' -p34273 -S'number' -p34274 -ssS'entity_type' -p34275 -(dp34276 -S'editable' -p34277 -I00 -sS'value' -p34278 -S'Shot' -p34279 -ssS'editable' -p34280 -(dp34281 -S'editable' -p34282 -I00 -sS'value' -p34283 -I01 -ssS'unique' -p34284 -(dp34285 -S'editable' -p34286 -I00 -sS'value' -p34287 -I00 -ssS'properties' -p34288 -(dp34289 -S'default_value' -p34290 -(dp34291 -S'editable' -p34292 -I00 -sS'value' -p34293 -NssS'summary_default' -p34294 -(dp34295 -S'editable' -p34296 -I01 -sS'value' -p34297 -S'none' -p34298 -sssS'description' -p34299 -(dp34300 -S'editable' -p34301 -I01 -sS'value' -p34302 -g47 -sssS'step_5' -p34303 -(dp34304 -S'mandatory' -p34305 -(dp34306 -S'editable' -p34307 -I00 -sS'value' -p34308 -I00 -ssS'name' -p34309 -(dp34310 -S'editable' -p34311 -I01 -sS'value' -p34312 -S'Anm' -p34313 -ssS'data_type' -p34314 -(dp34315 -S'editable' -p34316 -I00 -sS'value' -p34317 -S'pivot_column' -p34318 -ssS'entity_type' -p34319 -(dp34320 -S'editable' -p34321 -I00 -sS'value' -p34322 -S'Shot' -p34323 -ssS'editable' -p34324 -(dp34325 -S'editable' -p34326 -I00 -sS'value' -p34327 -I00 -ssS'unique' -p34328 -(dp34329 -S'editable' -p34330 -I00 -sS'value' -p34331 -I00 -ssS'properties' -p34332 -(dp34333 -S'default_value' -p34334 -(dp34335 -S'editable' -p34336 -I00 -sS'value' -p34337 -NssS'summary_default' -p34338 -(dp34339 -S'editable' -p34340 -I00 -sS'value' -p34341 -S'none' -p34342 -sssS'description' -p34343 -(dp34344 -S'editable' -p34345 -I01 -sS'value' -p34346 -g47 -sssS'assets' -p34347 -(dp34348 -S'mandatory' -p34349 -(dp34350 -S'editable' -p34351 -I00 -sS'value' -p34352 -I00 -ssS'name' -p34353 -(dp34354 -S'editable' -p34355 -I01 -sS'value' -p34356 -S'Assets' -p34357 -ssS'data_type' -p34358 -(dp34359 -S'editable' -p34360 -I00 -sS'value' -p34361 -S'multi_entity' -p34362 -ssS'entity_type' -p34363 -(dp34364 -S'editable' -p34365 -I00 -sS'value' -p34366 -S'Shot' -p34367 -ssS'editable' -p34368 -(dp34369 -S'editable' -p34370 -I00 -sS'value' -p34371 -I01 -ssS'unique' -p34372 -(dp34373 -S'editable' -p34374 -I00 -sS'value' -p34375 -I00 -ssS'properties' -p34376 -(dp34377 -S'default_value' -p34378 -(dp34379 -S'editable' -p34380 -I00 -sS'value' -p34381 -NssS'summary_default' -p34382 -(dp34383 -S'editable' -p34384 -I01 -sS'value' -p34385 -S'none' -p34386 -ssS'valid_types' -p34387 -(dp34388 -S'editable' -p34389 -I01 -sS'value' -p34390 -(lp34391 -S'Asset' -p34392 -asssS'description' -p34393 -(dp34394 -S'editable' -p34395 -I01 -sS'value' -p34396 -g47 -sssS'step_7' -p34397 -(dp34398 -S'mandatory' -p34399 -(dp34400 -S'editable' -p34401 -I00 -sS'value' -p34402 -I00 -ssS'name' -p34403 -(dp34404 -S'editable' -p34405 -I01 -sS'value' -p34406 -S'Light' -p34407 -ssS'data_type' -p34408 -(dp34409 -S'editable' -p34410 -I00 -sS'value' -p34411 -S'pivot_column' -p34412 -ssS'entity_type' -p34413 -(dp34414 -S'editable' -p34415 -I00 -sS'value' -p34416 -S'Shot' -p34417 -ssS'editable' -p34418 -(dp34419 -S'editable' -p34420 -I00 -sS'value' -p34421 -I00 -ssS'unique' -p34422 -(dp34423 -S'editable' -p34424 -I00 -sS'value' -p34425 -I00 -ssS'properties' -p34426 -(dp34427 -S'default_value' -p34428 -(dp34429 -S'editable' -p34430 -I00 -sS'value' -p34431 -NssS'summary_default' -p34432 -(dp34433 -S'editable' -p34434 -I00 -sS'value' -p34435 -S'none' -p34436 -sssS'description' -p34437 -(dp34438 -S'editable' -p34439 -I01 -sS'value' -p34440 -g47 -sssS'step_6' -p34441 -(dp34442 -S'mandatory' -p34443 -(dp34444 -S'editable' -p34445 -I00 -sS'value' -p34446 -I00 -ssS'name' -p34447 -(dp34448 -S'editable' -p34449 -I01 -sS'value' -p34450 -S'FX' -p34451 -ssS'data_type' -p34452 -(dp34453 -S'editable' -p34454 -I00 -sS'value' -p34455 -S'pivot_column' -p34456 -ssS'entity_type' -p34457 -(dp34458 -S'editable' -p34459 -I00 -sS'value' -p34460 -S'Shot' -p34461 -ssS'editable' -p34462 -(dp34463 -S'editable' -p34464 -I00 -sS'value' -p34465 -I00 -ssS'unique' -p34466 -(dp34467 -S'editable' -p34468 -I00 -sS'value' -p34469 -I00 -ssS'properties' -p34470 -(dp34471 -S'default_value' -p34472 -(dp34473 -S'editable' -p34474 -I00 -sS'value' -p34475 -NssS'summary_default' -p34476 -(dp34477 -S'editable' -p34478 -I00 -sS'value' -p34479 -S'none' -p34480 -sssS'description' -p34481 -(dp34482 -S'editable' -p34483 -I01 -sS'value' -p34484 -g47 -sssS'smart_tail_in' -p34485 -(dp34486 -S'mandatory' -p34487 -(dp34488 -S'editable' -p34489 -I00 -sS'value' -p34490 -I00 -ssS'name' -p34491 -(dp34492 -S'editable' -p34493 -I01 -sS'value' -p34494 -S'Tail In' -p34495 -ssS'data_type' -p34496 -(dp34497 -S'editable' -p34498 -I00 -sS'value' -p34499 -S'number' -p34500 -ssS'entity_type' -p34501 -(dp34502 -S'editable' -p34503 -I00 -sS'value' -p34504 -S'Shot' -p34505 -ssS'editable' -p34506 -(dp34507 -S'editable' -p34508 -I00 -sS'value' -p34509 -I01 -ssS'unique' -p34510 -(dp34511 -S'editable' -p34512 -I00 -sS'value' -p34513 -I00 -ssS'properties' -p34514 -(dp34515 -S'default_value' -p34516 -(dp34517 -S'editable' -p34518 -I00 -sS'value' -p34519 -NssS'summary_default' -p34520 -(dp34521 -S'editable' -p34522 -I01 -sS'value' -p34523 -S'none' -p34524 -sssS'description' -p34525 -(dp34526 -S'editable' -p34527 -I01 -sS'value' -p34528 -g47 -sssS'step_8' -p34529 -(dp34530 -S'mandatory' -p34531 -(dp34532 -S'editable' -p34533 -I00 -sS'value' -p34534 -I00 -ssS'name' -p34535 -(dp34536 -S'editable' -p34537 -I01 -sS'value' -p34538 -S'Comp' -p34539 -ssS'data_type' -p34540 -(dp34541 -S'editable' -p34542 -I00 -sS'value' -p34543 -S'pivot_column' -p34544 -ssS'entity_type' -p34545 -(dp34546 -S'editable' -p34547 -I00 -sS'value' -p34548 -S'Shot' -p34549 -ssS'editable' -p34550 -(dp34551 -S'editable' -p34552 -I00 -sS'value' -p34553 -I00 -ssS'unique' -p34554 -(dp34555 -S'editable' -p34556 -I00 -sS'value' -p34557 -I00 -ssS'properties' -p34558 -(dp34559 -S'default_value' -p34560 -(dp34561 -S'editable' -p34562 -I00 -sS'value' -p34563 -NssS'summary_default' -p34564 -(dp34565 -S'editable' -p34566 -I00 -sS'value' -p34567 -S'none' -p34568 -sssS'description' -p34569 -(dp34570 -S'editable' -p34571 -I01 -sS'value' -p34572 -g47 -sssS'created_at' -p34573 -(dp34574 -S'mandatory' -p34575 -(dp34576 -S'editable' -p34577 -I00 -sS'value' -p34578 -I00 -ssS'name' -p34579 -(dp34580 -S'editable' -p34581 -I01 -sS'value' -p34582 -S'Date Created' -p34583 -ssS'data_type' -p34584 -(dp34585 -S'editable' -p34586 -I00 -sS'value' -p34587 -S'date_time' -p34588 -ssS'entity_type' -p34589 -(dp34590 -S'editable' -p34591 -I00 -sS'value' -p34592 -S'Shot' -p34593 -ssS'editable' -p34594 -(dp34595 -S'editable' -p34596 -I00 -sS'value' -p34597 -I00 -ssS'unique' -p34598 -(dp34599 -S'editable' -p34600 -I00 -sS'value' -p34601 -I00 -ssS'properties' -p34602 -(dp34603 -S'default_value' -p34604 -(dp34605 -S'editable' -p34606 -I00 -sS'value' -p34607 -NssS'summary_default' -p34608 -(dp34609 -S'editable' -p34610 -I01 -sS'value' -p34611 -S'none' -p34612 -sssS'description' -p34613 -(dp34614 -S'editable' -p34615 -I01 -sS'value' -p34616 -g47 -sssS'sg_scene' -p34617 -(dp34618 -S'mandatory' -p34619 -(dp34620 -S'editable' -p34621 -I00 -sS'value' -p34622 -I00 -ssS'name' -p34623 -(dp34624 -S'editable' -p34625 -I01 -sS'value' -p34626 -S'Scene' -p34627 -ssS'data_type' -p34628 -(dp34629 -S'editable' -p34630 -I00 -sS'value' -p34631 -S'entity' -p34632 -ssS'entity_type' -p34633 -(dp34634 -S'editable' -p34635 -I00 -sS'value' -p34636 -S'Shot' -p34637 -ssS'editable' -p34638 -(dp34639 -S'editable' -p34640 -I00 -sS'value' -p34641 -I01 -ssS'unique' -p34642 -(dp34643 -S'editable' -p34644 -I00 -sS'value' -p34645 -I00 -ssS'properties' -p34646 -(dp34647 -S'default_value' -p34648 -(dp34649 -S'editable' -p34650 -I00 -sS'value' -p34651 -NssS'summary_default' -p34652 -(dp34653 -S'editable' -p34654 -I01 -sS'value' -p34655 -S'none' -p34656 -ssS'valid_types' -p34657 -(dp34658 -S'editable' -p34659 -I01 -sS'value' -p34660 -(lp34661 -S'Scene' -p34662 -asssS'description' -p34663 -(dp34664 -S'editable' -p34665 -I01 -sS'value' -p34666 -g47 -sssS'sg_cut_order' -p34667 -(dp34668 -S'mandatory' -p34669 -(dp34670 -S'editable' -p34671 -I00 -sS'value' -p34672 -I00 -ssS'name' -p34673 -(dp34674 -S'editable' -p34675 -I01 -sS'value' -p34676 -S'Cut Order' -p34677 -ssS'data_type' -p34678 -(dp34679 -S'editable' -p34680 -I00 -sS'value' -p34681 -S'number' -p34682 -ssS'entity_type' -p34683 -(dp34684 -S'editable' -p34685 -I00 -sS'value' -p34686 -S'Shot' -p34687 -ssS'editable' -p34688 -(dp34689 -S'editable' -p34690 -I00 -sS'value' -p34691 -I01 -ssS'unique' -p34692 -(dp34693 -S'editable' -p34694 -I00 -sS'value' -p34695 -I00 -ssS'properties' -p34696 -(dp34697 -S'default_value' -p34698 -(dp34699 -S'editable' -p34700 -I00 -sS'value' -p34701 -NssS'summary_default' -p34702 -(dp34703 -S'editable' -p34704 -I01 -sS'value' -p34705 -S'none' -p34706 -sssS'description' -p34707 -(dp34708 -S'editable' -p34709 -I01 -sS'value' -p34710 -S'Order that the Shot plays in the overall cut for the entire Project. Used for sorting Shots and Versions of Shots when playing in cut order and pulling in neighboring Shots of Versions to the current one being viewed.' -p34711 -sssS'project' -p34712 -(dp34713 -S'mandatory' -p34714 -(dp34715 -S'editable' -p34716 -I00 -sS'value' -p34717 -I00 -ssS'name' -p34718 -(dp34719 -S'editable' -p34720 -I01 -sS'value' -p34721 -S'Project' -p34722 -ssS'data_type' -p34723 -(dp34724 -S'editable' -p34725 -I00 -sS'value' -p34726 -S'entity' -p34727 -ssS'entity_type' -p34728 -(dp34729 -S'editable' -p34730 -I00 -sS'value' -p34731 -S'Shot' -p34732 -ssS'editable' -p34733 -(dp34734 -S'editable' -p34735 -I00 -sS'value' -p34736 -I01 -ssS'unique' -p34737 -(dp34738 -S'editable' -p34739 -I00 -sS'value' -p34740 -I00 -ssS'properties' -p34741 -(dp34742 -S'default_value' -p34743 -(dp34744 -S'editable' -p34745 -I00 -sS'value' -p34746 -NssS'summary_default' -p34747 -(dp34748 -S'editable' -p34749 -I01 -sS'value' -p34750 -S'none' -p34751 -ssS'valid_types' -p34752 -(dp34753 -S'editable' -p34754 -I01 -sS'value' -p34755 -(lp34756 -S'Project' -p34757 -asssS'description' -p34758 -(dp34759 -S'editable' -p34760 -I01 -sS'value' -p34761 -g47 -sssS'sg_head_in' -p34762 -(dp34763 -S'mandatory' -p34764 -(dp34765 -S'editable' -p34766 -I00 -sS'value' -p34767 -I00 -ssS'name' -p34768 -(dp34769 -S'editable' -p34770 -I01 -sS'value' -p34771 -S'Head In' -p34772 -ssS'data_type' -p34773 -(dp34774 -S'editable' -p34775 -I00 -sS'value' -p34776 -S'number' -p34777 -ssS'entity_type' -p34778 -(dp34779 -S'editable' -p34780 -I00 -sS'value' -p34781 -S'Shot' -p34782 -ssS'editable' -p34783 -(dp34784 -S'editable' -p34785 -I00 -sS'value' -p34786 -I01 -ssS'unique' -p34787 -(dp34788 -S'editable' -p34789 -I00 -sS'value' -p34790 -I00 -ssS'properties' -p34791 -(dp34792 -S'default_value' -p34793 -(dp34794 -S'editable' -p34795 -I00 -sS'value' -p34796 -NssS'summary_default' -p34797 -(dp34798 -S'editable' -p34799 -I01 -sS'value' -p34800 -S'none' -p34801 -sssS'description' -p34802 -(dp34803 -S'editable' -p34804 -I01 -sS'value' -p34805 -S'The first frame number that footage is available for this Shot.' -p34806 -sssS'tail_in' -p34807 -(dp34808 -S'mandatory' -p34809 -(dp34810 -S'editable' -p34811 -I00 -sS'value' -p34812 -I00 -ssS'name' -p34813 -(dp34814 -S'editable' -p34815 -I01 -sS'value' -p34816 -S'Raw Tail In' -p34817 -ssS'data_type' -p34818 -(dp34819 -S'editable' -p34820 -I00 -sS'value' -p34821 -S'number' -p34822 -ssS'entity_type' -p34823 -(dp34824 -S'editable' -p34825 -I00 -sS'value' -p34826 -S'Shot' -p34827 -ssS'editable' -p34828 -(dp34829 -S'editable' -p34830 -I00 -sS'value' -p34831 -I01 -ssS'unique' -p34832 -(dp34833 -S'editable' -p34834 -I00 -sS'value' -p34835 -I00 -ssS'properties' -p34836 -(dp34837 -S'default_value' -p34838 -(dp34839 -S'editable' -p34840 -I00 -sS'value' -p34841 -NssS'summary_default' -p34842 -(dp34843 -S'editable' -p34844 -I01 -sS'value' -p34845 -S'none' -p34846 -sssS'description' -p34847 -(dp34848 -S'editable' -p34849 -I01 -sS'value' -p34850 -g47 -sssS'shots' -p34851 -(dp34852 -S'mandatory' -p34853 -(dp34854 -S'editable' -p34855 -I00 -sS'value' -p34856 -I00 -ssS'name' -p34857 -(dp34858 -S'editable' -p34859 -I01 -sS'value' -p34860 -S'Sub Shots' -p34861 -ssS'data_type' -p34862 -(dp34863 -S'editable' -p34864 -I00 -sS'value' -p34865 -S'multi_entity' -p34866 -ssS'entity_type' -p34867 -(dp34868 -S'editable' -p34869 -I00 -sS'value' -p34870 -S'Shot' -p34871 -ssS'editable' -p34872 -(dp34873 -S'editable' -p34874 -I00 -sS'value' -p34875 -I01 -ssS'unique' -p34876 -(dp34877 -S'editable' -p34878 -I00 -sS'value' -p34879 -I00 -ssS'properties' -p34880 -(dp34881 -S'default_value' -p34882 -(dp34883 -S'editable' -p34884 -I00 -sS'value' -p34885 -NssS'summary_default' -p34886 -(dp34887 -S'editable' -p34888 -I01 -sS'value' -p34889 -S'none' -p34890 -ssS'valid_types' -p34891 -(dp34892 -S'editable' -p34893 -I01 -sS'value' -p34894 -(lp34895 -S'Shot' -p34896 -asssS'description' -p34897 -(dp34898 -S'editable' -p34899 -I01 -sS'value' -p34900 -g47 -sssS'smart_head_duration' -p34901 -(dp34902 -S'mandatory' -p34903 -(dp34904 -S'editable' -p34905 -I00 -sS'value' -p34906 -I00 -ssS'name' -p34907 -(dp34908 -S'editable' -p34909 -I01 -sS'value' -p34910 -S'Head Duration' -p34911 -ssS'data_type' -p34912 -(dp34913 -S'editable' -p34914 -I00 -sS'value' -p34915 -S'number' -p34916 -ssS'entity_type' -p34917 -(dp34918 -S'editable' -p34919 -I00 -sS'value' -p34920 -S'Shot' -p34921 -ssS'editable' -p34922 -(dp34923 -S'editable' -p34924 -I00 -sS'value' -p34925 -I01 -ssS'unique' -p34926 -(dp34927 -S'editable' -p34928 -I00 -sS'value' -p34929 -I00 -ssS'properties' -p34930 -(dp34931 -S'default_value' -p34932 -(dp34933 -S'editable' -p34934 -I00 -sS'value' -p34935 -NssS'summary_default' -p34936 -(dp34937 -S'editable' -p34938 -I01 -sS'value' -p34939 -S'none' -p34940 -sssS'description' -p34941 -(dp34942 -S'editable' -p34943 -I01 -sS'value' -p34944 -g47 -sssS'cut_out' -p34945 -(dp34946 -S'mandatory' -p34947 -(dp34948 -S'editable' -p34949 -I00 -sS'value' -p34950 -I00 -ssS'name' -p34951 -(dp34952 -S'editable' -p34953 -I01 -sS'value' -p34954 -S'Raw Cut Out' -p34955 -ssS'data_type' -p34956 -(dp34957 -S'editable' -p34958 -I00 -sS'value' -p34959 -S'number' -p34960 -ssS'entity_type' -p34961 -(dp34962 -S'editable' -p34963 -I00 -sS'value' -p34964 -S'Shot' -p34965 -ssS'editable' -p34966 -(dp34967 -S'editable' -p34968 -I00 -sS'value' -p34969 -I01 -ssS'unique' -p34970 -(dp34971 -S'editable' -p34972 -I00 -sS'value' -p34973 -I00 -ssS'properties' -p34974 -(dp34975 -S'default_value' -p34976 -(dp34977 -S'editable' -p34978 -I00 -sS'value' -p34979 -NssS'summary_default' -p34980 -(dp34981 -S'editable' -p34982 -I01 -sS'value' -p34983 -S'none' -p34984 -sssS'description' -p34985 -(dp34986 -S'editable' -p34987 -I01 -sS'value' -p34988 -g47 -sssS'head_out' -p34989 -(dp34990 -S'mandatory' -p34991 -(dp34992 -S'editable' -p34993 -I00 -sS'value' -p34994 -I00 -ssS'name' -p34995 -(dp34996 -S'editable' -p34997 -I01 -sS'value' -p34998 -S'Raw Head Out' -p34999 -ssS'data_type' -p35000 -(dp35001 -S'editable' -p35002 -I00 -sS'value' -p35003 -S'number' -p35004 -ssS'entity_type' -p35005 -(dp35006 -S'editable' -p35007 -I00 -sS'value' -p35008 -S'Shot' -p35009 -ssS'editable' -p35010 -(dp35011 -S'editable' -p35012 -I00 -sS'value' -p35013 -I01 -ssS'unique' -p35014 -(dp35015 -S'editable' -p35016 -I00 -sS'value' -p35017 -I00 -ssS'properties' -p35018 -(dp35019 -S'default_value' -p35020 -(dp35021 -S'editable' -p35022 -I00 -sS'value' -p35023 -NssS'summary_default' -p35024 -(dp35025 -S'editable' -p35026 -I01 -sS'value' -p35027 -S'none' -p35028 -sssS'description' -p35029 -(dp35030 -S'editable' -p35031 -I01 -sS'value' -p35032 -g47 -sssS'notes' -p35033 -(dp35034 -S'mandatory' -p35035 -(dp35036 -S'editable' -p35037 -I00 -sS'value' -p35038 -I00 -ssS'name' -p35039 -(dp35040 -S'editable' -p35041 -I01 -sS'value' -p35042 -S'Notes' -p35043 -ssS'data_type' -p35044 -(dp35045 -S'editable' -p35046 -I00 -sS'value' -p35047 -S'multi_entity' -p35048 -ssS'entity_type' -p35049 -(dp35050 -S'editable' -p35051 -I00 -sS'value' -p35052 -S'Shot' -p35053 -ssS'editable' -p35054 -(dp35055 -S'editable' -p35056 -I00 -sS'value' -p35057 -I01 -ssS'unique' -p35058 -(dp35059 -S'editable' -p35060 -I00 -sS'value' -p35061 -I00 -ssS'properties' -p35062 -(dp35063 -S'default_value' -p35064 -(dp35065 -S'editable' -p35066 -I00 -sS'value' -p35067 -NssS'summary_default' -p35068 -(dp35069 -S'editable' -p35070 -I01 -sS'value' -p35071 -S'none' -p35072 -ssS'valid_types' -p35073 -(dp35074 -S'editable' -p35075 -I01 -sS'value' -p35076 -(lp35077 -S'Note' -p35078 -asssS'description' -p35079 -(dp35080 -S'editable' -p35081 -I01 -sS'value' -p35082 -g47 -ssssS'TankPublishedFile' -p35083 -(dp35084 -S'open_notes_count' -p35085 -(dp35086 -S'mandatory' -p35087 -(dp35088 -S'editable' -p35089 -I00 -sS'value' -p35090 -I00 -ssS'name' -p35091 -(dp35092 -S'editable' -p35093 -I01 -sS'value' -p35094 -S'Open Notes Count' -p35095 -ssS'data_type' -p35096 -(dp35097 -S'editable' -p35098 -I00 -sS'value' -p35099 -S'text' -p35100 -ssS'entity_type' -p35101 -(dp35102 -S'editable' -p35103 -I00 -sS'value' -p35104 -S'TankPublishedFile' -p35105 -ssS'editable' -p35106 -(dp35107 -S'editable' -p35108 -I00 -sS'value' -p35109 -I00 -ssS'unique' -p35110 -(dp35111 -S'editable' -p35112 -I00 -sS'value' -p35113 -I00 -ssS'properties' -p35114 -(dp35115 -S'default_value' -p35116 -(dp35117 -S'editable' -p35118 -I00 -sS'value' -p35119 -NssS'summary_default' -p35120 -(dp35121 -S'editable' -p35122 -I01 -sS'value' -p35123 -S'none' -p35124 -sssS'description' -p35125 -(dp35126 -S'editable' -p35127 -I01 -sS'value' -p35128 -g47 -sssS'code' -p35129 -(dp35130 -S'mandatory' -p35131 -(dp35132 -S'editable' -p35133 -I00 -sS'value' -p35134 -I01 -ssS'name' -p35135 -(dp35136 -S'editable' -p35137 -I01 -sS'value' -p35138 -S'Tank Published File Name' -p35139 -ssS'data_type' -p35140 -(dp35141 -S'editable' -p35142 -I00 -sS'value' -p35143 -S'text' -p35144 -ssS'entity_type' -p35145 -(dp35146 -S'editable' -p35147 -I00 -sS'value' -p35148 -S'TankPublishedFile' -p35149 -ssS'editable' -p35150 -(dp35151 -S'editable' -p35152 -I00 -sS'value' -p35153 -I01 -ssS'unique' -p35154 -(dp35155 -S'editable' -p35156 -I00 -sS'value' -p35157 -I00 -ssS'properties' -p35158 -(dp35159 -S'default_value' -p35160 -(dp35161 -S'editable' -p35162 -I00 -sS'value' -p35163 -NssS'summary_default' -p35164 -(dp35165 -S'editable' -p35166 -I01 -sS'value' -p35167 -S'none' -p35168 -sssS'description' -p35169 -(dp35170 -S'editable' -p35171 -I01 -sS'value' -p35172 -g47 -sssS'image' -p35173 -(dp35174 -S'mandatory' -p35175 -(dp35176 -S'editable' -p35177 -I00 -sS'value' -p35178 -I00 -ssS'name' -p35179 -(dp35180 -S'editable' -p35181 -I01 -sS'value' -p35182 -S'Thumbnail' -p35183 -ssS'data_type' -p35184 -(dp35185 -S'editable' -p35186 -I00 -sS'value' -p35187 -S'image' -p35188 -ssS'entity_type' -p35189 -(dp35190 -S'editable' -p35191 -I00 -sS'value' -p35192 -S'TankPublishedFile' -p35193 -ssS'editable' -p35194 -(dp35195 -S'editable' -p35196 -I00 -sS'value' -p35197 -I01 -ssS'unique' -p35198 -(dp35199 -S'editable' -p35200 -I00 -sS'value' -p35201 -I00 -ssS'properties' -p35202 -(dp35203 -S'default_value' -p35204 -(dp35205 -S'editable' -p35206 -I00 -sS'value' -p35207 -NssS'summary_default' -p35208 -(dp35209 -S'editable' -p35210 -I01 -sS'value' -p35211 -S'none' -p35212 -sssS'description' -p35213 -(dp35214 -S'editable' -p35215 -I01 -sS'value' -p35216 -g47 -sssS'updated_at' -p35217 -(dp35218 -S'mandatory' -p35219 -(dp35220 -S'editable' -p35221 -I00 -sS'value' -p35222 -I00 -ssS'name' -p35223 -(dp35224 -S'editable' -p35225 -I01 -sS'value' -p35226 -S'Date Updated' -p35227 -ssS'data_type' -p35228 -(dp35229 -S'editable' -p35230 -I00 -sS'value' -p35231 -S'date_time' -p35232 -ssS'entity_type' -p35233 -(dp35234 -S'editable' -p35235 -I00 -sS'value' -p35236 -S'TankPublishedFile' -p35237 -ssS'editable' -p35238 -(dp35239 -S'editable' -p35240 -I00 -sS'value' -p35241 -I00 -ssS'unique' -p35242 -(dp35243 -S'editable' -p35244 -I00 -sS'value' -p35245 -I00 -ssS'properties' -p35246 -(dp35247 -S'default_value' -p35248 -(dp35249 -S'editable' -p35250 -I00 -sS'value' -p35251 -NssS'summary_default' -p35252 -(dp35253 -S'editable' -p35254 -I01 -sS'value' -p35255 -S'none' -p35256 -sssS'description' -p35257 -(dp35258 -S'editable' -p35259 -I01 -sS'value' -p35260 -g47 -sssS'entity' -p35261 -(dp35262 -S'mandatory' -p35263 -(dp35264 -S'editable' -p35265 -I00 -sS'value' -p35266 -I00 -ssS'name' -p35267 -(dp35268 -S'editable' -p35269 -I01 -sS'value' -p35270 -S'Link' -p35271 -ssS'data_type' -p35272 -(dp35273 -S'editable' -p35274 -I00 -sS'value' -p35275 -S'entity' -p35276 -ssS'entity_type' -p35277 -(dp35278 -S'editable' -p35279 -I00 -sS'value' -p35280 -S'TankPublishedFile' -p35281 -ssS'editable' -p35282 -(dp35283 -S'editable' -p35284 -I00 -sS'value' -p35285 -I00 -ssS'unique' -p35286 -(dp35287 -S'editable' -p35288 -I00 -sS'value' -p35289 -I00 -ssS'properties' -p35290 -(dp35291 -S'default_value' -p35292 -(dp35293 -S'editable' -p35294 -I00 -sS'value' -p35295 -NssS'summary_default' -p35296 -(dp35297 -S'editable' -p35298 -I01 -sS'value' -p35299 -S'none' -p35300 -ssS'valid_types' -p35301 -(dp35302 -S'editable' -p35303 -I01 -sS'value' -p35304 -(lp35305 -S'Asset' -p35306 -aS'Shot' -p35307 -aS'Project' -p35308 -asssS'description' -p35309 -(dp35310 -S'editable' -p35311 -I01 -sS'value' -p35312 -g47 -sssS'cached_display_name' -p35313 -(dp35314 -S'mandatory' -p35315 -(dp35316 -S'editable' -p35317 -I00 -sS'value' -p35318 -I00 -ssS'name' -p35319 -(dp35320 -S'editable' -p35321 -I01 -sS'value' -p35322 -S'Cached Display Name' -p35323 -ssS'data_type' -p35324 -(dp35325 -S'editable' -p35326 -I00 -sS'value' -p35327 -S'text' -p35328 -ssS'entity_type' -p35329 -(dp35330 -S'editable' -p35331 -I00 -sS'value' -p35332 -S'TankPublishedFile' -p35333 -ssS'editable' -p35334 -(dp35335 -S'editable' -p35336 -I00 -sS'value' -p35337 -I01 -ssS'unique' -p35338 -(dp35339 -S'editable' -p35340 -I00 -sS'value' -p35341 -I00 -ssS'properties' -p35342 -(dp35343 -S'default_value' -p35344 -(dp35345 -S'editable' -p35346 -I00 -sS'value' -p35347 -NssS'summary_default' -p35348 -(dp35349 -S'editable' -p35350 -I00 -sS'value' -p35351 -S'none' -p35352 -sssS'description' -p35353 -(dp35354 -S'editable' -p35355 -I01 -sS'value' -p35356 -g47 -sssS'downstream_tank_published_files' -p35357 -(dp35358 -S'mandatory' -p35359 -(dp35360 -S'editable' -p35361 -I00 -sS'value' -p35362 -I00 -ssS'name' -p35363 -(dp35364 -S'editable' -p35365 -I01 -sS'value' -p35366 -S'Downstream Tank Published Files' -p35367 -ssS'data_type' -p35368 -(dp35369 -S'editable' -p35370 -I00 -sS'value' -p35371 -S'multi_entity' -p35372 -ssS'entity_type' -p35373 -(dp35374 -S'editable' -p35375 -I00 -sS'value' -p35376 -S'TankPublishedFile' -p35377 -ssS'editable' -p35378 -(dp35379 -S'editable' -p35380 -I00 -sS'value' -p35381 -I01 -ssS'unique' -p35382 -(dp35383 -S'editable' -p35384 -I00 -sS'value' -p35385 -I00 -ssS'properties' -p35386 -(dp35387 -S'default_value' -p35388 -(dp35389 -S'editable' -p35390 -I00 -sS'value' -p35391 -NssS'summary_default' -p35392 -(dp35393 -S'editable' -p35394 -I00 -sS'value' -p35395 -S'none' -p35396 -ssS'valid_types' -p35397 -(dp35398 -S'editable' -p35399 -I00 -sS'value' -p35400 -(lp35401 -S'TankPublishedFile' -p35402 -asssS'description' -p35403 -(dp35404 -S'editable' -p35405 -I01 -sS'value' -p35406 -g47 -sssS'path_cache' -p35407 -(dp35408 -S'mandatory' -p35409 -(dp35410 -S'editable' -p35411 -I00 -sS'value' -p35412 -I00 -ssS'name' -p35413 -(dp35414 -S'editable' -p35415 -I01 -sS'value' -p35416 -S'Path Cache' -p35417 -ssS'data_type' -p35418 -(dp35419 -S'editable' -p35420 -I00 -sS'value' -p35421 -S'text' -p35422 -ssS'entity_type' -p35423 -(dp35424 -S'editable' -p35425 -I00 -sS'value' -p35426 -S'TankPublishedFile' -p35427 -ssS'editable' -p35428 -(dp35429 -S'editable' -p35430 -I00 -sS'value' -p35431 -I00 -ssS'unique' -p35432 -(dp35433 -S'editable' -p35434 -I00 -sS'value' -p35435 -I00 -ssS'properties' -p35436 -(dp35437 -S'default_value' -p35438 -(dp35439 -S'editable' -p35440 -I00 -sS'value' -p35441 -NssS'summary_default' -p35442 -(dp35443 -S'editable' -p35444 -I01 -sS'value' -p35445 -S'none' -p35446 -sssS'description' -p35447 -(dp35448 -S'editable' -p35449 -I01 -sS'value' -p35450 -g47 -sssS'id' -p35451 -(dp35452 -S'mandatory' -p35453 -(dp35454 -S'editable' -p35455 -I00 -sS'value' -p35456 -I00 -ssS'name' -p35457 -(dp35458 -S'editable' -p35459 -I01 -sS'value' -p35460 -S'Id' -p35461 -ssS'data_type' -p35462 -(dp35463 -S'editable' -p35464 -I00 -sS'value' -p35465 -S'number' -p35466 -ssS'entity_type' -p35467 -(dp35468 -S'editable' -p35469 -I00 -sS'value' -p35470 -S'TankPublishedFile' -p35471 -ssS'editable' -p35472 -(dp35473 -S'editable' -p35474 -I00 -sS'value' -p35475 -I00 -ssS'unique' -p35476 -(dp35477 -S'editable' -p35478 -I00 -sS'value' -p35479 -I00 -ssS'properties' -p35480 -(dp35481 -S'default_value' -p35482 -(dp35483 -S'editable' -p35484 -I00 -sS'value' -p35485 -NssS'summary_default' -p35486 -(dp35487 -S'editable' -p35488 -I01 -sS'value' -p35489 -S'none' -p35490 -sssS'description' -p35491 -(dp35492 -S'editable' -p35493 -I01 -sS'value' -p35494 -g47 -sssS'updated_by' -p35495 -(dp35496 -S'mandatory' -p35497 -(dp35498 -S'editable' -p35499 -I00 -sS'value' -p35500 -I00 -ssS'name' -p35501 -(dp35502 -S'editable' -p35503 -I01 -sS'value' -p35504 -S'Updated by' -p35505 -ssS'data_type' -p35506 -(dp35507 -S'editable' -p35508 -I00 -sS'value' -p35509 -S'entity' -p35510 -ssS'entity_type' -p35511 -(dp35512 -S'editable' -p35513 -I00 -sS'value' -p35514 -S'TankPublishedFile' -p35515 -ssS'editable' -p35516 -(dp35517 -S'editable' -p35518 -I00 -sS'value' -p35519 -I00 -ssS'unique' -p35520 -(dp35521 -S'editable' -p35522 -I00 -sS'value' -p35523 -I00 -ssS'properties' -p35524 -(dp35525 -S'default_value' -p35526 -(dp35527 -S'editable' -p35528 -I00 -sS'value' -p35529 -NssS'summary_default' -p35530 -(dp35531 -S'editable' -p35532 -I01 -sS'value' -p35533 -S'none' -p35534 -ssS'valid_types' -p35535 -(dp35536 -S'editable' -p35537 -I01 -sS'value' -p35538 -(lp35539 -S'HumanUser' -p35540 -aS'ApiUser' -p35541 -asssS'description' -p35542 -(dp35543 -S'editable' -p35544 -I01 -sS'value' -p35545 -g47 -sssS'open_notes' -p35546 -(dp35547 -S'mandatory' -p35548 -(dp35549 -S'editable' -p35550 -I00 -sS'value' -p35551 -I00 -ssS'name' -p35552 -(dp35553 -S'editable' -p35554 -I01 -sS'value' -p35555 -S'Open Notes' -p35556 -ssS'data_type' -p35557 -(dp35558 -S'editable' -p35559 -I00 -sS'value' -p35560 -S'multi_entity' -p35561 -ssS'entity_type' -p35562 -(dp35563 -S'editable' -p35564 -I00 -sS'value' -p35565 -S'TankPublishedFile' -p35566 -ssS'editable' -p35567 -(dp35568 -S'editable' -p35569 -I00 -sS'value' -p35570 -I00 -ssS'unique' -p35571 -(dp35572 -S'editable' -p35573 -I00 -sS'value' -p35574 -I00 -ssS'properties' -p35575 -(dp35576 -S'default_value' -p35577 -(dp35578 -S'editable' -p35579 -I00 -sS'value' -p35580 -NssS'summary_default' -p35581 -(dp35582 -S'editable' -p35583 -I01 -sS'value' -p35584 -S'none' -p35585 -ssS'valid_types' -p35586 -(dp35587 -S'editable' -p35588 -I01 -sS'value' -p35589 -(lp35590 -S'Note' -p35591 -asssS'description' -p35592 -(dp35593 -S'editable' -p35594 -I01 -sS'value' -p35595 -g47 -sssS'upstream_tank_published_files' -p35596 -(dp35597 -S'mandatory' -p35598 -(dp35599 -S'editable' -p35600 -I00 -sS'value' -p35601 -I00 -ssS'name' -p35602 -(dp35603 -S'editable' -p35604 -I01 -sS'value' -p35605 -S'Upstream Tank Published Files' -p35606 -ssS'data_type' -p35607 -(dp35608 -S'editable' -p35609 -I00 -sS'value' -p35610 -S'multi_entity' -p35611 -ssS'entity_type' -p35612 -(dp35613 -S'editable' -p35614 -I00 -sS'value' -p35615 -S'TankPublishedFile' -p35616 -ssS'editable' -p35617 -(dp35618 -S'editable' -p35619 -I00 -sS'value' -p35620 -I01 -ssS'unique' -p35621 -(dp35622 -S'editable' -p35623 -I00 -sS'value' -p35624 -I00 -ssS'properties' -p35625 -(dp35626 -S'default_value' -p35627 -(dp35628 -S'editable' -p35629 -I00 -sS'value' -p35630 -NssS'summary_default' -p35631 -(dp35632 -S'editable' -p35633 -I00 -sS'value' -p35634 -S'none' -p35635 -ssS'valid_types' -p35636 -(dp35637 -S'editable' -p35638 -I00 -sS'value' -p35639 -(lp35640 -S'TankPublishedFile' -p35641 -asssS'description' -p35642 -(dp35643 -S'editable' -p35644 -I01 -sS'value' -p35645 -g47 -sssS'created_by' -p35646 -(dp35647 -S'mandatory' -p35648 -(dp35649 -S'editable' -p35650 -I00 -sS'value' -p35651 -I00 -ssS'name' -p35652 -(dp35653 -S'editable' -p35654 -I01 -sS'value' -p35655 -S'Created by' -p35656 -ssS'data_type' -p35657 -(dp35658 -S'editable' -p35659 -I00 -sS'value' -p35660 -S'entity' -p35661 -ssS'entity_type' -p35662 -(dp35663 -S'editable' -p35664 -I00 -sS'value' -p35665 -S'TankPublishedFile' -p35666 -ssS'editable' -p35667 -(dp35668 -S'editable' -p35669 -I00 -sS'value' -p35670 -I00 -ssS'unique' -p35671 -(dp35672 -S'editable' -p35673 -I00 -sS'value' -p35674 -I00 -ssS'properties' -p35675 -(dp35676 -S'default_value' -p35677 -(dp35678 -S'editable' -p35679 -I00 -sS'value' -p35680 -NssS'summary_default' -p35681 -(dp35682 -S'editable' -p35683 -I01 -sS'value' -p35684 -S'none' -p35685 -ssS'valid_types' -p35686 -(dp35687 -S'editable' -p35688 -I01 -sS'value' -p35689 -(lp35690 -S'HumanUser' -p35691 -aS'ApiUser' -p35692 -asssS'description' -p35693 -(dp35694 -S'editable' -p35695 -I01 -sS'value' -p35696 -g47 -sssS'sg_status_list' -p35697 -(dp35698 -S'mandatory' -p35699 -(dp35700 -S'editable' -p35701 -I00 -sS'value' -p35702 -I00 -ssS'name' -p35703 -(dp35704 -S'editable' -p35705 -I01 -sS'value' -p35706 -S'Status' -p35707 -ssS'data_type' -p35708 -(dp35709 -S'editable' -p35710 -I00 -sS'value' -p35711 -S'status_list' -p35712 -ssS'entity_type' -p35713 -(dp35714 -S'editable' -p35715 -I00 -sS'value' -p35716 -S'TankPublishedFile' -p35717 -ssS'editable' -p35718 -(dp35719 -S'editable' -p35720 -I00 -sS'value' -p35721 -I01 -ssS'unique' -p35722 -(dp35723 -S'editable' -p35724 -I00 -sS'value' -p35725 -I00 -ssS'properties' -p35726 -(dp35727 -S'default_value' -p35728 -(dp35729 -S'editable' -p35730 -I01 -sS'value' -p35731 -S'wtg' -p35732 -ssS'valid_values' -p35733 -(dp35734 -S'editable' -p35735 -I01 -sS'value' -p35736 -(lp35737 -S'wtg' -p35738 -aS'ip' -p35739 -aS'cmpt' -p35740 -assS'summary_default' -p35741 -(dp35742 -S'editable' -p35743 -I01 -sS'value' -p35744 -S'none' -p35745 -sssS'description' -p35746 -(dp35747 -S'editable' -p35748 -I01 -sS'value' -p35749 -g47 -sssS'description' -p35750 -(dp35751 -S'mandatory' -p35752 -(dp35753 -S'editable' -p35754 -I00 -sS'value' -p35755 -I00 -ssS'name' -p35756 -(dp35757 -S'editable' -p35758 -I01 -sS'value' -p35759 -S'Description' -p35760 -ssS'data_type' -p35761 -(dp35762 -S'editable' -p35763 -I00 -sS'value' -p35764 -S'text' -p35765 -ssS'entity_type' -p35766 -(dp35767 -S'editable' -p35768 -I00 -sS'value' -p35769 -S'TankPublishedFile' -p35770 -ssS'editable' -p35771 -(dp35772 -S'editable' -p35773 -I00 -sS'value' -p35774 -I01 -ssS'unique' -p35775 -(dp35776 -S'editable' -p35777 -I00 -sS'value' -p35778 -I00 -ssS'properties' -p35779 -(dp35780 -S'default_value' -p35781 -(dp35782 -S'editable' -p35783 -I00 -sS'value' -p35784 -NssS'summary_default' -p35785 -(dp35786 -S'editable' -p35787 -I01 -sS'value' -p35788 -S'none' -p35789 -sssS'description' -p35790 -(dp35791 -S'editable' -p35792 -I01 -sS'value' -p35793 -g47 -sssS'path_cache_storage' -p35794 -(dp35795 -S'mandatory' -p35796 -(dp35797 -S'editable' -p35798 -I00 -sS'value' -p35799 -I00 -ssS'name' -p35800 -(dp35801 -S'editable' -p35802 -I01 -sS'value' -p35803 -S'Path Cache Storage' -p35804 -ssS'data_type' -p35805 -(dp35806 -S'editable' -p35807 -I00 -sS'value' -p35808 -S'entity' -p35809 -ssS'entity_type' -p35810 -(dp35811 -S'editable' -p35812 -I00 -sS'value' -p35813 -S'TankPublishedFile' -p35814 -ssS'editable' -p35815 -(dp35816 -S'editable' -p35817 -I00 -sS'value' -p35818 -I00 -ssS'unique' -p35819 -(dp35820 -S'editable' -p35821 -I00 -sS'value' -p35822 -I00 -ssS'properties' -p35823 -(dp35824 -S'default_value' -p35825 -(dp35826 -S'editable' -p35827 -I00 -sS'value' -p35828 -NssS'summary_default' -p35829 -(dp35830 -S'editable' -p35831 -I01 -sS'value' -p35832 -S'none' -p35833 -ssS'valid_types' -p35834 -(dp35835 -S'editable' -p35836 -I01 -sS'value' -p35837 -(lp35838 -S'LocalStorage' -p35839 -asssS'description' -p35840 -(dp35841 -S'editable' -p35842 -I01 -sS'value' -p35843 -g47 -sssS'path' -p35844 -(dp35845 -S'mandatory' -p35846 -(dp35847 -S'editable' -p35848 -I00 -sS'value' -p35849 -I00 -ssS'name' -p35850 -(dp35851 -S'editable' -p35852 -I01 -sS'value' -p35853 -S'Path' -p35854 -ssS'data_type' -p35855 -(dp35856 -S'editable' -p35857 -I00 -sS'value' -p35858 -S'url' -p35859 -ssS'entity_type' -p35860 -(dp35861 -S'editable' -p35862 -I00 -sS'value' -p35863 -S'TankPublishedFile' -p35864 -ssS'editable' -p35865 -(dp35866 -S'editable' -p35867 -I00 -sS'value' -p35868 -I00 -ssS'unique' -p35869 -(dp35870 -S'editable' -p35871 -I00 -sS'value' -p35872 -I00 -ssS'properties' -p35873 -(dp35874 -S'default_value' -p35875 -(dp35876 -S'editable' -p35877 -I00 -sS'value' -p35878 -NssS'open_in_new_window' -p35879 -(dp35880 -S'editable' -p35881 -I01 -sS'value' -p35882 -I01 -ssS'summary_default' -p35883 -(dp35884 -S'editable' -p35885 -I01 -sS'value' -p35886 -S'none' -p35887 -sssS'description' -p35888 -(dp35889 -S'editable' -p35890 -I01 -sS'value' -p35891 -g47 -sssS'version_number' -p35892 -(dp35893 -S'mandatory' -p35894 -(dp35895 -S'editable' -p35896 -I00 -sS'value' -p35897 -I00 -ssS'name' -p35898 -(dp35899 -S'editable' -p35900 -I01 -sS'value' -p35901 -S'Version Number' -p35902 -ssS'data_type' -p35903 -(dp35904 -S'editable' -p35905 -I00 -sS'value' -p35906 -S'number' -p35907 -ssS'entity_type' -p35908 -(dp35909 -S'editable' -p35910 -I00 -sS'value' -p35911 -S'TankPublishedFile' -p35912 -ssS'editable' -p35913 -(dp35914 -S'editable' -p35915 -I00 -sS'value' -p35916 -I00 -ssS'unique' -p35917 -(dp35918 -S'editable' -p35919 -I00 -sS'value' -p35920 -I00 -ssS'properties' -p35921 -(dp35922 -S'default_value' -p35923 -(dp35924 -S'editable' -p35925 -I00 -sS'value' -p35926 -NssS'summary_default' -p35927 -(dp35928 -S'editable' -p35929 -I01 -sS'value' -p35930 -S'none' -p35931 -sssS'description' -p35932 -(dp35933 -S'editable' -p35934 -I01 -sS'value' -p35935 -g47 -sssS'task' -p35936 -(dp35937 -S'mandatory' -p35938 -(dp35939 -S'editable' -p35940 -I00 -sS'value' -p35941 -I00 -ssS'name' -p35942 -(dp35943 -S'editable' -p35944 -I01 -sS'value' -p35945 -S'Task' -p35946 -ssS'data_type' -p35947 -(dp35948 -S'editable' -p35949 -I00 -sS'value' -p35950 -S'entity' -p35951 -ssS'entity_type' -p35952 -(dp35953 -S'editable' -p35954 -I00 -sS'value' -p35955 -S'TankPublishedFile' -p35956 -ssS'editable' -p35957 -(dp35958 -S'editable' -p35959 -I00 -sS'value' -p35960 -I00 -ssS'unique' -p35961 -(dp35962 -S'editable' -p35963 -I00 -sS'value' -p35964 -I00 -ssS'properties' -p35965 -(dp35966 -S'default_value' -p35967 -(dp35968 -S'editable' -p35969 -I00 -sS'value' -p35970 -NssS'summary_default' -p35971 -(dp35972 -S'editable' -p35973 -I01 -sS'value' -p35974 -S'none' -p35975 -ssS'valid_types' -p35976 -(dp35977 -S'editable' -p35978 -I01 -sS'value' -p35979 -(lp35980 -S'Task' -p35981 -asssS'description' -p35982 -(dp35983 -S'editable' -p35984 -I01 -sS'value' -p35985 -g47 -sssS'name' -p35986 -(dp35987 -S'mandatory' -p35988 -(dp35989 -S'editable' -p35990 -I00 -sS'value' -p35991 -I00 -ssS'name' -p35992 -(dp35993 -S'editable' -p35994 -I01 -sS'value' -p35995 -S'Name' -p35996 -ssS'data_type' -p35997 -(dp35998 -S'editable' -p35999 -I00 -sS'value' -p36000 -S'text' -p36001 -ssS'entity_type' -p36002 -(dp36003 -S'editable' -p36004 -I00 -sS'value' -p36005 -S'TankPublishedFile' -p36006 -ssS'editable' -p36007 -(dp36008 -S'editable' -p36009 -I00 -sS'value' -p36010 -I00 -ssS'unique' -p36011 -(dp36012 -S'editable' -p36013 -I00 -sS'value' -p36014 -I00 -ssS'properties' -p36015 -(dp36016 -S'default_value' -p36017 -(dp36018 -S'editable' -p36019 -I00 -sS'value' -p36020 -NssS'summary_default' -p36021 -(dp36022 -S'editable' -p36023 -I01 -sS'value' -p36024 -S'none' -p36025 -sssS'description' -p36026 -(dp36027 -S'editable' -p36028 -I01 -sS'value' -p36029 -g47 -sssS'created_at' -p36030 -(dp36031 -S'mandatory' -p36032 -(dp36033 -S'editable' -p36034 -I00 -sS'value' -p36035 -I00 -ssS'name' -p36036 -(dp36037 -S'editable' -p36038 -I01 -sS'value' -p36039 -S'Date Created' -p36040 -ssS'data_type' -p36041 -(dp36042 -S'editable' -p36043 -I00 -sS'value' -p36044 -S'date_time' -p36045 -ssS'entity_type' -p36046 -(dp36047 -S'editable' -p36048 -I00 -sS'value' -p36049 -S'TankPublishedFile' -p36050 -ssS'editable' -p36051 -(dp36052 -S'editable' -p36053 -I00 -sS'value' -p36054 -I00 -ssS'unique' -p36055 -(dp36056 -S'editable' -p36057 -I00 -sS'value' -p36058 -I00 -ssS'properties' -p36059 -(dp36060 -S'default_value' -p36061 -(dp36062 -S'editable' -p36063 -I00 -sS'value' -p36064 -NssS'summary_default' -p36065 -(dp36066 -S'editable' -p36067 -I01 -sS'value' -p36068 -S'none' -p36069 -sssS'description' -p36070 -(dp36071 -S'editable' -p36072 -I01 -sS'value' -p36073 -g47 -sssS'tank_type' -p36074 -(dp36075 -S'mandatory' -p36076 -(dp36077 -S'editable' -p36078 -I00 -sS'value' -p36079 -I00 -ssS'name' -p36080 -(dp36081 -S'editable' -p36082 -I01 -sS'value' -p36083 -S'Tank Type' -p36084 -ssS'data_type' -p36085 -(dp36086 -S'editable' -p36087 -I00 -sS'value' -p36088 -S'entity' -p36089 -ssS'entity_type' -p36090 -(dp36091 -S'editable' -p36092 -I00 -sS'value' -p36093 -S'TankPublishedFile' -p36094 -ssS'editable' -p36095 -(dp36096 -S'editable' -p36097 -I00 -sS'value' -p36098 -I00 -ssS'unique' -p36099 -(dp36100 -S'editable' -p36101 -I00 -sS'value' -p36102 -I00 -ssS'properties' -p36103 -(dp36104 -S'default_value' -p36105 -(dp36106 -S'editable' -p36107 -I00 -sS'value' -p36108 -NssS'summary_default' -p36109 -(dp36110 -S'editable' -p36111 -I01 -sS'value' -p36112 -S'none' -p36113 -ssS'valid_types' -p36114 -(dp36115 -S'editable' -p36116 -I01 -sS'value' -p36117 -(lp36118 -S'TankType' -p36119 -asssS'description' -p36120 -(dp36121 -S'editable' -p36122 -I01 -sS'value' -p36123 -g47 -sssS'project' -p36124 -(dp36125 -S'mandatory' -p36126 -(dp36127 -S'editable' -p36128 -I00 -sS'value' -p36129 -I00 -ssS'name' -p36130 -(dp36131 -S'editable' -p36132 -I01 -sS'value' -p36133 -S'Project' -p36134 -ssS'data_type' -p36135 -(dp36136 -S'editable' -p36137 -I00 -sS'value' -p36138 -S'entity' -p36139 -ssS'entity_type' -p36140 -(dp36141 -S'editable' -p36142 -I00 -sS'value' -p36143 -S'TankPublishedFile' -p36144 -ssS'editable' -p36145 -(dp36146 -S'editable' -p36147 -I00 -sS'value' -p36148 -I01 -ssS'unique' -p36149 -(dp36150 -S'editable' -p36151 -I00 -sS'value' -p36152 -I00 -ssS'properties' -p36153 -(dp36154 -S'default_value' -p36155 -(dp36156 -S'editable' -p36157 -I00 -sS'value' -p36158 -NssS'summary_default' -p36159 -(dp36160 -S'editable' -p36161 -I01 -sS'value' -p36162 -S'none' -p36163 -ssS'valid_types' -p36164 -(dp36165 -S'editable' -p36166 -I01 -sS'value' -p36167 -(lp36168 -S'Project' -p36169 -asssS'description' -p36170 -(dp36171 -S'editable' -p36172 -I01 -sS'value' -p36173 -g47 -sssS'tag_list' -p36174 -(dp36175 -S'mandatory' -p36176 -(dp36177 -S'editable' -p36178 -I00 -sS'value' -p36179 -I00 -ssS'name' -p36180 -(dp36181 -S'editable' -p36182 -I01 -sS'value' -p36183 -S'Tags' -p36184 -ssS'data_type' -p36185 -(dp36186 -S'editable' -p36187 -I00 -sS'value' -p36188 -S'tag_list' -p36189 -ssS'entity_type' -p36190 -(dp36191 -S'editable' -p36192 -I00 -sS'value' -p36193 -S'TankPublishedFile' -p36194 -ssS'editable' -p36195 -(dp36196 -S'editable' -p36197 -I00 -sS'value' -p36198 -I01 -ssS'unique' -p36199 -(dp36200 -S'editable' -p36201 -I00 -sS'value' -p36202 -I00 -ssS'properties' -p36203 -(dp36204 -S'default_value' -p36205 -(dp36206 -S'editable' -p36207 -I00 -sS'value' -p36208 -NssS'summary_default' -p36209 -(dp36210 -S'editable' -p36211 -I01 -sS'value' -p36212 -S'none' -p36213 -ssS'valid_types' -p36214 -(dp36215 -S'editable' -p36216 -I01 -sS'value' -p36217 -(lp36218 -S'Tag' -p36219 -asssS'description' -p36220 -(dp36221 -S'editable' -p36222 -I01 -sS'value' -p36223 -g47 -sssS'notes' -p36224 -(dp36225 -S'mandatory' -p36226 -(dp36227 -S'editable' -p36228 -I00 -sS'value' -p36229 -I00 -ssS'name' -p36230 -(dp36231 -S'editable' -p36232 -I01 -sS'value' -p36233 -S'Notes' -p36234 -ssS'data_type' -p36235 -(dp36236 -S'editable' -p36237 -I00 -sS'value' -p36238 -S'multi_entity' -p36239 -ssS'entity_type' -p36240 -(dp36241 -S'editable' -p36242 -I00 -sS'value' -p36243 -S'TankPublishedFile' -p36244 -ssS'editable' -p36245 -(dp36246 -S'editable' -p36247 -I00 -sS'value' -p36248 -I01 -ssS'unique' -p36249 -(dp36250 -S'editable' -p36251 -I00 -sS'value' -p36252 -I00 -ssS'properties' -p36253 -(dp36254 -S'default_value' -p36255 -(dp36256 -S'editable' -p36257 -I00 -sS'value' -p36258 -NssS'summary_default' -p36259 -(dp36260 -S'editable' -p36261 -I01 -sS'value' -p36262 -S'none' -p36263 -ssS'valid_types' -p36264 -(dp36265 -S'editable' -p36266 -I01 -sS'value' -p36267 -(lp36268 -S'Note' -p36269 -asssS'description' -p36270 -(dp36271 -S'editable' -p36272 -I01 -sS'value' -p36273 -g47 -ssssS'CustomEntity04' -p36274 -(dp36275 -S'open_notes_count' -p36276 -(dp36277 -S'mandatory' -p36278 -(dp36279 -S'editable' -p36280 -I00 -sS'value' -p36281 -I00 -ssS'name' -p36282 -(dp36283 -S'editable' -p36284 -I01 -sS'value' -p36285 -S'Open Notes Count' -p36286 -ssS'data_type' -p36287 -(dp36288 -S'editable' -p36289 -I00 -sS'value' -p36290 -S'text' -p36291 -ssS'entity_type' -p36292 -(dp36293 -S'editable' -p36294 -I00 -sS'value' -p36295 -S'CustomEntity04' -p36296 -ssS'editable' -p36297 -(dp36298 -S'editable' -p36299 -I00 -sS'value' -p36300 -I00 -ssS'unique' -p36301 -(dp36302 -S'editable' -p36303 -I00 -sS'value' -p36304 -I00 -ssS'properties' -p36305 -(dp36306 -S'default_value' -p36307 -(dp36308 -S'editable' -p36309 -I00 -sS'value' -p36310 -NssS'summary_default' -p36311 -(dp36312 -S'editable' -p36313 -I01 -sS'value' -p36314 -S'none' -p36315 -sssS'description' -p36316 -(dp36317 -S'editable' -p36318 -I01 -sS'value' -p36319 -g47 -sssS'code' -p36320 -(dp36321 -S'mandatory' -p36322 -(dp36323 -S'editable' -p36324 -I00 -sS'value' -p36325 -I01 -ssS'name' -p36326 -(dp36327 -S'editable' -p36328 -I01 -sS'value' -p36329 -S'Custom Entity04 Name' -p36330 -ssS'data_type' -p36331 -(dp36332 -S'editable' -p36333 -I00 -sS'value' -p36334 -S'text' -p36335 -ssS'entity_type' -p36336 -(dp36337 -S'editable' -p36338 -I00 -sS'value' -p36339 -S'CustomEntity04' -p36340 -ssS'editable' -p36341 -(dp36342 -S'editable' -p36343 -I00 -sS'value' -p36344 -I01 -ssS'unique' -p36345 -(dp36346 -S'editable' -p36347 -I00 -sS'value' -p36348 -I00 -ssS'properties' -p36349 -(dp36350 -S'default_value' -p36351 -(dp36352 -S'editable' -p36353 -I00 -sS'value' -p36354 -NssS'summary_default' -p36355 -(dp36356 -S'editable' -p36357 -I01 -sS'value' -p36358 -S'none' -p36359 -sssS'description' -p36360 -(dp36361 -S'editable' -p36362 -I01 -sS'value' -p36363 -g47 -sssS'open_notes' -p36364 -(dp36365 -S'mandatory' -p36366 -(dp36367 -S'editable' -p36368 -I00 -sS'value' -p36369 -I00 -ssS'name' -p36370 -(dp36371 -S'editable' -p36372 -I01 -sS'value' -p36373 -S'Open Notes' -p36374 -ssS'data_type' -p36375 -(dp36376 -S'editable' -p36377 -I00 -sS'value' -p36378 -S'multi_entity' -p36379 -ssS'entity_type' -p36380 -(dp36381 -S'editable' -p36382 -I00 -sS'value' -p36383 -S'CustomEntity04' -p36384 -ssS'editable' -p36385 -(dp36386 -S'editable' -p36387 -I00 -sS'value' -p36388 -I00 -ssS'unique' -p36389 -(dp36390 -S'editable' -p36391 -I00 -sS'value' -p36392 -I00 -ssS'properties' -p36393 -(dp36394 -S'default_value' -p36395 -(dp36396 -S'editable' -p36397 -I00 -sS'value' -p36398 -NssS'summary_default' -p36399 -(dp36400 -S'editable' -p36401 -I01 -sS'value' -p36402 -S'none' -p36403 -ssS'valid_types' -p36404 -(dp36405 -S'editable' -p36406 -I01 -sS'value' -p36407 -(lp36408 -S'Note' -p36409 -asssS'description' -p36410 -(dp36411 -S'editable' -p36412 -I01 -sS'value' -p36413 -g47 -sssS'description' -p36414 -(dp36415 -S'mandatory' -p36416 -(dp36417 -S'editable' -p36418 -I00 -sS'value' -p36419 -I00 -ssS'name' -p36420 -(dp36421 -S'editable' -p36422 -I01 -sS'value' -p36423 -S'Description' -p36424 -ssS'data_type' -p36425 -(dp36426 -S'editable' -p36427 -I00 -sS'value' -p36428 -S'text' -p36429 -ssS'entity_type' -p36430 -(dp36431 -S'editable' -p36432 -I00 -sS'value' -p36433 -S'CustomEntity04' -p36434 -ssS'editable' -p36435 -(dp36436 -S'editable' -p36437 -I00 -sS'value' -p36438 -I01 -ssS'unique' -p36439 -(dp36440 -S'editable' -p36441 -I00 -sS'value' -p36442 -I00 -ssS'properties' -p36443 -(dp36444 -S'default_value' -p36445 -(dp36446 -S'editable' -p36447 -I00 -sS'value' -p36448 -NssS'summary_default' -p36449 -(dp36450 -S'editable' -p36451 -I01 -sS'value' -p36452 -S'none' -p36453 -sssS'description' -p36454 -(dp36455 -S'editable' -p36456 -I01 -sS'value' -p36457 -g47 -sssS'created_at' -p36458 -(dp36459 -S'mandatory' -p36460 -(dp36461 -S'editable' -p36462 -I00 -sS'value' -p36463 -I00 -ssS'name' -p36464 -(dp36465 -S'editable' -p36466 -I01 -sS'value' -p36467 -S'Date Created' -p36468 -ssS'data_type' -p36469 -(dp36470 -S'editable' -p36471 -I00 -sS'value' -p36472 -S'date_time' -p36473 -ssS'entity_type' -p36474 -(dp36475 -S'editable' -p36476 -I00 -sS'value' -p36477 -S'CustomEntity04' -p36478 -ssS'editable' -p36479 -(dp36480 -S'editable' -p36481 -I00 -sS'value' -p36482 -I00 -ssS'unique' -p36483 -(dp36484 -S'editable' -p36485 -I00 -sS'value' -p36486 -I00 -ssS'properties' -p36487 -(dp36488 -S'default_value' -p36489 -(dp36490 -S'editable' -p36491 -I00 -sS'value' -p36492 -NssS'summary_default' -p36493 -(dp36494 -S'editable' -p36495 -I01 -sS'value' -p36496 -S'none' -p36497 -sssS'description' -p36498 -(dp36499 -S'editable' -p36500 -I01 -sS'value' -p36501 -g47 -sssS'updated_at' -p36502 -(dp36503 -S'mandatory' -p36504 -(dp36505 -S'editable' -p36506 -I00 -sS'value' -p36507 -I00 -ssS'name' -p36508 -(dp36509 -S'editable' -p36510 -I01 -sS'value' -p36511 -S'Date Updated' -p36512 -ssS'data_type' -p36513 -(dp36514 -S'editable' -p36515 -I00 -sS'value' -p36516 -S'date_time' -p36517 -ssS'entity_type' -p36518 -(dp36519 -S'editable' -p36520 -I00 -sS'value' -p36521 -S'CustomEntity04' -p36522 -ssS'editable' -p36523 -(dp36524 -S'editable' -p36525 -I00 -sS'value' -p36526 -I00 -ssS'unique' -p36527 -(dp36528 -S'editable' -p36529 -I00 -sS'value' -p36530 -I00 -ssS'properties' -p36531 -(dp36532 -S'default_value' -p36533 -(dp36534 -S'editable' -p36535 -I00 -sS'value' -p36536 -NssS'summary_default' -p36537 -(dp36538 -S'editable' -p36539 -I01 -sS'value' -p36540 -S'none' -p36541 -sssS'description' -p36542 -(dp36543 -S'editable' -p36544 -I01 -sS'value' -p36545 -g47 -sssS'created_by' -p36546 -(dp36547 -S'mandatory' -p36548 -(dp36549 -S'editable' -p36550 -I00 -sS'value' -p36551 -I00 -ssS'name' -p36552 -(dp36553 -S'editable' -p36554 -I01 -sS'value' -p36555 -S'Created by' -p36556 -ssS'data_type' -p36557 -(dp36558 -S'editable' -p36559 -I00 -sS'value' -p36560 -S'entity' -p36561 -ssS'entity_type' -p36562 -(dp36563 -S'editable' -p36564 -I00 -sS'value' -p36565 -S'CustomEntity04' -p36566 -ssS'editable' -p36567 -(dp36568 -S'editable' -p36569 -I00 -sS'value' -p36570 -I00 -ssS'unique' -p36571 -(dp36572 -S'editable' -p36573 -I00 -sS'value' -p36574 -I00 -ssS'properties' -p36575 -(dp36576 -S'default_value' -p36577 -(dp36578 -S'editable' -p36579 -I00 -sS'value' -p36580 -NssS'summary_default' -p36581 -(dp36582 -S'editable' -p36583 -I01 -sS'value' -p36584 -S'none' -p36585 -ssS'valid_types' -p36586 -(dp36587 -S'editable' -p36588 -I01 -sS'value' -p36589 -(lp36590 -S'HumanUser' -p36591 -aS'ApiUser' -p36592 -asssS'description' -p36593 -(dp36594 -S'editable' -p36595 -I01 -sS'value' -p36596 -g47 -sssS'id' -p36597 -(dp36598 -S'mandatory' -p36599 -(dp36600 -S'editable' -p36601 -I00 -sS'value' -p36602 -I00 -ssS'name' -p36603 -(dp36604 -S'editable' -p36605 -I01 -sS'value' -p36606 -S'Id' -p36607 -ssS'data_type' -p36608 -(dp36609 -S'editable' -p36610 -I00 -sS'value' -p36611 -S'number' -p36612 -ssS'entity_type' -p36613 -(dp36614 -S'editable' -p36615 -I00 -sS'value' -p36616 -S'CustomEntity04' -p36617 -ssS'editable' -p36618 -(dp36619 -S'editable' -p36620 -I00 -sS'value' -p36621 -I00 -ssS'unique' -p36622 -(dp36623 -S'editable' -p36624 -I00 -sS'value' -p36625 -I00 -ssS'properties' -p36626 -(dp36627 -S'default_value' -p36628 -(dp36629 -S'editable' -p36630 -I00 -sS'value' -p36631 -NssS'summary_default' -p36632 -(dp36633 -S'editable' -p36634 -I01 -sS'value' -p36635 -S'none' -p36636 -sssS'description' -p36637 -(dp36638 -S'editable' -p36639 -I01 -sS'value' -p36640 -g47 -sssS'project' -p36641 -(dp36642 -S'mandatory' -p36643 -(dp36644 -S'editable' -p36645 -I00 -sS'value' -p36646 -I00 -ssS'name' -p36647 -(dp36648 -S'editable' -p36649 -I01 -sS'value' -p36650 -S'Project' -p36651 -ssS'data_type' -p36652 -(dp36653 -S'editable' -p36654 -I00 -sS'value' -p36655 -S'entity' -p36656 -ssS'entity_type' -p36657 -(dp36658 -S'editable' -p36659 -I00 -sS'value' -p36660 -S'CustomEntity04' -p36661 -ssS'editable' -p36662 -(dp36663 -S'editable' -p36664 -I00 -sS'value' -p36665 -I01 -ssS'unique' -p36666 -(dp36667 -S'editable' -p36668 -I00 -sS'value' -p36669 -I00 -ssS'properties' -p36670 -(dp36671 -S'default_value' -p36672 -(dp36673 -S'editable' -p36674 -I00 -sS'value' -p36675 -NssS'summary_default' -p36676 -(dp36677 -S'editable' -p36678 -I01 -sS'value' -p36679 -S'none' -p36680 -ssS'valid_types' -p36681 -(dp36682 -S'editable' -p36683 -I01 -sS'value' -p36684 -(lp36685 -S'Project' -p36686 -asssS'description' -p36687 -(dp36688 -S'editable' -p36689 -I01 -sS'value' -p36690 -g47 -sssS'filmstrip_image' -p36691 -(dp36692 -S'mandatory' -p36693 -(dp36694 -S'editable' -p36695 -I00 -sS'value' -p36696 -I00 -ssS'name' -p36697 -(dp36698 -S'editable' -p36699 -I01 -sS'value' -p36700 -S'Filmstrip Thumbnail' -p36701 -ssS'data_type' -p36702 -(dp36703 -S'editable' -p36704 -I00 -sS'value' -p36705 -S'image' -p36706 -ssS'entity_type' -p36707 -(dp36708 -S'editable' -p36709 -I00 -sS'value' -p36710 -S'CustomEntity04' -p36711 -ssS'editable' -p36712 -(dp36713 -S'editable' -p36714 -I00 -sS'value' -p36715 -I01 -ssS'unique' -p36716 -(dp36717 -S'editable' -p36718 -I00 -sS'value' -p36719 -I00 -ssS'properties' -p36720 -(dp36721 -S'default_value' -p36722 -(dp36723 -S'editable' -p36724 -I00 -sS'value' -p36725 -NssS'summary_default' -p36726 -(dp36727 -S'editable' -p36728 -I01 -sS'value' -p36729 -S'none' -p36730 -sssS'description' -p36731 -(dp36732 -S'editable' -p36733 -I01 -sS'value' -p36734 -g47 -sssS'sg_status_list' -p36735 -(dp36736 -S'mandatory' -p36737 -(dp36738 -S'editable' -p36739 -I00 -sS'value' -p36740 -I00 -ssS'name' -p36741 -(dp36742 -S'editable' -p36743 -I01 -sS'value' -p36744 -S'Status' -p36745 -ssS'data_type' -p36746 -(dp36747 -S'editable' -p36748 -I00 -sS'value' -p36749 -S'status_list' -p36750 -ssS'entity_type' -p36751 -(dp36752 -S'editable' -p36753 -I00 -sS'value' -p36754 -S'CustomEntity04' -p36755 -ssS'editable' -p36756 -(dp36757 -S'editable' -p36758 -I00 -sS'value' -p36759 -I01 -ssS'unique' -p36760 -(dp36761 -S'editable' -p36762 -I00 -sS'value' -p36763 -I00 -ssS'properties' -p36764 -(dp36765 -S'default_value' -p36766 -(dp36767 -S'editable' -p36768 -I01 -sS'value' -p36769 -S'wtg' -p36770 -ssS'valid_values' -p36771 -(dp36772 -S'editable' -p36773 -I01 -sS'value' -p36774 -(lp36775 -S'cmpt' -p36776 -aS'ip' -p36777 -aS'wtg' -p36778 -assS'summary_default' -p36779 -(dp36780 -S'editable' -p36781 -I01 -sS'value' -p36782 -S'none' -p36783 -sssS'description' -p36784 -(dp36785 -S'editable' -p36786 -I01 -sS'value' -p36787 -g47 -sssS'image' -p36788 -(dp36789 -S'mandatory' -p36790 -(dp36791 -S'editable' -p36792 -I00 -sS'value' -p36793 -I00 -ssS'name' -p36794 -(dp36795 -S'editable' -p36796 -I01 -sS'value' -p36797 -S'Thumbnail' -p36798 -ssS'data_type' -p36799 -(dp36800 -S'editable' -p36801 -I00 -sS'value' -p36802 -S'image' -p36803 -ssS'entity_type' -p36804 -(dp36805 -S'editable' -p36806 -I00 -sS'value' -p36807 -S'CustomEntity04' -p36808 -ssS'editable' -p36809 -(dp36810 -S'editable' -p36811 -I00 -sS'value' -p36812 -I01 -ssS'unique' -p36813 -(dp36814 -S'editable' -p36815 -I00 -sS'value' -p36816 -I00 -ssS'properties' -p36817 -(dp36818 -S'default_value' -p36819 -(dp36820 -S'editable' -p36821 -I00 -sS'value' -p36822 -NssS'summary_default' -p36823 -(dp36824 -S'editable' -p36825 -I01 -sS'value' -p36826 -S'none' -p36827 -sssS'description' -p36828 -(dp36829 -S'editable' -p36830 -I01 -sS'value' -p36831 -g47 -sssS'cached_display_name' -p36832 -(dp36833 -S'mandatory' -p36834 -(dp36835 -S'editable' -p36836 -I00 -sS'value' -p36837 -I00 -ssS'name' -p36838 -(dp36839 -S'editable' -p36840 -I01 -sS'value' -p36841 -S'Cached Display Name' -p36842 -ssS'data_type' -p36843 -(dp36844 -S'editable' -p36845 -I00 -sS'value' -p36846 -S'text' -p36847 -ssS'entity_type' -p36848 -(dp36849 -S'editable' -p36850 -I00 -sS'value' -p36851 -S'CustomEntity04' -p36852 -ssS'editable' -p36853 -(dp36854 -S'editable' -p36855 -I00 -sS'value' -p36856 -I01 -ssS'unique' -p36857 -(dp36858 -S'editable' -p36859 -I00 -sS'value' -p36860 -I00 -ssS'properties' -p36861 -(dp36862 -S'default_value' -p36863 -(dp36864 -S'editable' -p36865 -I00 -sS'value' -p36866 -NssS'summary_default' -p36867 -(dp36868 -S'editable' -p36869 -I00 -sS'value' -p36870 -S'none' -p36871 -sssS'description' -p36872 -(dp36873 -S'editable' -p36874 -I01 -sS'value' -p36875 -g47 -sssS'tag_list' -p36876 -(dp36877 -S'mandatory' -p36878 -(dp36879 -S'editable' -p36880 -I00 -sS'value' -p36881 -I00 -ssS'name' -p36882 -(dp36883 -S'editable' -p36884 -I01 -sS'value' -p36885 -S'Tags' -p36886 -ssS'data_type' -p36887 -(dp36888 -S'editable' -p36889 -I00 -sS'value' -p36890 -S'tag_list' -p36891 -ssS'entity_type' -p36892 -(dp36893 -S'editable' -p36894 -I00 -sS'value' -p36895 -S'CustomEntity04' -p36896 -ssS'editable' -p36897 -(dp36898 -S'editable' -p36899 -I00 -sS'value' -p36900 -I01 -ssS'unique' -p36901 -(dp36902 -S'editable' -p36903 -I00 -sS'value' -p36904 -I00 -ssS'properties' -p36905 -(dp36906 -S'default_value' -p36907 -(dp36908 -S'editable' -p36909 -I00 -sS'value' -p36910 -NssS'summary_default' -p36911 -(dp36912 -S'editable' -p36913 -I01 -sS'value' -p36914 -S'none' -p36915 -ssS'valid_types' -p36916 -(dp36917 -S'editable' -p36918 -I01 -sS'value' -p36919 -(lp36920 -S'Tag' -p36921 -asssS'description' -p36922 -(dp36923 -S'editable' -p36924 -I01 -sS'value' -p36925 -g47 -sssS'notes' -p36926 -(dp36927 -S'mandatory' -p36928 -(dp36929 -S'editable' -p36930 -I00 -sS'value' -p36931 -I00 -ssS'name' -p36932 -(dp36933 -S'editable' -p36934 -I01 -sS'value' -p36935 -S'Notes' -p36936 -ssS'data_type' -p36937 -(dp36938 -S'editable' -p36939 -I00 -sS'value' -p36940 -S'multi_entity' -p36941 -ssS'entity_type' -p36942 -(dp36943 -S'editable' -p36944 -I00 -sS'value' -p36945 -S'CustomEntity04' -p36946 -ssS'editable' -p36947 -(dp36948 -S'editable' -p36949 -I00 -sS'value' -p36950 -I01 -ssS'unique' -p36951 -(dp36952 -S'editable' -p36953 -I00 -sS'value' -p36954 -I00 -ssS'properties' -p36955 -(dp36956 -S'default_value' -p36957 -(dp36958 -S'editable' -p36959 -I00 -sS'value' -p36960 -NssS'summary_default' -p36961 -(dp36962 -S'editable' -p36963 -I01 -sS'value' -p36964 -S'none' -p36965 -ssS'valid_types' -p36966 -(dp36967 -S'editable' -p36968 -I01 -sS'value' -p36969 -(lp36970 -S'Note' -p36971 -asssS'description' -p36972 -(dp36973 -S'editable' -p36974 -I01 -sS'value' -p36975 -g47 -sssS'updated_by' -p36976 -(dp36977 -S'mandatory' -p36978 -(dp36979 -S'editable' -p36980 -I00 -sS'value' -p36981 -I00 -ssS'name' -p36982 -(dp36983 -S'editable' -p36984 -I01 -sS'value' -p36985 -S'Updated by' -p36986 -ssS'data_type' -p36987 -(dp36988 -S'editable' -p36989 -I00 -sS'value' -p36990 -S'entity' -p36991 -ssS'entity_type' -p36992 -(dp36993 -S'editable' -p36994 -I00 -sS'value' -p36995 -S'CustomEntity04' -p36996 -ssS'editable' -p36997 -(dp36998 -S'editable' -p36999 -I00 -sS'value' -p37000 -I00 -ssS'unique' -p37001 -(dp37002 -S'editable' -p37003 -I00 -sS'value' -p37004 -I00 -ssS'properties' -p37005 -(dp37006 -S'default_value' -p37007 -(dp37008 -S'editable' -p37009 -I00 -sS'value' -p37010 -NssS'summary_default' -p37011 -(dp37012 -S'editable' -p37013 -I01 -sS'value' -p37014 -S'none' -p37015 -ssS'valid_types' -p37016 -(dp37017 -S'editable' -p37018 -I01 -sS'value' -p37019 -(lp37020 -S'HumanUser' -p37021 -aS'ApiUser' -p37022 -asssS'description' -p37023 -(dp37024 -S'editable' -p37025 -I01 -sS'value' -p37026 -g47 -ssssS'Sequence' -p37027 -(dp37028 -S'sg_sequence_type' -p37029 -(dp37030 -S'mandatory' -p37031 -(dp37032 -S'editable' -p37033 -I00 -sS'value' -p37034 -I00 -ssS'name' -p37035 -(dp37036 -S'editable' -p37037 -I01 -sS'value' -p37038 -S'Type' -p37039 -ssS'data_type' -p37040 -(dp37041 -S'editable' -p37042 -I00 -sS'value' -p37043 -S'list' -p37044 -ssS'entity_type' -p37045 -(dp37046 -S'editable' -p37047 -I00 -sS'value' -p37048 -S'Sequence' -p37049 -ssS'editable' -p37050 -(dp37051 -S'editable' -p37052 -I00 -sS'value' -p37053 -I01 -ssS'unique' -p37054 -(dp37055 -S'editable' -p37056 -I00 -sS'value' -p37057 -I00 -ssS'properties' -p37058 -(dp37059 -S'default_value' -p37060 -(dp37061 -S'editable' -p37062 -I00 -sS'value' -p37063 -NssS'valid_values' -p37064 -(dp37065 -S'editable' -p37066 -I01 -sS'value' -p37067 -(lp37068 -ssS'summary_default' -p37069 -(dp37070 -S'editable' -p37071 -I01 -sS'value' -p37072 -S'none' -p37073 -sssS'description' -p37074 -(dp37075 -S'editable' -p37076 -I01 -sS'value' -p37077 -g47 -sssS'open_notes_count' -p37078 -(dp37079 -S'mandatory' -p37080 -(dp37081 -S'editable' -p37082 -I00 -sS'value' -p37083 -I00 -ssS'name' -p37084 -(dp37085 -S'editable' -p37086 -I01 -sS'value' -p37087 -S'Open Notes Count' -p37088 -ssS'data_type' -p37089 -(dp37090 -S'editable' -p37091 -I00 -sS'value' -p37092 -S'text' -p37093 -ssS'entity_type' -p37094 -(dp37095 -S'editable' -p37096 -I00 -sS'value' -p37097 -S'Sequence' -p37098 -ssS'editable' -p37099 -(dp37100 -S'editable' -p37101 -I00 -sS'value' -p37102 -I00 -ssS'unique' -p37103 -(dp37104 -S'editable' -p37105 -I00 -sS'value' -p37106 -I00 -ssS'properties' -p37107 -(dp37108 -S'default_value' -p37109 -(dp37110 -S'editable' -p37111 -I00 -sS'value' -p37112 -NssS'summary_default' -p37113 -(dp37114 -S'editable' -p37115 -I01 -sS'value' -p37116 -S'none' -p37117 -sssS'description' -p37118 -(dp37119 -S'editable' -p37120 -I01 -sS'value' -p37121 -g47 -sssS'code' -p37122 -(dp37123 -S'mandatory' -p37124 -(dp37125 -S'editable' -p37126 -I00 -sS'value' -p37127 -I01 -ssS'name' -p37128 -(dp37129 -S'editable' -p37130 -I01 -sS'value' -p37131 -S'Sequence Name' -p37132 -ssS'data_type' -p37133 -(dp37134 -S'editable' -p37135 -I00 -sS'value' -p37136 -S'text' -p37137 -ssS'entity_type' -p37138 -(dp37139 -S'editable' -p37140 -I00 -sS'value' -p37141 -S'Sequence' -p37142 -ssS'editable' -p37143 -(dp37144 -S'editable' -p37145 -I00 -sS'value' -p37146 -I01 -ssS'unique' -p37147 -(dp37148 -S'editable' -p37149 -I00 -sS'value' -p37150 -I00 -ssS'properties' -p37151 -(dp37152 -S'default_value' -p37153 -(dp37154 -S'editable' -p37155 -I00 -sS'value' -p37156 -NssS'summary_default' -p37157 -(dp37158 -S'editable' -p37159 -I01 -sS'value' -p37160 -S'none' -p37161 -sssS'description' -p37162 -(dp37163 -S'editable' -p37164 -I01 -sS'value' -p37165 -g47 -sssS'image' -p37166 -(dp37167 -S'mandatory' -p37168 -(dp37169 -S'editable' -p37170 -I00 -sS'value' -p37171 -I00 -ssS'name' -p37172 -(dp37173 -S'editable' -p37174 -I01 -sS'value' -p37175 -S'Thumbnail' -p37176 -ssS'data_type' -p37177 -(dp37178 -S'editable' -p37179 -I00 -sS'value' -p37180 -S'image' -p37181 -ssS'entity_type' -p37182 -(dp37183 -S'editable' -p37184 -I00 -sS'value' -p37185 -S'Sequence' -p37186 -ssS'editable' -p37187 -(dp37188 -S'editable' -p37189 -I00 -sS'value' -p37190 -I01 -ssS'unique' -p37191 -(dp37192 -S'editable' -p37193 -I00 -sS'value' -p37194 -I00 -ssS'properties' -p37195 -(dp37196 -S'default_value' -p37197 -(dp37198 -S'editable' -p37199 -I00 -sS'value' -p37200 -NssS'summary_default' -p37201 -(dp37202 -S'editable' -p37203 -I01 -sS'value' -p37204 -S'none' -p37205 -sssS'description' -p37206 -(dp37207 -S'editable' -p37208 -I01 -sS'value' -p37209 -g47 -sssS'updated_at' -p37210 -(dp37211 -S'mandatory' -p37212 -(dp37213 -S'editable' -p37214 -I00 -sS'value' -p37215 -I00 -ssS'name' -p37216 -(dp37217 -S'editable' -p37218 -I01 -sS'value' -p37219 -S'Date Updated' -p37220 -ssS'data_type' -p37221 -(dp37222 -S'editable' -p37223 -I00 -sS'value' -p37224 -S'date_time' -p37225 -ssS'entity_type' -p37226 -(dp37227 -S'editable' -p37228 -I00 -sS'value' -p37229 -S'Sequence' -p37230 -ssS'editable' -p37231 -(dp37232 -S'editable' -p37233 -I00 -sS'value' -p37234 -I00 -ssS'unique' -p37235 -(dp37236 -S'editable' -p37237 -I00 -sS'value' -p37238 -I00 -ssS'properties' -p37239 -(dp37240 -S'default_value' -p37241 -(dp37242 -S'editable' -p37243 -I00 -sS'value' -p37244 -NssS'summary_default' -p37245 -(dp37246 -S'editable' -p37247 -I01 -sS'value' -p37248 -S'none' -p37249 -sssS'description' -p37250 -(dp37251 -S'editable' -p37252 -I01 -sS'value' -p37253 -g47 -sssS'tasks' -p37254 -(dp37255 -S'mandatory' -p37256 -(dp37257 -S'editable' -p37258 -I00 -sS'value' -p37259 -I00 -ssS'name' -p37260 -(dp37261 -S'editable' -p37262 -I01 -sS'value' -p37263 -S'Tasks' -p37264 -ssS'data_type' -p37265 -(dp37266 -S'editable' -p37267 -I00 -sS'value' -p37268 -S'multi_entity' -p37269 -ssS'entity_type' -p37270 -(dp37271 -S'editable' -p37272 -I00 -sS'value' -p37273 -S'Sequence' -p37274 -ssS'editable' -p37275 -(dp37276 -S'editable' -p37277 -I00 -sS'value' -p37278 -I01 -ssS'unique' -p37279 -(dp37280 -S'editable' -p37281 -I00 -sS'value' -p37282 -I00 -ssS'properties' -p37283 -(dp37284 -S'default_value' -p37285 -(dp37286 -S'editable' -p37287 -I00 -sS'value' -p37288 -NssS'summary_default' -p37289 -(dp37290 -S'editable' -p37291 -I01 -sS'value' -p37292 -S'none' -p37293 -ssS'valid_types' -p37294 -(dp37295 -S'editable' -p37296 -I01 -sS'value' -p37297 -(lp37298 -S'Task' -p37299 -asssS'description' -p37300 -(dp37301 -S'editable' -p37302 -I01 -sS'value' -p37303 -g47 -sssS'cached_display_name' -p37304 -(dp37305 -S'mandatory' -p37306 -(dp37307 -S'editable' -p37308 -I00 -sS'value' -p37309 -I00 -ssS'name' -p37310 -(dp37311 -S'editable' -p37312 -I01 -sS'value' -p37313 -S'Cached Display Name' -p37314 -ssS'data_type' -p37315 -(dp37316 -S'editable' -p37317 -I00 -sS'value' -p37318 -S'text' -p37319 -ssS'entity_type' -p37320 -(dp37321 -S'editable' -p37322 -I00 -sS'value' -p37323 -S'Sequence' -p37324 -ssS'editable' -p37325 -(dp37326 -S'editable' -p37327 -I00 -sS'value' -p37328 -I01 -ssS'unique' -p37329 -(dp37330 -S'editable' -p37331 -I00 -sS'value' -p37332 -I00 -ssS'properties' -p37333 -(dp37334 -S'default_value' -p37335 -(dp37336 -S'editable' -p37337 -I00 -sS'value' -p37338 -NssS'summary_default' -p37339 -(dp37340 -S'editable' -p37341 -I00 -sS'value' -p37342 -S'none' -p37343 -sssS'description' -p37344 -(dp37345 -S'editable' -p37346 -I01 -sS'value' -p37347 -g47 -sssS'id' -p37348 -(dp37349 -S'mandatory' -p37350 -(dp37351 -S'editable' -p37352 -I00 -sS'value' -p37353 -I00 -ssS'name' -p37354 -(dp37355 -S'editable' -p37356 -I01 -sS'value' -p37357 -S'Id' -p37358 -ssS'data_type' -p37359 -(dp37360 -S'editable' -p37361 -I00 -sS'value' -p37362 -S'number' -p37363 -ssS'entity_type' -p37364 -(dp37365 -S'editable' -p37366 -I00 -sS'value' -p37367 -S'Sequence' -p37368 -ssS'editable' -p37369 -(dp37370 -S'editable' -p37371 -I00 -sS'value' -p37372 -I00 -ssS'unique' -p37373 -(dp37374 -S'editable' -p37375 -I00 -sS'value' -p37376 -I00 -ssS'properties' -p37377 -(dp37378 -S'default_value' -p37379 -(dp37380 -S'editable' -p37381 -I00 -sS'value' -p37382 -NssS'summary_default' -p37383 -(dp37384 -S'editable' -p37385 -I01 -sS'value' -p37386 -S'none' -p37387 -sssS'description' -p37388 -(dp37389 -S'editable' -p37390 -I01 -sS'value' -p37391 -g47 -sssS'sg_due_1' -p37392 -(dp37393 -S'mandatory' -p37394 -(dp37395 -S'editable' -p37396 -I00 -sS'value' -p37397 -I00 -ssS'name' -p37398 -(dp37399 -S'editable' -p37400 -I01 -sS'value' -p37401 -S'Due' -p37402 -ssS'data_type' -p37403 -(dp37404 -S'editable' -p37405 -I00 -sS'value' -p37406 -S'date' -p37407 -ssS'entity_type' -p37408 -(dp37409 -S'editable' -p37410 -I00 -sS'value' -p37411 -S'Sequence' -p37412 -ssS'editable' -p37413 -(dp37414 -S'editable' -p37415 -I00 -sS'value' -p37416 -I01 -ssS'unique' -p37417 -(dp37418 -S'editable' -p37419 -I00 -sS'value' -p37420 -I00 -ssS'properties' -p37421 -(dp37422 -S'default_value' -p37423 -(dp37424 -S'editable' -p37425 -I00 -sS'value' -p37426 -NssS'summary_default' -p37427 -(dp37428 -S'editable' -p37429 -I01 -sS'value' -p37430 -S'none' -p37431 -sssS'description' -p37432 -(dp37433 -S'editable' -p37434 -I01 -sS'value' -p37435 -g47 -sssS'open_notes' -p37436 -(dp37437 -S'mandatory' -p37438 -(dp37439 -S'editable' -p37440 -I00 -sS'value' -p37441 -I00 -ssS'name' -p37442 -(dp37443 -S'editable' -p37444 -I01 -sS'value' -p37445 -S'Open Notes' -p37446 -ssS'data_type' -p37447 -(dp37448 -S'editable' -p37449 -I00 -sS'value' -p37450 -S'multi_entity' -p37451 -ssS'entity_type' -p37452 -(dp37453 -S'editable' -p37454 -I00 -sS'value' -p37455 -S'Sequence' -p37456 -ssS'editable' -p37457 -(dp37458 -S'editable' -p37459 -I00 -sS'value' -p37460 -I00 -ssS'unique' -p37461 -(dp37462 -S'editable' -p37463 -I00 -sS'value' -p37464 -I00 -ssS'properties' -p37465 -(dp37466 -S'default_value' -p37467 -(dp37468 -S'editable' -p37469 -I00 -sS'value' -p37470 -NssS'summary_default' -p37471 -(dp37472 -S'editable' -p37473 -I01 -sS'value' -p37474 -S'none' -p37475 -ssS'valid_types' -p37476 -(dp37477 -S'editable' -p37478 -I01 -sS'value' -p37479 -(lp37480 -S'Note' -p37481 -asssS'description' -p37482 -(dp37483 -S'editable' -p37484 -I01 -sS'value' -p37485 -g47 -sssS'description' -p37486 -(dp37487 -S'mandatory' -p37488 -(dp37489 -S'editable' -p37490 -I00 -sS'value' -p37491 -I00 -ssS'name' -p37492 -(dp37493 -S'editable' -p37494 -I01 -sS'value' -p37495 -S'Description' -p37496 -ssS'data_type' -p37497 -(dp37498 -S'editable' -p37499 -I00 -sS'value' -p37500 -S'text' -p37501 -ssS'entity_type' -p37502 -(dp37503 -S'editable' -p37504 -I00 -sS'value' -p37505 -S'Sequence' -p37506 -ssS'editable' -p37507 -(dp37508 -S'editable' -p37509 -I00 -sS'value' -p37510 -I01 -ssS'unique' -p37511 -(dp37512 -S'editable' -p37513 -I00 -sS'value' -p37514 -I00 -ssS'properties' -p37515 -(dp37516 -S'default_value' -p37517 -(dp37518 -S'editable' -p37519 -I00 -sS'value' -p37520 -NssS'summary_default' -p37521 -(dp37522 -S'editable' -p37523 -I01 -sS'value' -p37524 -S'none' -p37525 -sssS'description' -p37526 -(dp37527 -S'editable' -p37528 -I01 -sS'value' -p37529 -g47 -sssS'task_template' -p37530 -(dp37531 -S'mandatory' -p37532 -(dp37533 -S'editable' -p37534 -I00 -sS'value' -p37535 -I00 -ssS'name' -p37536 -(dp37537 -S'editable' -p37538 -I01 -sS'value' -p37539 -S'Task Template' -p37540 -ssS'data_type' -p37541 -(dp37542 -S'editable' -p37543 -I00 -sS'value' -p37544 -S'entity' -p37545 -ssS'entity_type' -p37546 -(dp37547 -S'editable' -p37548 -I00 -sS'value' -p37549 -S'Sequence' -p37550 -ssS'editable' -p37551 -(dp37552 -S'editable' -p37553 -I00 -sS'value' -p37554 -I01 -ssS'unique' -p37555 -(dp37556 -S'editable' -p37557 -I00 -sS'value' -p37558 -I00 -ssS'properties' -p37559 -(dp37560 -S'default_value' -p37561 -(dp37562 -S'editable' -p37563 -I00 -sS'value' -p37564 -NssS'summary_default' -p37565 -(dp37566 -S'editable' -p37567 -I01 -sS'value' -p37568 -S'none' -p37569 -ssS'valid_types' -p37570 -(dp37571 -S'editable' -p37572 -I01 -sS'value' -p37573 -(lp37574 -S'TaskTemplate' -p37575 -asssS'description' -p37576 -(dp37577 -S'editable' -p37578 -I01 -sS'value' -p37579 -g47 -sssS'created_by' -p37580 -(dp37581 -S'mandatory' -p37582 -(dp37583 -S'editable' -p37584 -I00 -sS'value' -p37585 -I00 -ssS'name' -p37586 -(dp37587 -S'editable' -p37588 -I01 -sS'value' -p37589 -S'Created by' -p37590 -ssS'data_type' -p37591 -(dp37592 -S'editable' -p37593 -I00 -sS'value' -p37594 -S'entity' -p37595 -ssS'entity_type' -p37596 -(dp37597 -S'editable' -p37598 -I00 -sS'value' -p37599 -S'Sequence' -p37600 -ssS'editable' -p37601 -(dp37602 -S'editable' -p37603 -I00 -sS'value' -p37604 -I00 -ssS'unique' -p37605 -(dp37606 -S'editable' -p37607 -I00 -sS'value' -p37608 -I00 -ssS'properties' -p37609 -(dp37610 -S'default_value' -p37611 -(dp37612 -S'editable' -p37613 -I00 -sS'value' -p37614 -NssS'summary_default' -p37615 -(dp37616 -S'editable' -p37617 -I01 -sS'value' -p37618 -S'none' -p37619 -ssS'valid_types' -p37620 -(dp37621 -S'editable' -p37622 -I01 -sS'value' -p37623 -(lp37624 -S'HumanUser' -p37625 -aS'ApiUser' -p37626 -asssS'description' -p37627 -(dp37628 -S'editable' -p37629 -I01 -sS'value' -p37630 -g47 -sssS'sg_status_list' -p37631 -(dp37632 -S'mandatory' -p37633 -(dp37634 -S'editable' -p37635 -I00 -sS'value' -p37636 -I00 -ssS'name' -p37637 -(dp37638 -S'editable' -p37639 -I01 -sS'value' -p37640 -S'Status' -p37641 -ssS'data_type' -p37642 -(dp37643 -S'editable' -p37644 -I00 -sS'value' -p37645 -S'status_list' -p37646 -ssS'entity_type' -p37647 -(dp37648 -S'editable' -p37649 -I00 -sS'value' -p37650 -S'Sequence' -p37651 -ssS'editable' -p37652 -(dp37653 -S'editable' -p37654 -I00 -sS'value' -p37655 -I01 -ssS'unique' -p37656 -(dp37657 -S'editable' -p37658 -I00 -sS'value' -p37659 -I00 -ssS'properties' -p37660 -(dp37661 -S'default_value' -p37662 -(dp37663 -S'editable' -p37664 -I01 -sS'value' -p37665 -S'ip' -p37666 -ssS'valid_values' -p37667 -(dp37668 -S'editable' -p37669 -I01 -sS'value' -p37670 -(lp37671 -S'fin' -p37672 -aS'ip' -p37673 -aS'omt' -p37674 -aS'hld' -p37675 -assS'summary_default' -p37676 -(dp37677 -S'editable' -p37678 -I01 -sS'value' -p37679 -S'status_list' -p37680 -sssS'description' -p37681 -(dp37682 -S'editable' -p37683 -I01 -sS'value' -p37684 -g47 -sssS'updated_by' -p37685 -(dp37686 -S'mandatory' -p37687 -(dp37688 -S'editable' -p37689 -I00 -sS'value' -p37690 -I00 -ssS'name' -p37691 -(dp37692 -S'editable' -p37693 -I01 -sS'value' -p37694 -S'Updated by' -p37695 -ssS'data_type' -p37696 -(dp37697 -S'editable' -p37698 -I00 -sS'value' -p37699 -S'entity' -p37700 -ssS'entity_type' -p37701 -(dp37702 -S'editable' -p37703 -I00 -sS'value' -p37704 -S'Sequence' -p37705 -ssS'editable' -p37706 -(dp37707 -S'editable' -p37708 -I00 -sS'value' -p37709 -I00 -ssS'unique' -p37710 -(dp37711 -S'editable' -p37712 -I00 -sS'value' -p37713 -I00 -ssS'properties' -p37714 -(dp37715 -S'default_value' -p37716 -(dp37717 -S'editable' -p37718 -I00 -sS'value' -p37719 -NssS'summary_default' -p37720 -(dp37721 -S'editable' -p37722 -I01 -sS'value' -p37723 -S'none' -p37724 -ssS'valid_types' -p37725 -(dp37726 -S'editable' -p37727 -I01 -sS'value' -p37728 -(lp37729 -S'HumanUser' -p37730 -aS'ApiUser' -p37731 -asssS'description' -p37732 -(dp37733 -S'editable' -p37734 -I01 -sS'value' -p37735 -g47 -sssS'addressings_cc' -p37736 -(dp37737 -S'mandatory' -p37738 -(dp37739 -S'editable' -p37740 -I00 -sS'value' -p37741 -I00 -ssS'name' -p37742 -(dp37743 -S'editable' -p37744 -I01 -sS'value' -p37745 -S'Cc' -p37746 -ssS'data_type' -p37747 -(dp37748 -S'editable' -p37749 -I00 -sS'value' -p37750 -S'multi_entity' -p37751 -ssS'entity_type' -p37752 -(dp37753 -S'editable' -p37754 -I00 -sS'value' -p37755 -S'Sequence' -p37756 -ssS'editable' -p37757 -(dp37758 -S'editable' -p37759 -I00 -sS'value' -p37760 -I01 -ssS'unique' -p37761 -(dp37762 -S'editable' -p37763 -I00 -sS'value' -p37764 -I00 -ssS'properties' -p37765 -(dp37766 -S'default_value' -p37767 -(dp37768 -S'editable' -p37769 -I00 -sS'value' -p37770 -NssS'summary_default' -p37771 -(dp37772 -S'editable' -p37773 -I01 -sS'value' -p37774 -S'none' -p37775 -ssS'valid_types' -p37776 -(dp37777 -S'editable' -p37778 -I01 -sS'value' -p37779 -(lp37780 -S'Group' -p37781 -aS'HumanUser' -p37782 -asssS'description' -p37783 -(dp37784 -S'editable' -p37785 -I01 -sS'value' -p37786 -g47 -sssS'sg_sequencenumber' -p37787 -(dp37788 -S'mandatory' -p37789 -(dp37790 -S'editable' -p37791 -I00 -sS'value' -p37792 -I00 -ssS'name' -p37793 -(dp37794 -S'editable' -p37795 -I01 -sS'value' -p37796 -S'sequencenumber' -p37797 -ssS'data_type' -p37798 -(dp37799 -S'editable' -p37800 -I00 -sS'value' -p37801 -S'text' -p37802 -ssS'entity_type' -p37803 -(dp37804 -S'editable' -p37805 -I00 -sS'value' -p37806 -S'Sequence' -p37807 -ssS'editable' -p37808 -(dp37809 -S'editable' -p37810 -I00 -sS'value' -p37811 -I01 -ssS'unique' -p37812 -(dp37813 -S'editable' -p37814 -I00 -sS'value' -p37815 -I00 -ssS'properties' -p37816 -(dp37817 -S'default_value' -p37818 -(dp37819 -S'editable' -p37820 -I00 -sS'value' -p37821 -NssS'summary_default' -p37822 -(dp37823 -S'editable' -p37824 -I01 -sS'value' -p37825 -S'none' -p37826 -sssS'description' -p37827 -(dp37828 -S'editable' -p37829 -I01 -sS'value' -p37830 -g47 -sssS'step_0' -p37831 -(dp37832 -S'mandatory' -p37833 -(dp37834 -S'editable' -p37835 -I00 -sS'value' -p37836 -I00 -ssS'name' -p37837 -(dp37838 -S'editable' -p37839 -I01 -sS'value' -p37840 -S'ALL TASKS' -p37841 -ssS'data_type' -p37842 -(dp37843 -S'editable' -p37844 -I00 -sS'value' -p37845 -S'pivot_column' -p37846 -ssS'entity_type' -p37847 -(dp37848 -S'editable' -p37849 -I00 -sS'value' -p37850 -S'Sequence' -p37851 -ssS'editable' -p37852 -(dp37853 -S'editable' -p37854 -I00 -sS'value' -p37855 -I00 -ssS'unique' -p37856 -(dp37857 -S'editable' -p37858 -I00 -sS'value' -p37859 -I00 -ssS'properties' -p37860 -(dp37861 -S'default_value' -p37862 -(dp37863 -S'editable' -p37864 -I00 -sS'value' -p37865 -NssS'summary_default' -p37866 -(dp37867 -S'editable' -p37868 -I00 -sS'value' -p37869 -S'none' -p37870 -sssS'description' -p37871 -(dp37872 -S'editable' -p37873 -I01 -sS'value' -p37874 -g47 -sssS'assets' -p37875 -(dp37876 -S'mandatory' -p37877 -(dp37878 -S'editable' -p37879 -I00 -sS'value' -p37880 -I00 -ssS'name' -p37881 -(dp37882 -S'editable' -p37883 -I01 -sS'value' -p37884 -S'Assets' -p37885 -ssS'data_type' -p37886 -(dp37887 -S'editable' -p37888 -I00 -sS'value' -p37889 -S'multi_entity' -p37890 -ssS'entity_type' -p37891 -(dp37892 -S'editable' -p37893 -I00 -sS'value' -p37894 -S'Sequence' -p37895 -ssS'editable' -p37896 -(dp37897 -S'editable' -p37898 -I00 -sS'value' -p37899 -I01 -ssS'unique' -p37900 -(dp37901 -S'editable' -p37902 -I00 -sS'value' -p37903 -I00 -ssS'properties' -p37904 -(dp37905 -S'default_value' -p37906 -(dp37907 -S'editable' -p37908 -I00 -sS'value' -p37909 -NssS'summary_default' -p37910 -(dp37911 -S'editable' -p37912 -I01 -sS'value' -p37913 -S'none' -p37914 -ssS'valid_types' -p37915 -(dp37916 -S'editable' -p37917 -I01 -sS'value' -p37918 -(lp37919 -S'Asset' -p37920 -asssS'description' -p37921 -(dp37922 -S'editable' -p37923 -I01 -sS'value' -p37924 -g47 -sssS'sg_scene' -p37925 -(dp37926 -S'mandatory' -p37927 -(dp37928 -S'editable' -p37929 -I00 -sS'value' -p37930 -I00 -ssS'name' -p37931 -(dp37932 -S'editable' -p37933 -I01 -sS'value' -p37934 -S'Scene' -p37935 -ssS'data_type' -p37936 -(dp37937 -S'editable' -p37938 -I00 -sS'value' -p37939 -S'entity' -p37940 -ssS'entity_type' -p37941 -(dp37942 -S'editable' -p37943 -I00 -sS'value' -p37944 -S'Sequence' -p37945 -ssS'editable' -p37946 -(dp37947 -S'editable' -p37948 -I00 -sS'value' -p37949 -I01 -ssS'unique' -p37950 -(dp37951 -S'editable' -p37952 -I00 -sS'value' -p37953 -I00 -ssS'properties' -p37954 -(dp37955 -S'default_value' -p37956 -(dp37957 -S'editable' -p37958 -I00 -sS'value' -p37959 -NssS'summary_default' -p37960 -(dp37961 -S'editable' -p37962 -I01 -sS'value' -p37963 -S'none' -p37964 -ssS'valid_types' -p37965 -(dp37966 -S'editable' -p37967 -I01 -sS'value' -p37968 -(lp37969 -S'Scene' -p37970 -asssS'description' -p37971 -(dp37972 -S'editable' -p37973 -I01 -sS'value' -p37974 -g47 -sssS'notes' -p37975 -(dp37976 -S'mandatory' -p37977 -(dp37978 -S'editable' -p37979 -I00 -sS'value' -p37980 -I00 -ssS'name' -p37981 -(dp37982 -S'editable' -p37983 -I01 -sS'value' -p37984 -S'Notes' -p37985 -ssS'data_type' -p37986 -(dp37987 -S'editable' -p37988 -I00 -sS'value' -p37989 -S'multi_entity' -p37990 -ssS'entity_type' -p37991 -(dp37992 -S'editable' -p37993 -I00 -sS'value' -p37994 -S'Sequence' -p37995 -ssS'editable' -p37996 -(dp37997 -S'editable' -p37998 -I00 -sS'value' -p37999 -I01 -ssS'unique' -p38000 -(dp38001 -S'editable' -p38002 -I00 -sS'value' -p38003 -I00 -ssS'properties' -p38004 -(dp38005 -S'default_value' -p38006 -(dp38007 -S'editable' -p38008 -I00 -sS'value' -p38009 -NssS'summary_default' -p38010 -(dp38011 -S'editable' -p38012 -I01 -sS'value' -p38013 -S'none' -p38014 -ssS'valid_types' -p38015 -(dp38016 -S'editable' -p38017 -I01 -sS'value' -p38018 -(lp38019 -S'Note' -p38020 -asssS'description' -p38021 -(dp38022 -S'editable' -p38023 -I01 -sS'value' -p38024 -g47 -sssS'project' -p38025 -(dp38026 -S'mandatory' -p38027 -(dp38028 -S'editable' -p38029 -I00 -sS'value' -p38030 -I00 -ssS'name' -p38031 -(dp38032 -S'editable' -p38033 -I01 -sS'value' -p38034 -S'Project' -p38035 -ssS'data_type' -p38036 -(dp38037 -S'editable' -p38038 -I00 -sS'value' -p38039 -S'entity' -p38040 -ssS'entity_type' -p38041 -(dp38042 -S'editable' -p38043 -I00 -sS'value' -p38044 -S'Sequence' -p38045 -ssS'editable' -p38046 -(dp38047 -S'editable' -p38048 -I00 -sS'value' -p38049 -I01 -ssS'unique' -p38050 -(dp38051 -S'editable' -p38052 -I00 -sS'value' -p38053 -I00 -ssS'properties' -p38054 -(dp38055 -S'default_value' -p38056 -(dp38057 -S'editable' -p38058 -I00 -sS'value' -p38059 -NssS'summary_default' -p38060 -(dp38061 -S'editable' -p38062 -I01 -sS'value' -p38063 -S'none' -p38064 -ssS'valid_types' -p38065 -(dp38066 -S'editable' -p38067 -I01 -sS'value' -p38068 -(lp38069 -S'Project' -p38070 -asssS'description' -p38071 -(dp38072 -S'editable' -p38073 -I01 -sS'value' -p38074 -g47 -sssS'filmstrip_image' -p38075 -(dp38076 -S'mandatory' -p38077 -(dp38078 -S'editable' -p38079 -I00 -sS'value' -p38080 -I00 -ssS'name' -p38081 -(dp38082 -S'editable' -p38083 -I01 -sS'value' -p38084 -S'Filmstrip Thumbnail' -p38085 -ssS'data_type' -p38086 -(dp38087 -S'editable' -p38088 -I00 -sS'value' -p38089 -S'image' -p38090 -ssS'entity_type' -p38091 -(dp38092 -S'editable' -p38093 -I00 -sS'value' -p38094 -S'Sequence' -p38095 -ssS'editable' -p38096 -(dp38097 -S'editable' -p38098 -I00 -sS'value' -p38099 -I01 -ssS'unique' -p38100 -(dp38101 -S'editable' -p38102 -I00 -sS'value' -p38103 -I00 -ssS'properties' -p38104 -(dp38105 -S'default_value' -p38106 -(dp38107 -S'editable' -p38108 -I00 -sS'value' -p38109 -NssS'summary_default' -p38110 -(dp38111 -S'editable' -p38112 -I01 -sS'value' -p38113 -S'none' -p38114 -sssS'description' -p38115 -(dp38116 -S'editable' -p38117 -I01 -sS'value' -p38118 -g47 -sssS'sg_assigned_to' -p38119 -(dp38120 -S'mandatory' -p38121 -(dp38122 -S'editable' -p38123 -I00 -sS'value' -p38124 -I00 -ssS'name' -p38125 -(dp38126 -S'editable' -p38127 -I01 -sS'value' -p38128 -S'Assigned To' -p38129 -ssS'data_type' -p38130 -(dp38131 -S'editable' -p38132 -I00 -sS'value' -p38133 -S'entity' -p38134 -ssS'entity_type' -p38135 -(dp38136 -S'editable' -p38137 -I00 -sS'value' -p38138 -S'Sequence' -p38139 -ssS'editable' -p38140 -(dp38141 -S'editable' -p38142 -I00 -sS'value' -p38143 -I01 -ssS'unique' -p38144 -(dp38145 -S'editable' -p38146 -I00 -sS'value' -p38147 -I00 -ssS'properties' -p38148 -(dp38149 -S'default_value' -p38150 -(dp38151 -S'editable' -p38152 -I00 -sS'value' -p38153 -NssS'summary_default' -p38154 -(dp38155 -S'editable' -p38156 -I01 -sS'value' -p38157 -S'none' -p38158 -ssS'valid_types' -p38159 -(dp38160 -S'editable' -p38161 -I01 -sS'value' -p38162 -(lp38163 -S'HumanUser' -p38164 -asssS'description' -p38165 -(dp38166 -S'editable' -p38167 -I01 -sS'value' -p38168 -g47 -sssS'shots' -p38169 -(dp38170 -S'mandatory' -p38171 -(dp38172 -S'editable' -p38173 -I00 -sS'value' -p38174 -I00 -ssS'name' -p38175 -(dp38176 -S'editable' -p38177 -I01 -sS'value' -p38178 -S'Shots' -p38179 -ssS'data_type' -p38180 -(dp38181 -S'editable' -p38182 -I00 -sS'value' -p38183 -S'multi_entity' -p38184 -ssS'entity_type' -p38185 -(dp38186 -S'editable' -p38187 -I00 -sS'value' -p38188 -S'Sequence' -p38189 -ssS'editable' -p38190 -(dp38191 -S'editable' -p38192 -I00 -sS'value' -p38193 -I01 -ssS'unique' -p38194 -(dp38195 -S'editable' -p38196 -I00 -sS'value' -p38197 -I00 -ssS'properties' -p38198 -(dp38199 -S'default_value' -p38200 -(dp38201 -S'editable' -p38202 -I00 -sS'value' -p38203 -NssS'summary_default' -p38204 -(dp38205 -S'editable' -p38206 -I01 -sS'value' -p38207 -S'none' -p38208 -ssS'valid_types' -p38209 -(dp38210 -S'editable' -p38211 -I01 -sS'value' -p38212 -(lp38213 -S'Shot' -p38214 -asssS'description' -p38215 -(dp38216 -S'editable' -p38217 -I01 -sS'value' -p38218 -g47 -sssS'tag_list' -p38219 -(dp38220 -S'mandatory' -p38221 -(dp38222 -S'editable' -p38223 -I00 -sS'value' -p38224 -I00 -ssS'name' -p38225 -(dp38226 -S'editable' -p38227 -I01 -sS'value' -p38228 -S'Tags' -p38229 -ssS'data_type' -p38230 -(dp38231 -S'editable' -p38232 -I00 -sS'value' -p38233 -S'tag_list' -p38234 -ssS'entity_type' -p38235 -(dp38236 -S'editable' -p38237 -I00 -sS'value' -p38238 -S'Sequence' -p38239 -ssS'editable' -p38240 -(dp38241 -S'editable' -p38242 -I00 -sS'value' -p38243 -I01 -ssS'unique' -p38244 -(dp38245 -S'editable' -p38246 -I00 -sS'value' -p38247 -I00 -ssS'properties' -p38248 -(dp38249 -S'default_value' -p38250 -(dp38251 -S'editable' -p38252 -I00 -sS'value' -p38253 -NssS'summary_default' -p38254 -(dp38255 -S'editable' -p38256 -I01 -sS'value' -p38257 -S'none' -p38258 -ssS'valid_types' -p38259 -(dp38260 -S'editable' -p38261 -I01 -sS'value' -p38262 -(lp38263 -S'Tag' -p38264 -asssS'description' -p38265 -(dp38266 -S'editable' -p38267 -I01 -sS'value' -p38268 -g47 -sssS'created_at' -p38269 -(dp38270 -S'mandatory' -p38271 -(dp38272 -S'editable' -p38273 -I00 -sS'value' -p38274 -I00 -ssS'name' -p38275 -(dp38276 -S'editable' -p38277 -I01 -sS'value' -p38278 -S'Date Created' -p38279 -ssS'data_type' -p38280 -(dp38281 -S'editable' -p38282 -I00 -sS'value' -p38283 -S'date_time' -p38284 -ssS'entity_type' -p38285 -(dp38286 -S'editable' -p38287 -I00 -sS'value' -p38288 -S'Sequence' -p38289 -ssS'editable' -p38290 -(dp38291 -S'editable' -p38292 -I00 -sS'value' -p38293 -I00 -ssS'unique' -p38294 -(dp38295 -S'editable' -p38296 -I00 -sS'value' -p38297 -I00 -ssS'properties' -p38298 -(dp38299 -S'default_value' -p38300 -(dp38301 -S'editable' -p38302 -I00 -sS'value' -p38303 -NssS'summary_default' -p38304 -(dp38305 -S'editable' -p38306 -I01 -sS'value' -p38307 -S'none' -p38308 -sssS'description' -p38309 -(dp38310 -S'editable' -p38311 -I01 -sS'value' -p38312 -g47 -ssssS'BannerUserConnection' -p38313 -(dp38314 -S'cached_display_name' -p38315 -(dp38316 -S'mandatory' -p38317 -(dp38318 -S'editable' -p38319 -I00 -sS'value' -p38320 -I00 -ssS'name' -p38321 -(dp38322 -S'editable' -p38323 -I01 -sS'value' -p38324 -S'Cached Display Name' -p38325 -ssS'data_type' -p38326 -(dp38327 -S'editable' -p38328 -I00 -sS'value' -p38329 -S'text' -p38330 -ssS'entity_type' -p38331 -(dp38332 -S'editable' -p38333 -I00 -sS'value' -p38334 -S'BannerUserConnection' -p38335 -ssS'editable' -p38336 -(dp38337 -S'editable' -p38338 -I00 -sS'value' -p38339 -I01 -ssS'unique' -p38340 -(dp38341 -S'editable' -p38342 -I00 -sS'value' -p38343 -I00 -ssS'properties' -p38344 -(dp38345 -S'default_value' -p38346 -(dp38347 -S'editable' -p38348 -I00 -sS'value' -p38349 -NssS'summary_default' -p38350 -(dp38351 -S'editable' -p38352 -I00 -sS'value' -p38353 -S'none' -p38354 -sssS'description' -p38355 -(dp38356 -S'editable' -p38357 -I01 -sS'value' -p38358 -g47 -sssS'banner' -p38359 -(dp38360 -S'mandatory' -p38361 -(dp38362 -S'editable' -p38363 -I00 -sS'value' -p38364 -I00 -ssS'name' -p38365 -(dp38366 -S'editable' -p38367 -I01 -sS'value' -p38368 -S'Banner' -p38369 -ssS'data_type' -p38370 -(dp38371 -S'editable' -p38372 -I00 -sS'value' -p38373 -S'entity' -p38374 -ssS'entity_type' -p38375 -(dp38376 -S'editable' -p38377 -I00 -sS'value' -p38378 -S'BannerUserConnection' -p38379 -ssS'editable' -p38380 -(dp38381 -S'editable' -p38382 -I00 -sS'value' -p38383 -I01 -ssS'unique' -p38384 -(dp38385 -S'editable' -p38386 -I00 -sS'value' -p38387 -I00 -ssS'properties' -p38388 -(dp38389 -S'default_value' -p38390 -(dp38391 -S'editable' -p38392 -I00 -sS'value' -p38393 -NssS'summary_default' -p38394 -(dp38395 -S'editable' -p38396 -I00 -sS'value' -p38397 -S'none' -p38398 -ssS'valid_types' -p38399 -(dp38400 -S'editable' -p38401 -I00 -sS'value' -p38402 -(lp38403 -S'Banner' -p38404 -asssS'description' -p38405 -(dp38406 -S'editable' -p38407 -I01 -sS'value' -p38408 -g47 -sssS'id' -p38409 -(dp38410 -S'mandatory' -p38411 -(dp38412 -S'editable' -p38413 -I00 -sS'value' -p38414 -I00 -ssS'name' -p38415 -(dp38416 -S'editable' -p38417 -I01 -sS'value' -p38418 -S'Id' -p38419 -ssS'data_type' -p38420 -(dp38421 -S'editable' -p38422 -I00 -sS'value' -p38423 -S'number' -p38424 -ssS'entity_type' -p38425 -(dp38426 -S'editable' -p38427 -I00 -sS'value' -p38428 -S'BannerUserConnection' -p38429 -ssS'editable' -p38430 -(dp38431 -S'editable' -p38432 -I00 -sS'value' -p38433 -I00 -ssS'unique' -p38434 -(dp38435 -S'editable' -p38436 -I00 -sS'value' -p38437 -I00 -ssS'properties' -p38438 -(dp38439 -S'default_value' -p38440 -(dp38441 -S'editable' -p38442 -I00 -sS'value' -p38443 -NssS'summary_default' -p38444 -(dp38445 -S'editable' -p38446 -I00 -sS'value' -p38447 -S'none' -p38448 -sssS'description' -p38449 -(dp38450 -S'editable' -p38451 -I01 -sS'value' -p38452 -g47 -sssS'user' -p38453 -(dp38454 -S'mandatory' -p38455 -(dp38456 -S'editable' -p38457 -I00 -sS'value' -p38458 -I00 -ssS'name' -p38459 -(dp38460 -S'editable' -p38461 -I01 -sS'value' -p38462 -S'User' -p38463 -ssS'data_type' -p38464 -(dp38465 -S'editable' -p38466 -I00 -sS'value' -p38467 -S'entity' -p38468 -ssS'entity_type' -p38469 -(dp38470 -S'editable' -p38471 -I00 -sS'value' -p38472 -S'BannerUserConnection' -p38473 -ssS'editable' -p38474 -(dp38475 -S'editable' -p38476 -I00 -sS'value' -p38477 -I01 -ssS'unique' -p38478 -(dp38479 -S'editable' -p38480 -I00 -sS'value' -p38481 -I00 -ssS'properties' -p38482 -(dp38483 -S'default_value' -p38484 -(dp38485 -S'editable' -p38486 -I00 -sS'value' -p38487 -NssS'summary_default' -p38488 -(dp38489 -S'editable' -p38490 -I00 -sS'value' -p38491 -S'none' -p38492 -ssS'valid_types' -p38493 -(dp38494 -S'editable' -p38495 -I00 -sS'value' -p38496 -(lp38497 -S'HumanUser' -p38498 -asssS'description' -p38499 -(dp38500 -S'editable' -p38501 -I01 -sS'value' -p38502 -g47 -ssssS'AssetAssetConnection' -p38503 -(dp38504 -S'cached_display_name' -p38505 -(dp38506 -S'mandatory' -p38507 -(dp38508 -S'editable' -p38509 -I00 -sS'value' -p38510 -I00 -ssS'name' -p38511 -(dp38512 -S'editable' -p38513 -I01 -sS'value' -p38514 -S'Cached Display Name' -p38515 -ssS'data_type' -p38516 -(dp38517 -S'editable' -p38518 -I00 -sS'value' -p38519 -S'text' -p38520 -ssS'entity_type' -p38521 -(dp38522 -S'editable' -p38523 -I00 -sS'value' -p38524 -S'AssetAssetConnection' -p38525 -ssS'editable' -p38526 -(dp38527 -S'editable' -p38528 -I00 -sS'value' -p38529 -I01 -ssS'unique' -p38530 -(dp38531 -S'editable' -p38532 -I00 -sS'value' -p38533 -I00 -ssS'properties' -p38534 -(dp38535 -S'default_value' -p38536 -(dp38537 -S'editable' -p38538 -I00 -sS'value' -p38539 -NssS'summary_default' -p38540 -(dp38541 -S'editable' -p38542 -I00 -sS'value' -p38543 -S'none' -p38544 -sssS'description' -p38545 -(dp38546 -S'editable' -p38547 -I01 -sS'value' -p38548 -g47 -sssS'asset' -p38549 -(dp38550 -S'mandatory' -p38551 -(dp38552 -S'editable' -p38553 -I00 -sS'value' -p38554 -I00 -ssS'name' -p38555 -(dp38556 -S'editable' -p38557 -I01 -sS'value' -p38558 -S'Asset' -p38559 -ssS'data_type' -p38560 -(dp38561 -S'editable' -p38562 -I00 -sS'value' -p38563 -S'entity' -p38564 -ssS'entity_type' -p38565 -(dp38566 -S'editable' -p38567 -I00 -sS'value' -p38568 -S'AssetAssetConnection' -p38569 -ssS'editable' -p38570 -(dp38571 -S'editable' -p38572 -I00 -sS'value' -p38573 -I00 -ssS'unique' -p38574 -(dp38575 -S'editable' -p38576 -I00 -sS'value' -p38577 -I00 -ssS'properties' -p38578 -(dp38579 -S'default_value' -p38580 -(dp38581 -S'editable' -p38582 -I00 -sS'value' -p38583 -NssS'summary_default' -p38584 -(dp38585 -S'editable' -p38586 -I00 -sS'value' -p38587 -S'none' -p38588 -ssS'valid_types' -p38589 -(dp38590 -S'editable' -p38591 -I00 -sS'value' -p38592 -(lp38593 -S'Asset' -p38594 -asssS'description' -p38595 -(dp38596 -S'editable' -p38597 -I01 -sS'value' -p38598 -g47 -sssS'parent' -p38599 -(dp38600 -S'mandatory' -p38601 -(dp38602 -S'editable' -p38603 -I00 -sS'value' -p38604 -I00 -ssS'name' -p38605 -(dp38606 -S'editable' -p38607 -I01 -sS'value' -p38608 -S'Asset' -p38609 -ssS'data_type' -p38610 -(dp38611 -S'editable' -p38612 -I00 -sS'value' -p38613 -S'entity' -p38614 -ssS'entity_type' -p38615 -(dp38616 -S'editable' -p38617 -I00 -sS'value' -p38618 -S'AssetAssetConnection' -p38619 -ssS'editable' -p38620 -(dp38621 -S'editable' -p38622 -I00 -sS'value' -p38623 -I00 -ssS'unique' -p38624 -(dp38625 -S'editable' -p38626 -I00 -sS'value' -p38627 -I00 -ssS'properties' -p38628 -(dp38629 -S'default_value' -p38630 -(dp38631 -S'editable' -p38632 -I00 -sS'value' -p38633 -NssS'summary_default' -p38634 -(dp38635 -S'editable' -p38636 -I00 -sS'value' -p38637 -S'none' -p38638 -ssS'valid_types' -p38639 -(dp38640 -S'editable' -p38641 -I00 -sS'value' -p38642 -(lp38643 -S'Asset' -p38644 -asssS'description' -p38645 -(dp38646 -S'editable' -p38647 -I01 -sS'value' -p38648 -g47 -sssS'id' -p38649 -(dp38650 -S'mandatory' -p38651 -(dp38652 -S'editable' -p38653 -I00 -sS'value' -p38654 -I01 -ssS'name' -p38655 -(dp38656 -S'editable' -p38657 -I01 -sS'value' -p38658 -S'Id' -p38659 -ssS'data_type' -p38660 -(dp38661 -S'editable' -p38662 -I00 -sS'value' -p38663 -S'number' -p38664 -ssS'entity_type' -p38665 -(dp38666 -S'editable' -p38667 -I00 -sS'value' -p38668 -S'AssetAssetConnection' -p38669 -ssS'editable' -p38670 -(dp38671 -S'editable' -p38672 -I00 -sS'value' -p38673 -I00 -ssS'unique' -p38674 -(dp38675 -S'editable' -p38676 -I00 -sS'value' -p38677 -I00 -ssS'properties' -p38678 -(dp38679 -S'default_value' -p38680 -(dp38681 -S'editable' -p38682 -I00 -sS'value' -p38683 -NssS'summary_default' -p38684 -(dp38685 -S'editable' -p38686 -I00 -sS'value' -p38687 -S'none' -p38688 -sssS'description' -p38689 -(dp38690 -S'editable' -p38691 -I01 -sS'value' -p38692 -g47 -ssssS'Scene' -p38693 -(dp38694 -S'open_notes_count' -p38695 -(dp38696 -S'mandatory' -p38697 -(dp38698 -S'editable' -p38699 -I00 -sS'value' -p38700 -I00 -ssS'name' -p38701 -(dp38702 -S'editable' -p38703 -I01 -sS'value' -p38704 -S'Open Notes Count' -p38705 -ssS'data_type' -p38706 -(dp38707 -S'editable' -p38708 -I00 -sS'value' -p38709 -S'text' -p38710 -ssS'entity_type' -p38711 -(dp38712 -S'editable' -p38713 -I00 -sS'value' -p38714 -S'Scene' -p38715 -ssS'editable' -p38716 -(dp38717 -S'editable' -p38718 -I00 -sS'value' -p38719 -I00 -ssS'unique' -p38720 -(dp38721 -S'editable' -p38722 -I00 -sS'value' -p38723 -I00 -ssS'properties' -p38724 -(dp38725 -S'default_value' -p38726 -(dp38727 -S'editable' -p38728 -I00 -sS'value' -p38729 -NssS'summary_default' -p38730 -(dp38731 -S'editable' -p38732 -I01 -sS'value' -p38733 -S'none' -p38734 -sssS'description' -p38735 -(dp38736 -S'editable' -p38737 -I01 -sS'value' -p38738 -g47 -sssS'code' -p38739 -(dp38740 -S'mandatory' -p38741 -(dp38742 -S'editable' -p38743 -I00 -sS'value' -p38744 -I01 -ssS'name' -p38745 -(dp38746 -S'editable' -p38747 -I01 -sS'value' -p38748 -S'Scene Code' -p38749 -ssS'data_type' -p38750 -(dp38751 -S'editable' -p38752 -I00 -sS'value' -p38753 -S'text' -p38754 -ssS'entity_type' -p38755 -(dp38756 -S'editable' -p38757 -I00 -sS'value' -p38758 -S'Scene' -p38759 -ssS'editable' -p38760 -(dp38761 -S'editable' -p38762 -I00 -sS'value' -p38763 -I01 -ssS'unique' -p38764 -(dp38765 -S'editable' -p38766 -I00 -sS'value' -p38767 -I00 -ssS'properties' -p38768 -(dp38769 -S'default_value' -p38770 -(dp38771 -S'editable' -p38772 -I00 -sS'value' -p38773 -NssS'summary_default' -p38774 -(dp38775 -S'editable' -p38776 -I01 -sS'value' -p38777 -S'none' -p38778 -sssS'description' -p38779 -(dp38780 -S'editable' -p38781 -I01 -sS'value' -p38782 -g47 -sssS'image' -p38783 -(dp38784 -S'mandatory' -p38785 -(dp38786 -S'editable' -p38787 -I00 -sS'value' -p38788 -I00 -ssS'name' -p38789 -(dp38790 -S'editable' -p38791 -I01 -sS'value' -p38792 -S'Thumbnail' -p38793 -ssS'data_type' -p38794 -(dp38795 -S'editable' -p38796 -I00 -sS'value' -p38797 -S'image' -p38798 -ssS'entity_type' -p38799 -(dp38800 -S'editable' -p38801 -I00 -sS'value' -p38802 -S'Scene' -p38803 -ssS'editable' -p38804 -(dp38805 -S'editable' -p38806 -I00 -sS'value' -p38807 -I01 -ssS'unique' -p38808 -(dp38809 -S'editable' -p38810 -I00 -sS'value' -p38811 -I00 -ssS'properties' -p38812 -(dp38813 -S'default_value' -p38814 -(dp38815 -S'editable' -p38816 -I00 -sS'value' -p38817 -NssS'summary_default' -p38818 -(dp38819 -S'editable' -p38820 -I01 -sS'value' -p38821 -S'none' -p38822 -sssS'description' -p38823 -(dp38824 -S'editable' -p38825 -I01 -sS'value' -p38826 -g47 -sssS'updated_at' -p38827 -(dp38828 -S'mandatory' -p38829 -(dp38830 -S'editable' -p38831 -I00 -sS'value' -p38832 -I00 -ssS'name' -p38833 -(dp38834 -S'editable' -p38835 -I01 -sS'value' -p38836 -S'Date Updated' -p38837 -ssS'data_type' -p38838 -(dp38839 -S'editable' -p38840 -I00 -sS'value' -p38841 -S'date_time' -p38842 -ssS'entity_type' -p38843 -(dp38844 -S'editable' -p38845 -I00 -sS'value' -p38846 -S'Scene' -p38847 -ssS'editable' -p38848 -(dp38849 -S'editable' -p38850 -I00 -sS'value' -p38851 -I00 -ssS'unique' -p38852 -(dp38853 -S'editable' -p38854 -I00 -sS'value' -p38855 -I00 -ssS'properties' -p38856 -(dp38857 -S'default_value' -p38858 -(dp38859 -S'editable' -p38860 -I00 -sS'value' -p38861 -NssS'summary_default' -p38862 -(dp38863 -S'editable' -p38864 -I01 -sS'value' -p38865 -S'none' -p38866 -sssS'description' -p38867 -(dp38868 -S'editable' -p38869 -I01 -sS'value' -p38870 -g47 -sssS'tasks' -p38871 -(dp38872 -S'mandatory' -p38873 -(dp38874 -S'editable' -p38875 -I00 -sS'value' -p38876 -I00 -ssS'name' -p38877 -(dp38878 -S'editable' -p38879 -I01 -sS'value' -p38880 -S'Tasks' -p38881 -ssS'data_type' -p38882 -(dp38883 -S'editable' -p38884 -I00 -sS'value' -p38885 -S'multi_entity' -p38886 -ssS'entity_type' -p38887 -(dp38888 -S'editable' -p38889 -I00 -sS'value' -p38890 -S'Scene' -p38891 -ssS'editable' -p38892 -(dp38893 -S'editable' -p38894 -I00 -sS'value' -p38895 -I01 -ssS'unique' -p38896 -(dp38897 -S'editable' -p38898 -I00 -sS'value' -p38899 -I00 -ssS'properties' -p38900 -(dp38901 -S'default_value' -p38902 -(dp38903 -S'editable' -p38904 -I00 -sS'value' -p38905 -NssS'summary_default' -p38906 -(dp38907 -S'editable' -p38908 -I01 -sS'value' -p38909 -S'none' -p38910 -ssS'valid_types' -p38911 -(dp38912 -S'editable' -p38913 -I01 -sS'value' -p38914 -(lp38915 -S'Task' -p38916 -asssS'description' -p38917 -(dp38918 -S'editable' -p38919 -I01 -sS'value' -p38920 -g47 -sssS'cached_display_name' -p38921 -(dp38922 -S'mandatory' -p38923 -(dp38924 -S'editable' -p38925 -I00 -sS'value' -p38926 -I00 -ssS'name' -p38927 -(dp38928 -S'editable' -p38929 -I01 -sS'value' -p38930 -S'Cached Display Name' -p38931 -ssS'data_type' -p38932 -(dp38933 -S'editable' -p38934 -I00 -sS'value' -p38935 -S'text' -p38936 -ssS'entity_type' -p38937 -(dp38938 -S'editable' -p38939 -I00 -sS'value' -p38940 -S'Scene' -p38941 -ssS'editable' -p38942 -(dp38943 -S'editable' -p38944 -I00 -sS'value' -p38945 -I01 -ssS'unique' -p38946 -(dp38947 -S'editable' -p38948 -I00 -sS'value' -p38949 -I00 -ssS'properties' -p38950 -(dp38951 -S'default_value' -p38952 -(dp38953 -S'editable' -p38954 -I00 -sS'value' -p38955 -NssS'summary_default' -p38956 -(dp38957 -S'editable' -p38958 -I00 -sS'value' -p38959 -S'none' -p38960 -sssS'description' -p38961 -(dp38962 -S'editable' -p38963 -I01 -sS'value' -p38964 -g47 -sssS'id' -p38965 -(dp38966 -S'mandatory' -p38967 -(dp38968 -S'editable' -p38969 -I00 -sS'value' -p38970 -I00 -ssS'name' -p38971 -(dp38972 -S'editable' -p38973 -I01 -sS'value' -p38974 -S'Id' -p38975 -ssS'data_type' -p38976 -(dp38977 -S'editable' -p38978 -I00 -sS'value' -p38979 -S'number' -p38980 -ssS'entity_type' -p38981 -(dp38982 -S'editable' -p38983 -I00 -sS'value' -p38984 -S'Scene' -p38985 -ssS'editable' -p38986 -(dp38987 -S'editable' -p38988 -I00 -sS'value' -p38989 -I00 -ssS'unique' -p38990 -(dp38991 -S'editable' -p38992 -I00 -sS'value' -p38993 -I00 -ssS'properties' -p38994 -(dp38995 -S'default_value' -p38996 -(dp38997 -S'editable' -p38998 -I00 -sS'value' -p38999 -NssS'summary_default' -p39000 -(dp39001 -S'editable' -p39002 -I01 -sS'value' -p39003 -S'none' -p39004 -sssS'description' -p39005 -(dp39006 -S'editable' -p39007 -I01 -sS'value' -p39008 -g47 -sssS'updated_by' -p39009 -(dp39010 -S'mandatory' -p39011 -(dp39012 -S'editable' -p39013 -I00 -sS'value' -p39014 -I00 -ssS'name' -p39015 -(dp39016 -S'editable' -p39017 -I01 -sS'value' -p39018 -S'Updated by' -p39019 -ssS'data_type' -p39020 -(dp39021 -S'editable' -p39022 -I00 -sS'value' -p39023 -S'entity' -p39024 -ssS'entity_type' -p39025 -(dp39026 -S'editable' -p39027 -I00 -sS'value' -p39028 -S'Scene' -p39029 -ssS'editable' -p39030 -(dp39031 -S'editable' -p39032 -I00 -sS'value' -p39033 -I00 -ssS'unique' -p39034 -(dp39035 -S'editable' -p39036 -I00 -sS'value' -p39037 -I00 -ssS'properties' -p39038 -(dp39039 -S'default_value' -p39040 -(dp39041 -S'editable' -p39042 -I00 -sS'value' -p39043 -NssS'summary_default' -p39044 -(dp39045 -S'editable' -p39046 -I01 -sS'value' -p39047 -S'none' -p39048 -ssS'valid_types' -p39049 -(dp39050 -S'editable' -p39051 -I01 -sS'value' -p39052 -(lp39053 -S'HumanUser' -p39054 -aS'ApiUser' -p39055 -asssS'description' -p39056 -(dp39057 -S'editable' -p39058 -I01 -sS'value' -p39059 -g47 -sssS'open_notes' -p39060 -(dp39061 -S'mandatory' -p39062 -(dp39063 -S'editable' -p39064 -I00 -sS'value' -p39065 -I00 -ssS'name' -p39066 -(dp39067 -S'editable' -p39068 -I01 -sS'value' -p39069 -S'Open Notes' -p39070 -ssS'data_type' -p39071 -(dp39072 -S'editable' -p39073 -I00 -sS'value' -p39074 -S'multi_entity' -p39075 -ssS'entity_type' -p39076 -(dp39077 -S'editable' -p39078 -I00 -sS'value' -p39079 -S'Scene' -p39080 -ssS'editable' -p39081 -(dp39082 -S'editable' -p39083 -I00 -sS'value' -p39084 -I00 -ssS'unique' -p39085 -(dp39086 -S'editable' -p39087 -I00 -sS'value' -p39088 -I00 -ssS'properties' -p39089 -(dp39090 -S'default_value' -p39091 -(dp39092 -S'editable' -p39093 -I00 -sS'value' -p39094 -NssS'summary_default' -p39095 -(dp39096 -S'editable' -p39097 -I01 -sS'value' -p39098 -S'none' -p39099 -ssS'valid_types' -p39100 -(dp39101 -S'editable' -p39102 -I01 -sS'value' -p39103 -(lp39104 -S'Note' -p39105 -asssS'description' -p39106 -(dp39107 -S'editable' -p39108 -I01 -sS'value' -p39109 -g47 -sssS'task_template' -p39110 -(dp39111 -S'mandatory' -p39112 -(dp39113 -S'editable' -p39114 -I00 -sS'value' -p39115 -I00 -ssS'name' -p39116 -(dp39117 -S'editable' -p39118 -I01 -sS'value' -p39119 -S'Task Template' -p39120 -ssS'data_type' -p39121 -(dp39122 -S'editable' -p39123 -I00 -sS'value' -p39124 -S'entity' -p39125 -ssS'entity_type' -p39126 -(dp39127 -S'editable' -p39128 -I00 -sS'value' -p39129 -S'Scene' -p39130 -ssS'editable' -p39131 -(dp39132 -S'editable' -p39133 -I00 -sS'value' -p39134 -I01 -ssS'unique' -p39135 -(dp39136 -S'editable' -p39137 -I00 -sS'value' -p39138 -I00 -ssS'properties' -p39139 -(dp39140 -S'default_value' -p39141 -(dp39142 -S'editable' -p39143 -I00 -sS'value' -p39144 -NssS'summary_default' -p39145 -(dp39146 -S'editable' -p39147 -I01 -sS'value' -p39148 -S'none' -p39149 -ssS'valid_types' -p39150 -(dp39151 -S'editable' -p39152 -I01 -sS'value' -p39153 -(lp39154 -S'TaskTemplate' -p39155 -asssS'description' -p39156 -(dp39157 -S'editable' -p39158 -I01 -sS'value' -p39159 -g47 -sssS'created_by' -p39160 -(dp39161 -S'mandatory' -p39162 -(dp39163 -S'editable' -p39164 -I00 -sS'value' -p39165 -I00 -ssS'name' -p39166 -(dp39167 -S'editable' -p39168 -I01 -sS'value' -p39169 -S'Created by' -p39170 -ssS'data_type' -p39171 -(dp39172 -S'editable' -p39173 -I00 -sS'value' -p39174 -S'entity' -p39175 -ssS'entity_type' -p39176 -(dp39177 -S'editable' -p39178 -I00 -sS'value' -p39179 -S'Scene' -p39180 -ssS'editable' -p39181 -(dp39182 -S'editable' -p39183 -I00 -sS'value' -p39184 -I00 -ssS'unique' -p39185 -(dp39186 -S'editable' -p39187 -I00 -sS'value' -p39188 -I00 -ssS'properties' -p39189 -(dp39190 -S'default_value' -p39191 -(dp39192 -S'editable' -p39193 -I00 -sS'value' -p39194 -NssS'summary_default' -p39195 -(dp39196 -S'editable' -p39197 -I01 -sS'value' -p39198 -S'none' -p39199 -ssS'valid_types' -p39200 -(dp39201 -S'editable' -p39202 -I01 -sS'value' -p39203 -(lp39204 -S'HumanUser' -p39205 -aS'ApiUser' -p39206 -asssS'description' -p39207 -(dp39208 -S'editable' -p39209 -I01 -sS'value' -p39210 -g47 -sssS'sg_status_list' -p39211 -(dp39212 -S'mandatory' -p39213 -(dp39214 -S'editable' -p39215 -I00 -sS'value' -p39216 -I00 -ssS'name' -p39217 -(dp39218 -S'editable' -p39219 -I01 -sS'value' -p39220 -S'Status' -p39221 -ssS'data_type' -p39222 -(dp39223 -S'editable' -p39224 -I00 -sS'value' -p39225 -S'status_list' -p39226 -ssS'entity_type' -p39227 -(dp39228 -S'editable' -p39229 -I00 -sS'value' -p39230 -S'Scene' -p39231 -ssS'editable' -p39232 -(dp39233 -S'editable' -p39234 -I00 -sS'value' -p39235 -I01 -ssS'unique' -p39236 -(dp39237 -S'editable' -p39238 -I00 -sS'value' -p39239 -I00 -ssS'properties' -p39240 -(dp39241 -S'default_value' -p39242 -(dp39243 -S'editable' -p39244 -I01 -sS'value' -p39245 -S'act' -p39246 -ssS'valid_values' -p39247 -(dp39248 -S'editable' -p39249 -I01 -sS'value' -p39250 -(lp39251 -S'act' -p39252 -aS'cbb' -p39253 -aS'cmpt' -p39254 -aS'omt' -p39255 -aS'hld' -p39256 -assS'summary_default' -p39257 -(dp39258 -S'editable' -p39259 -I01 -sS'value' -p39260 -S'status_list' -p39261 -sssS'description' -p39262 -(dp39263 -S'editable' -p39264 -I01 -sS'value' -p39265 -g47 -sssS'description' -p39266 -(dp39267 -S'mandatory' -p39268 -(dp39269 -S'editable' -p39270 -I00 -sS'value' -p39271 -I00 -ssS'name' -p39272 -(dp39273 -S'editable' -p39274 -I01 -sS'value' -p39275 -S'Description' -p39276 -ssS'data_type' -p39277 -(dp39278 -S'editable' -p39279 -I00 -sS'value' -p39280 -S'text' -p39281 -ssS'entity_type' -p39282 -(dp39283 -S'editable' -p39284 -I00 -sS'value' -p39285 -S'Scene' -p39286 -ssS'editable' -p39287 -(dp39288 -S'editable' -p39289 -I00 -sS'value' -p39290 -I01 -ssS'unique' -p39291 -(dp39292 -S'editable' -p39293 -I00 -sS'value' -p39294 -I00 -ssS'properties' -p39295 -(dp39296 -S'default_value' -p39297 -(dp39298 -S'editable' -p39299 -I00 -sS'value' -p39300 -NssS'summary_default' -p39301 -(dp39302 -S'editable' -p39303 -I01 -sS'value' -p39304 -S'none' -p39305 -sssS'description' -p39306 -(dp39307 -S'editable' -p39308 -I01 -sS'value' -p39309 -g47 -sssS'addressings_cc' -p39310 -(dp39311 -S'mandatory' -p39312 -(dp39313 -S'editable' -p39314 -I00 -sS'value' -p39315 -I00 -ssS'name' -p39316 -(dp39317 -S'editable' -p39318 -I01 -sS'value' -p39319 -S'Cc' -p39320 -ssS'data_type' -p39321 -(dp39322 -S'editable' -p39323 -I00 -sS'value' -p39324 -S'multi_entity' -p39325 -ssS'entity_type' -p39326 -(dp39327 -S'editable' -p39328 -I00 -sS'value' -p39329 -S'Scene' -p39330 -ssS'editable' -p39331 -(dp39332 -S'editable' -p39333 -I00 -sS'value' -p39334 -I01 -ssS'unique' -p39335 -(dp39336 -S'editable' -p39337 -I00 -sS'value' -p39338 -I00 -ssS'properties' -p39339 -(dp39340 -S'default_value' -p39341 -(dp39342 -S'editable' -p39343 -I00 -sS'value' -p39344 -NssS'summary_default' -p39345 -(dp39346 -S'editable' -p39347 -I01 -sS'value' -p39348 -S'none' -p39349 -ssS'valid_types' -p39350 -(dp39351 -S'editable' -p39352 -I01 -sS'value' -p39353 -(lp39354 -S'Group' -p39355 -aS'HumanUser' -p39356 -asssS'description' -p39357 -(dp39358 -S'editable' -p39359 -I01 -sS'value' -p39360 -g47 -sssS'sg_scene_type' -p39361 -(dp39362 -S'mandatory' -p39363 -(dp39364 -S'editable' -p39365 -I00 -sS'value' -p39366 -I00 -ssS'name' -p39367 -(dp39368 -S'editable' -p39369 -I01 -sS'value' -p39370 -S'Type' -p39371 -ssS'data_type' -p39372 -(dp39373 -S'editable' -p39374 -I00 -sS'value' -p39375 -S'list' -p39376 -ssS'entity_type' -p39377 -(dp39378 -S'editable' -p39379 -I00 -sS'value' -p39380 -S'Scene' -p39381 -ssS'editable' -p39382 -(dp39383 -S'editable' -p39384 -I00 -sS'value' -p39385 -I01 -ssS'unique' -p39386 -(dp39387 -S'editable' -p39388 -I00 -sS'value' -p39389 -I00 -ssS'properties' -p39390 -(dp39391 -S'default_value' -p39392 -(dp39393 -S'editable' -p39394 -I00 -sS'value' -p39395 -NssS'valid_values' -p39396 -(dp39397 -S'editable' -p39398 -I01 -sS'value' -p39399 -(lp39400 -ssS'summary_default' -p39401 -(dp39402 -S'editable' -p39403 -I01 -sS'value' -p39404 -S'none' -p39405 -sssS'description' -p39406 -(dp39407 -S'editable' -p39408 -I01 -sS'value' -p39409 -g47 -sssS'shoot_days' -p39410 -(dp39411 -S'mandatory' -p39412 -(dp39413 -S'editable' -p39414 -I00 -sS'value' -p39415 -I00 -ssS'name' -p39416 -(dp39417 -S'editable' -p39418 -I01 -sS'value' -p39419 -S'Shoot Days' -p39420 -ssS'data_type' -p39421 -(dp39422 -S'editable' -p39423 -I00 -sS'value' -p39424 -S'multi_entity' -p39425 -ssS'entity_type' -p39426 -(dp39427 -S'editable' -p39428 -I00 -sS'value' -p39429 -S'Scene' -p39430 -ssS'editable' -p39431 -(dp39432 -S'editable' -p39433 -I00 -sS'value' -p39434 -I01 -ssS'unique' -p39435 -(dp39436 -S'editable' -p39437 -I00 -sS'value' -p39438 -I00 -ssS'properties' -p39439 -(dp39440 -S'default_value' -p39441 -(dp39442 -S'editable' -p39443 -I00 -sS'value' -p39444 -NssS'summary_default' -p39445 -(dp39446 -S'editable' -p39447 -I01 -sS'value' -p39448 -S'none' -p39449 -ssS'valid_types' -p39450 -(dp39451 -S'editable' -p39452 -I01 -sS'value' -p39453 -(lp39454 -S'ShootDay' -p39455 -asssS'description' -p39456 -(dp39457 -S'editable' -p39458 -I01 -sS'value' -p39459 -g47 -sssS'step_0' -p39460 -(dp39461 -S'mandatory' -p39462 -(dp39463 -S'editable' -p39464 -I00 -sS'value' -p39465 -I00 -ssS'name' -p39466 -(dp39467 -S'editable' -p39468 -I01 -sS'value' -p39469 -S'ALL TASKS' -p39470 -ssS'data_type' -p39471 -(dp39472 -S'editable' -p39473 -I00 -sS'value' -p39474 -S'pivot_column' -p39475 -ssS'entity_type' -p39476 -(dp39477 -S'editable' -p39478 -I00 -sS'value' -p39479 -S'Scene' -p39480 -ssS'editable' -p39481 -(dp39482 -S'editable' -p39483 -I00 -sS'value' -p39484 -I00 -ssS'unique' -p39485 -(dp39486 -S'editable' -p39487 -I00 -sS'value' -p39488 -I00 -ssS'properties' -p39489 -(dp39490 -S'default_value' -p39491 -(dp39492 -S'editable' -p39493 -I00 -sS'value' -p39494 -NssS'summary_default' -p39495 -(dp39496 -S'editable' -p39497 -I00 -sS'value' -p39498 -S'none' -p39499 -sssS'description' -p39500 -(dp39501 -S'editable' -p39502 -I01 -sS'value' -p39503 -g47 -sssS'assets' -p39504 -(dp39505 -S'mandatory' -p39506 -(dp39507 -S'editable' -p39508 -I00 -sS'value' -p39509 -I00 -ssS'name' -p39510 -(dp39511 -S'editable' -p39512 -I01 -sS'value' -p39513 -S'Assets' -p39514 -ssS'data_type' -p39515 -(dp39516 -S'editable' -p39517 -I00 -sS'value' -p39518 -S'multi_entity' -p39519 -ssS'entity_type' -p39520 -(dp39521 -S'editable' -p39522 -I00 -sS'value' -p39523 -S'Scene' -p39524 -ssS'editable' -p39525 -(dp39526 -S'editable' -p39527 -I00 -sS'value' -p39528 -I01 -ssS'unique' -p39529 -(dp39530 -S'editable' -p39531 -I00 -sS'value' -p39532 -I00 -ssS'properties' -p39533 -(dp39534 -S'default_value' -p39535 -(dp39536 -S'editable' -p39537 -I00 -sS'value' -p39538 -NssS'summary_default' -p39539 -(dp39540 -S'editable' -p39541 -I01 -sS'value' -p39542 -S'none' -p39543 -ssS'valid_types' -p39544 -(dp39545 -S'editable' -p39546 -I01 -sS'value' -p39547 -(lp39548 -S'Asset' -p39549 -asssS'description' -p39550 -(dp39551 -S'editable' -p39552 -I01 -sS'value' -p39553 -g47 -sssS'created_at' -p39554 -(dp39555 -S'mandatory' -p39556 -(dp39557 -S'editable' -p39558 -I00 -sS'value' -p39559 -I00 -ssS'name' -p39560 -(dp39561 -S'editable' -p39562 -I01 -sS'value' -p39563 -S'Date Created' -p39564 -ssS'data_type' -p39565 -(dp39566 -S'editable' -p39567 -I00 -sS'value' -p39568 -S'date_time' -p39569 -ssS'entity_type' -p39570 -(dp39571 -S'editable' -p39572 -I00 -sS'value' -p39573 -S'Scene' -p39574 -ssS'editable' -p39575 -(dp39576 -S'editable' -p39577 -I00 -sS'value' -p39578 -I00 -ssS'unique' -p39579 -(dp39580 -S'editable' -p39581 -I00 -sS'value' -p39582 -I00 -ssS'properties' -p39583 -(dp39584 -S'default_value' -p39585 -(dp39586 -S'editable' -p39587 -I00 -sS'value' -p39588 -NssS'summary_default' -p39589 -(dp39590 -S'editable' -p39591 -I01 -sS'value' -p39592 -S'none' -p39593 -sssS'description' -p39594 -(dp39595 -S'editable' -p39596 -I01 -sS'value' -p39597 -g47 -sssS'project' -p39598 -(dp39599 -S'mandatory' -p39600 -(dp39601 -S'editable' -p39602 -I00 -sS'value' -p39603 -I00 -ssS'name' -p39604 -(dp39605 -S'editable' -p39606 -I01 -sS'value' -p39607 -S'Project' -p39608 -ssS'data_type' -p39609 -(dp39610 -S'editable' -p39611 -I00 -sS'value' -p39612 -S'entity' -p39613 -ssS'entity_type' -p39614 -(dp39615 -S'editable' -p39616 -I00 -sS'value' -p39617 -S'Scene' -p39618 -ssS'editable' -p39619 -(dp39620 -S'editable' -p39621 -I00 -sS'value' -p39622 -I01 -ssS'unique' -p39623 -(dp39624 -S'editable' -p39625 -I00 -sS'value' -p39626 -I00 -ssS'properties' -p39627 -(dp39628 -S'default_value' -p39629 -(dp39630 -S'editable' -p39631 -I00 -sS'value' -p39632 -NssS'summary_default' -p39633 -(dp39634 -S'editable' -p39635 -I01 -sS'value' -p39636 -S'none' -p39637 -ssS'valid_types' -p39638 -(dp39639 -S'editable' -p39640 -I01 -sS'value' -p39641 -(lp39642 -S'Project' -p39643 -asssS'description' -p39644 -(dp39645 -S'editable' -p39646 -I01 -sS'value' -p39647 -g47 -sssS'filmstrip_image' -p39648 -(dp39649 -S'mandatory' -p39650 -(dp39651 -S'editable' -p39652 -I00 -sS'value' -p39653 -I00 -ssS'name' -p39654 -(dp39655 -S'editable' -p39656 -I01 -sS'value' -p39657 -S'Filmstrip Thumbnail' -p39658 -ssS'data_type' -p39659 -(dp39660 -S'editable' -p39661 -I00 -sS'value' -p39662 -S'image' -p39663 -ssS'entity_type' -p39664 -(dp39665 -S'editable' -p39666 -I00 -sS'value' -p39667 -S'Scene' -p39668 -ssS'editable' -p39669 -(dp39670 -S'editable' -p39671 -I00 -sS'value' -p39672 -I01 -ssS'unique' -p39673 -(dp39674 -S'editable' -p39675 -I00 -sS'value' -p39676 -I00 -ssS'properties' -p39677 -(dp39678 -S'default_value' -p39679 -(dp39680 -S'editable' -p39681 -I00 -sS'value' -p39682 -NssS'summary_default' -p39683 -(dp39684 -S'editable' -p39685 -I01 -sS'value' -p39686 -S'none' -p39687 -sssS'description' -p39688 -(dp39689 -S'editable' -p39690 -I01 -sS'value' -p39691 -g47 -sssS'shots' -p39692 -(dp39693 -S'mandatory' -p39694 -(dp39695 -S'editable' -p39696 -I00 -sS'value' -p39697 -I00 -ssS'name' -p39698 -(dp39699 -S'editable' -p39700 -I01 -sS'value' -p39701 -S'Shots' -p39702 -ssS'data_type' -p39703 -(dp39704 -S'editable' -p39705 -I00 -sS'value' -p39706 -S'multi_entity' -p39707 -ssS'entity_type' -p39708 -(dp39709 -S'editable' -p39710 -I00 -sS'value' -p39711 -S'Scene' -p39712 -ssS'editable' -p39713 -(dp39714 -S'editable' -p39715 -I00 -sS'value' -p39716 -I01 -ssS'unique' -p39717 -(dp39718 -S'editable' -p39719 -I00 -sS'value' -p39720 -I00 -ssS'properties' -p39721 -(dp39722 -S'default_value' -p39723 -(dp39724 -S'editable' -p39725 -I00 -sS'value' -p39726 -NssS'summary_default' -p39727 -(dp39728 -S'editable' -p39729 -I01 -sS'value' -p39730 -S'none' -p39731 -ssS'valid_types' -p39732 -(dp39733 -S'editable' -p39734 -I01 -sS'value' -p39735 -(lp39736 -S'Shot' -p39737 -asssS'description' -p39738 -(dp39739 -S'editable' -p39740 -I01 -sS'value' -p39741 -g47 -sssS'tag_list' -p39742 -(dp39743 -S'mandatory' -p39744 -(dp39745 -S'editable' -p39746 -I00 -sS'value' -p39747 -I00 -ssS'name' -p39748 -(dp39749 -S'editable' -p39750 -I01 -sS'value' -p39751 -S'Tags' -p39752 -ssS'data_type' -p39753 -(dp39754 -S'editable' -p39755 -I00 -sS'value' -p39756 -S'tag_list' -p39757 -ssS'entity_type' -p39758 -(dp39759 -S'editable' -p39760 -I00 -sS'value' -p39761 -S'Scene' -p39762 -ssS'editable' -p39763 -(dp39764 -S'editable' -p39765 -I00 -sS'value' -p39766 -I01 -ssS'unique' -p39767 -(dp39768 -S'editable' -p39769 -I00 -sS'value' -p39770 -I00 -ssS'properties' -p39771 -(dp39772 -S'default_value' -p39773 -(dp39774 -S'editable' -p39775 -I00 -sS'value' -p39776 -NssS'summary_default' -p39777 -(dp39778 -S'editable' -p39779 -I01 -sS'value' -p39780 -S'none' -p39781 -ssS'valid_types' -p39782 -(dp39783 -S'editable' -p39784 -I01 -sS'value' -p39785 -(lp39786 -S'Tag' -p39787 -asssS'description' -p39788 -(dp39789 -S'editable' -p39790 -I01 -sS'value' -p39791 -g47 -sssS'notes' -p39792 -(dp39793 -S'mandatory' -p39794 -(dp39795 -S'editable' -p39796 -I00 -sS'value' -p39797 -I00 -ssS'name' -p39798 -(dp39799 -S'editable' -p39800 -I01 -sS'value' -p39801 -S'Notes' -p39802 -ssS'data_type' -p39803 -(dp39804 -S'editable' -p39805 -I00 -sS'value' -p39806 -S'multi_entity' -p39807 -ssS'entity_type' -p39808 -(dp39809 -S'editable' -p39810 -I00 -sS'value' -p39811 -S'Scene' -p39812 -ssS'editable' -p39813 -(dp39814 -S'editable' -p39815 -I00 -sS'value' -p39816 -I01 -ssS'unique' -p39817 -(dp39818 -S'editable' -p39819 -I00 -sS'value' -p39820 -I00 -ssS'properties' -p39821 -(dp39822 -S'default_value' -p39823 -(dp39824 -S'editable' -p39825 -I00 -sS'value' -p39826 -NssS'summary_default' -p39827 -(dp39828 -S'editable' -p39829 -I01 -sS'value' -p39830 -S'none' -p39831 -ssS'valid_types' -p39832 -(dp39833 -S'editable' -p39834 -I01 -sS'value' -p39835 -(lp39836 -S'Note' -p39837 -asssS'description' -p39838 -(dp39839 -S'editable' -p39840 -I01 -sS'value' -p39841 -g47 -ssssS'Project' -p39842 -(dp39843 -S'step_14' -p39844 -(dp39845 -S'mandatory' -p39846 -(dp39847 -S'editable' -p39848 -I00 -sS'value' -p39849 -I00 -ssS'name' -p39850 -(dp39851 -S'editable' -p39852 -I01 -sS'value' -p39853 -S'Editorial' -p39854 -ssS'data_type' -p39855 -(dp39856 -S'editable' -p39857 -I00 -sS'value' -p39858 -S'pivot_column' -p39859 -ssS'entity_type' -p39860 -(dp39861 -S'editable' -p39862 -I00 -sS'value' -p39863 -S'Project' -p39864 -ssS'editable' -p39865 -(dp39866 -S'editable' -p39867 -I00 -sS'value' -p39868 -I00 -ssS'unique' -p39869 -(dp39870 -S'editable' -p39871 -I00 -sS'value' -p39872 -I00 -ssS'properties' -p39873 -(dp39874 -S'default_value' -p39875 -(dp39876 -S'editable' -p39877 -I00 -sS'value' -p39878 -NssS'summary_default' -p39879 -(dp39880 -S'editable' -p39881 -I00 -sS'value' -p39882 -S'none' -p39883 -sssS'description' -p39884 -(dp39885 -S'editable' -p39886 -I01 -sS'value' -p39887 -g47 -sssS'tasks' -p39888 -(dp39889 -S'mandatory' -p39890 -(dp39891 -S'editable' -p39892 -I00 -sS'value' -p39893 -I00 -ssS'name' -p39894 -(dp39895 -S'editable' -p39896 -I01 -sS'value' -p39897 -S'Tasks' -p39898 -ssS'data_type' -p39899 -(dp39900 -S'editable' -p39901 -I00 -sS'value' -p39902 -S'multi_entity' -p39903 -ssS'entity_type' -p39904 -(dp39905 -S'editable' -p39906 -I00 -sS'value' -p39907 -S'Project' -p39908 -ssS'editable' -p39909 -(dp39910 -S'editable' -p39911 -I00 -sS'value' -p39912 -I01 -ssS'unique' -p39913 -(dp39914 -S'editable' -p39915 -I00 -sS'value' -p39916 -I00 -ssS'properties' -p39917 -(dp39918 -S'default_value' -p39919 -(dp39920 -S'editable' -p39921 -I00 -sS'value' -p39922 -NssS'summary_default' -p39923 -(dp39924 -S'editable' -p39925 -I01 -sS'value' -p39926 -S'none' -p39927 -ssS'valid_types' -p39928 -(dp39929 -S'editable' -p39930 -I01 -sS'value' -p39931 -(lp39932 -S'Task' -p39933 -asssS'description' -p39934 -(dp39935 -S'editable' -p39936 -I01 -sS'value' -p39937 -g47 -sssS'color' -p39938 -(dp39939 -S'mandatory' -p39940 -(dp39941 -S'editable' -p39942 -I00 -sS'value' -p39943 -I00 -ssS'name' -p39944 -(dp39945 -S'editable' -p39946 -I01 -sS'value' -p39947 -S'Color' -p39948 -ssS'data_type' -p39949 -(dp39950 -S'editable' -p39951 -I00 -sS'value' -p39952 -S'color' -p39953 -ssS'entity_type' -p39954 -(dp39955 -S'editable' -p39956 -I00 -sS'value' -p39957 -S'Project' -p39958 -ssS'editable' -p39959 -(dp39960 -S'editable' -p39961 -I00 -sS'value' -p39962 -I01 -ssS'unique' -p39963 -(dp39964 -S'editable' -p39965 -I00 -sS'value' -p39966 -I00 -ssS'properties' -p39967 -(dp39968 -S'default_value' -p39969 -(dp39970 -S'editable' -p39971 -I00 -sS'value' -p39972 -NssS'summary_default' -p39973 -(dp39974 -S'editable' -p39975 -I01 -sS'value' -p39976 -S'none' -p39977 -sssS'description' -p39978 -(dp39979 -S'editable' -p39980 -I01 -sS'value' -p39981 -g47 -sssS'image' -p39982 -(dp39983 -S'mandatory' -p39984 -(dp39985 -S'editable' -p39986 -I00 -sS'value' -p39987 -I00 -ssS'name' -p39988 -(dp39989 -S'editable' -p39990 -I01 -sS'value' -p39991 -S'Thumbnail' -p39992 -ssS'data_type' -p39993 -(dp39994 -S'editable' -p39995 -I00 -sS'value' -p39996 -S'image' -p39997 -ssS'entity_type' -p39998 -(dp39999 -S'editable' -p40000 -I00 -sS'value' -p40001 -S'Project' -p40002 -ssS'editable' -p40003 -(dp40004 -S'editable' -p40005 -I00 -sS'value' -p40006 -I01 -ssS'unique' -p40007 -(dp40008 -S'editable' -p40009 -I00 -sS'value' -p40010 -I00 -ssS'properties' -p40011 -(dp40012 -S'default_value' -p40013 -(dp40014 -S'editable' -p40015 -I00 -sS'value' -p40016 -NssS'summary_default' -p40017 -(dp40018 -S'editable' -p40019 -I01 -sS'value' -p40020 -S'none' -p40021 -sssS'description' -p40022 -(dp40023 -S'editable' -p40024 -I01 -sS'value' -p40025 -g47 -sssS'updated_at' -p40026 -(dp40027 -S'mandatory' -p40028 -(dp40029 -S'editable' -p40030 -I00 -sS'value' -p40031 -I00 -ssS'name' -p40032 -(dp40033 -S'editable' -p40034 -I01 -sS'value' -p40035 -S'Date Updated' -p40036 -ssS'data_type' -p40037 -(dp40038 -S'editable' -p40039 -I00 -sS'value' -p40040 -S'date_time' -p40041 -ssS'entity_type' -p40042 -(dp40043 -S'editable' -p40044 -I00 -sS'value' -p40045 -S'Project' -p40046 -ssS'editable' -p40047 -(dp40048 -S'editable' -p40049 -I00 -sS'value' -p40050 -I00 -ssS'unique' -p40051 -(dp40052 -S'editable' -p40053 -I00 -sS'value' -p40054 -I00 -ssS'properties' -p40055 -(dp40056 -S'default_value' -p40057 -(dp40058 -S'editable' -p40059 -I00 -sS'value' -p40060 -NssS'summary_default' -p40061 -(dp40062 -S'editable' -p40063 -I01 -sS'value' -p40064 -S'none' -p40065 -sssS'description' -p40066 -(dp40067 -S'editable' -p40068 -I01 -sS'value' -p40069 -g47 -sssS'sg_projectnumber' -p40070 -(dp40071 -S'mandatory' -p40072 -(dp40073 -S'editable' -p40074 -I00 -sS'value' -p40075 -I00 -ssS'name' -p40076 -(dp40077 -S'editable' -p40078 -I01 -sS'value' -p40079 -S'projectnumber' -p40080 -ssS'data_type' -p40081 -(dp40082 -S'editable' -p40083 -I00 -sS'value' -p40084 -S'text' -p40085 -ssS'entity_type' -p40086 -(dp40087 -S'editable' -p40088 -I00 -sS'value' -p40089 -S'Project' -p40090 -ssS'editable' -p40091 -(dp40092 -S'editable' -p40093 -I00 -sS'value' -p40094 -I01 -ssS'unique' -p40095 -(dp40096 -S'editable' -p40097 -I00 -sS'value' -p40098 -I00 -ssS'properties' -p40099 -(dp40100 -S'default_value' -p40101 -(dp40102 -S'editable' -p40103 -I00 -sS'value' -p40104 -NssS'summary_default' -p40105 -(dp40106 -S'editable' -p40107 -I01 -sS'value' -p40108 -S'none' -p40109 -sssS'description' -p40110 -(dp40111 -S'editable' -p40112 -I01 -sS'value' -p40113 -g47 -sssS'duration' -p40114 -(dp40115 -S'mandatory' -p40116 -(dp40117 -S'editable' -p40118 -I00 -sS'value' -p40119 -I00 -ssS'name' -p40120 -(dp40121 -S'editable' -p40122 -I01 -sS'value' -p40123 -S'Duration' -p40124 -ssS'data_type' -p40125 -(dp40126 -S'editable' -p40127 -I00 -sS'value' -p40128 -S'number' -p40129 -ssS'entity_type' -p40130 -(dp40131 -S'editable' -p40132 -I00 -sS'value' -p40133 -S'Project' -p40134 -ssS'editable' -p40135 -(dp40136 -S'editable' -p40137 -I00 -sS'value' -p40138 -I00 -ssS'unique' -p40139 -(dp40140 -S'editable' -p40141 -I00 -sS'value' -p40142 -I00 -ssS'properties' -p40143 -(dp40144 -S'default_value' -p40145 -(dp40146 -S'editable' -p40147 -I00 -sS'value' -p40148 -NssS'summary_default' -p40149 -(dp40150 -S'editable' -p40151 -I01 -sS'value' -p40152 -S'none' -p40153 -sssS'description' -p40154 -(dp40155 -S'editable' -p40156 -I01 -sS'value' -p40157 -g47 -sssS'tank_name' -p40158 -(dp40159 -S'mandatory' -p40160 -(dp40161 -S'editable' -p40162 -I00 -sS'value' -p40163 -I00 -ssS'name' -p40164 -(dp40165 -S'editable' -p40166 -I01 -sS'value' -p40167 -S'Tank Name' -p40168 -ssS'data_type' -p40169 -(dp40170 -S'editable' -p40171 -I00 -sS'value' -p40172 -S'text' -p40173 -ssS'entity_type' -p40174 -(dp40175 -S'editable' -p40176 -I00 -sS'value' -p40177 -S'Project' -p40178 -ssS'editable' -p40179 -(dp40180 -S'editable' -p40181 -I00 -sS'value' -p40182 -I01 -ssS'unique' -p40183 -(dp40184 -S'editable' -p40185 -I00 -sS'value' -p40186 -I00 -ssS'properties' -p40187 -(dp40188 -S'default_value' -p40189 -(dp40190 -S'editable' -p40191 -I00 -sS'value' -p40192 -NssS'summary_default' -p40193 -(dp40194 -S'editable' -p40195 -I01 -sS'value' -p40196 -S'none' -p40197 -sssS'description' -p40198 -(dp40199 -S'editable' -p40200 -I01 -sS'value' -p40201 -g47 -sssS'billboard' -p40202 -(dp40203 -S'mandatory' -p40204 -(dp40205 -S'editable' -p40206 -I00 -sS'value' -p40207 -I00 -ssS'name' -p40208 -(dp40209 -S'editable' -p40210 -I01 -sS'value' -p40211 -S'Billboard' -p40212 -ssS'data_type' -p40213 -(dp40214 -S'editable' -p40215 -I00 -sS'value' -p40216 -S'url' -p40217 -ssS'entity_type' -p40218 -(dp40219 -S'editable' -p40220 -I00 -sS'value' -p40221 -S'Project' -p40222 -ssS'editable' -p40223 -(dp40224 -S'editable' -p40225 -I00 -sS'value' -p40226 -I01 -ssS'unique' -p40227 -(dp40228 -S'editable' -p40229 -I00 -sS'value' -p40230 -I00 -ssS'properties' -p40231 -(dp40232 -S'default_value' -p40233 -(dp40234 -S'editable' -p40235 -I00 -sS'value' -p40236 -NssS'open_in_new_window' -p40237 -(dp40238 -S'editable' -p40239 -I00 -sS'value' -p40240 -I01 -ssS'summary_default' -p40241 -(dp40242 -S'editable' -p40243 -I00 -sS'value' -p40244 -S'none' -p40245 -sssS'description' -p40246 -(dp40247 -S'editable' -p40248 -I01 -sS'value' -p40249 -g47 -sssS'cached_display_name' -p40250 -(dp40251 -S'mandatory' -p40252 -(dp40253 -S'editable' -p40254 -I00 -sS'value' -p40255 -I00 -ssS'name' -p40256 -(dp40257 -S'editable' -p40258 -I01 -sS'value' -p40259 -S'Cached Display Name' -p40260 -ssS'data_type' -p40261 -(dp40262 -S'editable' -p40263 -I00 -sS'value' -p40264 -S'text' -p40265 -ssS'entity_type' -p40266 -(dp40267 -S'editable' -p40268 -I00 -sS'value' -p40269 -S'Project' -p40270 -ssS'editable' -p40271 -(dp40272 -S'editable' -p40273 -I00 -sS'value' -p40274 -I01 -ssS'unique' -p40275 -(dp40276 -S'editable' -p40277 -I00 -sS'value' -p40278 -I00 -ssS'properties' -p40279 -(dp40280 -S'default_value' -p40281 -(dp40282 -S'editable' -p40283 -I00 -sS'value' -p40284 -NssS'summary_default' -p40285 -(dp40286 -S'editable' -p40287 -I00 -sS'value' -p40288 -S'none' -p40289 -sssS'description' -p40290 -(dp40291 -S'editable' -p40292 -I01 -sS'value' -p40293 -g47 -sssS'id' -p40294 -(dp40295 -S'mandatory' -p40296 -(dp40297 -S'editable' -p40298 -I00 -sS'value' -p40299 -I00 -ssS'name' -p40300 -(dp40301 -S'editable' -p40302 -I01 -sS'value' -p40303 -S'Id' -p40304 -ssS'data_type' -p40305 -(dp40306 -S'editable' -p40307 -I00 -sS'value' -p40308 -S'number' -p40309 -ssS'entity_type' -p40310 -(dp40311 -S'editable' -p40312 -I00 -sS'value' -p40313 -S'Project' -p40314 -ssS'editable' -p40315 -(dp40316 -S'editable' -p40317 -I00 -sS'value' -p40318 -I00 -ssS'unique' -p40319 -(dp40320 -S'editable' -p40321 -I00 -sS'value' -p40322 -I00 -ssS'properties' -p40323 -(dp40324 -S'default_value' -p40325 -(dp40326 -S'editable' -p40327 -I00 -sS'value' -p40328 -NssS'summary_default' -p40329 -(dp40330 -S'editable' -p40331 -I01 -sS'value' -p40332 -S'none' -p40333 -sssS'description' -p40334 -(dp40335 -S'editable' -p40336 -I01 -sS'value' -p40337 -g47 -sssS'updated_by' -p40338 -(dp40339 -S'mandatory' -p40340 -(dp40341 -S'editable' -p40342 -I00 -sS'value' -p40343 -I00 -ssS'name' -p40344 -(dp40345 -S'editable' -p40346 -I01 -sS'value' -p40347 -S'Updated by' -p40348 -ssS'data_type' -p40349 -(dp40350 -S'editable' -p40351 -I00 -sS'value' -p40352 -S'entity' -p40353 -ssS'entity_type' -p40354 -(dp40355 -S'editable' -p40356 -I00 -sS'value' -p40357 -S'Project' -p40358 -ssS'editable' -p40359 -(dp40360 -S'editable' -p40361 -I00 -sS'value' -p40362 -I00 -ssS'unique' -p40363 -(dp40364 -S'editable' -p40365 -I00 -sS'value' -p40366 -I00 -ssS'properties' -p40367 -(dp40368 -S'default_value' -p40369 -(dp40370 -S'editable' -p40371 -I00 -sS'value' -p40372 -NssS'summary_default' -p40373 -(dp40374 -S'editable' -p40375 -I01 -sS'value' -p40376 -S'none' -p40377 -ssS'valid_types' -p40378 -(dp40379 -S'editable' -p40380 -I01 -sS'value' -p40381 -(lp40382 -S'HumanUser' -p40383 -aS'ApiUser' -p40384 -asssS'description' -p40385 -(dp40386 -S'editable' -p40387 -I01 -sS'value' -p40388 -g47 -sssS'phases' -p40389 -(dp40390 -S'mandatory' -p40391 -(dp40392 -S'editable' -p40393 -I00 -sS'value' -p40394 -I00 -ssS'name' -p40395 -(dp40396 -S'editable' -p40397 -I01 -sS'value' -p40398 -S'Phases' -p40399 -ssS'data_type' -p40400 -(dp40401 -S'editable' -p40402 -I00 -sS'value' -p40403 -S'multi_entity' -p40404 -ssS'entity_type' -p40405 -(dp40406 -S'editable' -p40407 -I00 -sS'value' -p40408 -S'Project' -p40409 -ssS'editable' -p40410 -(dp40411 -S'editable' -p40412 -I00 -sS'value' -p40413 -I01 -ssS'unique' -p40414 -(dp40415 -S'editable' -p40416 -I00 -sS'value' -p40417 -I00 -ssS'properties' -p40418 -(dp40419 -S'default_value' -p40420 -(dp40421 -S'editable' -p40422 -I00 -sS'value' -p40423 -NssS'summary_default' -p40424 -(dp40425 -S'editable' -p40426 -I00 -sS'value' -p40427 -S'none' -p40428 -ssS'valid_types' -p40429 -(dp40430 -S'editable' -p40431 -I00 -sS'value' -p40432 -(lp40433 -S'Phase' -p40434 -asssS'description' -p40435 -(dp40436 -S'editable' -p40437 -I01 -sS'value' -p40438 -g47 -sssS'task_template' -p40439 -(dp40440 -S'mandatory' -p40441 -(dp40442 -S'editable' -p40443 -I00 -sS'value' -p40444 -I00 -ssS'name' -p40445 -(dp40446 -S'editable' -p40447 -I01 -sS'value' -p40448 -S'Task Template' -p40449 -ssS'data_type' -p40450 -(dp40451 -S'editable' -p40452 -I00 -sS'value' -p40453 -S'entity' -p40454 -ssS'entity_type' -p40455 -(dp40456 -S'editable' -p40457 -I00 -sS'value' -p40458 -S'Project' -p40459 -ssS'editable' -p40460 -(dp40461 -S'editable' -p40462 -I00 -sS'value' -p40463 -I01 -ssS'unique' -p40464 -(dp40465 -S'editable' -p40466 -I00 -sS'value' -p40467 -I00 -ssS'properties' -p40468 -(dp40469 -S'default_value' -p40470 -(dp40471 -S'editable' -p40472 -I00 -sS'value' -p40473 -NssS'summary_default' -p40474 -(dp40475 -S'editable' -p40476 -I01 -sS'value' -p40477 -S'none' -p40478 -ssS'valid_types' -p40479 -(dp40480 -S'editable' -p40481 -I01 -sS'value' -p40482 -(lp40483 -S'TaskTemplate' -p40484 -asssS'description' -p40485 -(dp40486 -S'editable' -p40487 -I01 -sS'value' -p40488 -g47 -sssS'created_by' -p40489 -(dp40490 -S'mandatory' -p40491 -(dp40492 -S'editable' -p40493 -I00 -sS'value' -p40494 -I00 -ssS'name' -p40495 -(dp40496 -S'editable' -p40497 -I01 -sS'value' -p40498 -S'Created by' -p40499 -ssS'data_type' -p40500 -(dp40501 -S'editable' -p40502 -I00 -sS'value' -p40503 -S'entity' -p40504 -ssS'entity_type' -p40505 -(dp40506 -S'editable' -p40507 -I00 -sS'value' -p40508 -S'Project' -p40509 -ssS'editable' -p40510 -(dp40511 -S'editable' -p40512 -I00 -sS'value' -p40513 -I00 -ssS'unique' -p40514 -(dp40515 -S'editable' -p40516 -I00 -sS'value' -p40517 -I00 -ssS'properties' -p40518 -(dp40519 -S'default_value' -p40520 -(dp40521 -S'editable' -p40522 -I00 -sS'value' -p40523 -NssS'summary_default' -p40524 -(dp40525 -S'editable' -p40526 -I01 -sS'value' -p40527 -S'none' -p40528 -ssS'valid_types' -p40529 -(dp40530 -S'editable' -p40531 -I01 -sS'value' -p40532 -(lp40533 -S'HumanUser' -p40534 -aS'ApiUser' -p40535 -asssS'description' -p40536 -(dp40537 -S'editable' -p40538 -I01 -sS'value' -p40539 -g47 -sssS'sg_status' -p40540 -(dp40541 -S'mandatory' -p40542 -(dp40543 -S'editable' -p40544 -I00 -sS'value' -p40545 -I00 -ssS'name' -p40546 -(dp40547 -S'editable' -p40548 -I01 -sS'value' -p40549 -S'Status' -p40550 -ssS'data_type' -p40551 -(dp40552 -S'editable' -p40553 -I00 -sS'value' -p40554 -S'list' -p40555 -ssS'entity_type' -p40556 -(dp40557 -S'editable' -p40558 -I00 -sS'value' -p40559 -S'Project' -p40560 -ssS'editable' -p40561 -(dp40562 -S'editable' -p40563 -I00 -sS'value' -p40564 -I01 -ssS'unique' -p40565 -(dp40566 -S'editable' -p40567 -I00 -sS'value' -p40568 -I00 -ssS'properties' -p40569 -(dp40570 -S'default_value' -p40571 -(dp40572 -S'editable' -p40573 -I00 -sS'value' -p40574 -NssS'valid_values' -p40575 -(dp40576 -S'editable' -p40577 -I01 -sS'value' -p40578 -(lp40579 -S'Bidding' -p40580 -aS'Active' -p40581 -aS'Lost' -p40582 -aS'Hold' -p40583 -assS'summary_default' -p40584 -(dp40585 -S'editable' -p40586 -I01 -sS'value' -p40587 -S'none' -p40588 -sssS'description' -p40589 -(dp40590 -S'editable' -p40591 -I01 -sS'value' -p40592 -g47 -sssS'current_user_favorite' -p40593 -(dp40594 -S'mandatory' -p40595 -(dp40596 -S'editable' -p40597 -I00 -sS'value' -p40598 -I00 -ssS'name' -p40599 -(dp40600 -S'editable' -p40601 -I01 -sS'value' -p40602 -S'Favorite' -p40603 -ssS'data_type' -p40604 -(dp40605 -S'editable' -p40606 -I00 -sS'value' -p40607 -S'checkbox' -p40608 -ssS'entity_type' -p40609 -(dp40610 -S'editable' -p40611 -I00 -sS'value' -p40612 -S'Project' -p40613 -ssS'editable' -p40614 -(dp40615 -S'editable' -p40616 -I00 -sS'value' -p40617 -I01 -ssS'unique' -p40618 -(dp40619 -S'editable' -p40620 -I00 -sS'value' -p40621 -I00 -ssS'properties' -p40622 -(dp40623 -S'default_value' -p40624 -(dp40625 -S'editable' -p40626 -I00 -sS'value' -p40627 -NssS'summary_default' -p40628 -(dp40629 -S'editable' -p40630 -I01 -sS'value' -p40631 -S'none' -p40632 -sssS'description' -p40633 -(dp40634 -S'editable' -p40635 -I01 -sS'value' -p40636 -g47 -sssS'last_accessed_by_current_user' -p40637 -(dp40638 -S'mandatory' -p40639 -(dp40640 -S'editable' -p40641 -I00 -sS'value' -p40642 -I00 -ssS'name' -p40643 -(dp40644 -S'editable' -p40645 -I01 -sS'value' -p40646 -S'Last Accessed' -p40647 -ssS'data_type' -p40648 -(dp40649 -S'editable' -p40650 -I00 -sS'value' -p40651 -S'date_time' -p40652 -ssS'entity_type' -p40653 -(dp40654 -S'editable' -p40655 -I00 -sS'value' -p40656 -S'Project' -p40657 -ssS'editable' -p40658 -(dp40659 -S'editable' -p40660 -I00 -sS'value' -p40661 -I01 -ssS'unique' -p40662 -(dp40663 -S'editable' -p40664 -I00 -sS'value' -p40665 -I00 -ssS'properties' -p40666 -(dp40667 -S'default_value' -p40668 -(dp40669 -S'editable' -p40670 -I00 -sS'value' -p40671 -NssS'summary_default' -p40672 -(dp40673 -S'editable' -p40674 -I01 -sS'value' -p40675 -S'none' -p40676 -sssS'description' -p40677 -(dp40678 -S'editable' -p40679 -I01 -sS'value' -p40680 -g47 -sssS'start_date' -p40681 -(dp40682 -S'mandatory' -p40683 -(dp40684 -S'editable' -p40685 -I00 -sS'value' -p40686 -I00 -ssS'name' -p40687 -(dp40688 -S'editable' -p40689 -I01 -sS'value' -p40690 -S'Start Date' -p40691 -ssS'data_type' -p40692 -(dp40693 -S'editable' -p40694 -I00 -sS'value' -p40695 -S'date' -p40696 -ssS'entity_type' -p40697 -(dp40698 -S'editable' -p40699 -I00 -sS'value' -p40700 -S'Project' -p40701 -ssS'editable' -p40702 -(dp40703 -S'editable' -p40704 -I00 -sS'value' -p40705 -I00 -ssS'unique' -p40706 -(dp40707 -S'editable' -p40708 -I00 -sS'value' -p40709 -I00 -ssS'properties' -p40710 -(dp40711 -S'default_value' -p40712 -(dp40713 -S'editable' -p40714 -I00 -sS'value' -p40715 -NssS'summary_default' -p40716 -(dp40717 -S'editable' -p40718 -I01 -sS'value' -p40719 -S'none' -p40720 -sssS'description' -p40721 -(dp40722 -S'editable' -p40723 -I01 -sS'value' -p40724 -g47 -sssS'sg_description' -p40725 -(dp40726 -S'mandatory' -p40727 -(dp40728 -S'editable' -p40729 -I00 -sS'value' -p40730 -I00 -ssS'name' -p40731 -(dp40732 -S'editable' -p40733 -I01 -sS'value' -p40734 -S'Description' -p40735 -ssS'data_type' -p40736 -(dp40737 -S'editable' -p40738 -I00 -sS'value' -p40739 -S'text' -p40740 -ssS'entity_type' -p40741 -(dp40742 -S'editable' -p40743 -I00 -sS'value' -p40744 -S'Project' -p40745 -ssS'editable' -p40746 -(dp40747 -S'editable' -p40748 -I00 -sS'value' -p40749 -I01 -ssS'unique' -p40750 -(dp40751 -S'editable' -p40752 -I00 -sS'value' -p40753 -I00 -ssS'properties' -p40754 -(dp40755 -S'default_value' -p40756 -(dp40757 -S'editable' -p40758 -I00 -sS'value' -p40759 -NssS'summary_default' -p40760 -(dp40761 -S'editable' -p40762 -I01 -sS'value' -p40763 -S'none' -p40764 -sssS'description' -p40765 -(dp40766 -S'editable' -p40767 -I01 -sS'value' -p40768 -g47 -sssS'users' -p40769 -(dp40770 -S'mandatory' -p40771 -(dp40772 -S'editable' -p40773 -I00 -sS'value' -p40774 -I00 -ssS'name' -p40775 -(dp40776 -S'editable' -p40777 -I01 -sS'value' -p40778 -S'Users' -p40779 -ssS'data_type' -p40780 -(dp40781 -S'editable' -p40782 -I00 -sS'value' -p40783 -S'multi_entity' -p40784 -ssS'entity_type' -p40785 -(dp40786 -S'editable' -p40787 -I00 -sS'value' -p40788 -S'Project' -p40789 -ssS'editable' -p40790 -(dp40791 -S'editable' -p40792 -I00 -sS'value' -p40793 -I01 -ssS'unique' -p40794 -(dp40795 -S'editable' -p40796 -I00 -sS'value' -p40797 -I00 -ssS'properties' -p40798 -(dp40799 -S'default_value' -p40800 -(dp40801 -S'editable' -p40802 -I00 -sS'value' -p40803 -NssS'summary_default' -p40804 -(dp40805 -S'editable' -p40806 -I01 -sS'value' -p40807 -S'none' -p40808 -ssS'valid_types' -p40809 -(dp40810 -S'editable' -p40811 -I01 -sS'value' -p40812 -(lp40813 -S'HumanUser' -p40814 -asssS'description' -p40815 -(dp40816 -S'editable' -p40817 -I01 -sS'value' -p40818 -g47 -sssS'end_date' -p40819 -(dp40820 -S'mandatory' -p40821 -(dp40822 -S'editable' -p40823 -I00 -sS'value' -p40824 -I00 -ssS'name' -p40825 -(dp40826 -S'editable' -p40827 -I01 -sS'value' -p40828 -S'End Date' -p40829 -ssS'data_type' -p40830 -(dp40831 -S'editable' -p40832 -I00 -sS'value' -p40833 -S'date' -p40834 -ssS'entity_type' -p40835 -(dp40836 -S'editable' -p40837 -I00 -sS'value' -p40838 -S'Project' -p40839 -ssS'editable' -p40840 -(dp40841 -S'editable' -p40842 -I00 -sS'value' -p40843 -I00 -ssS'unique' -p40844 -(dp40845 -S'editable' -p40846 -I00 -sS'value' -p40847 -I00 -ssS'properties' -p40848 -(dp40849 -S'default_value' -p40850 -(dp40851 -S'editable' -p40852 -I00 -sS'value' -p40853 -NssS'summary_default' -p40854 -(dp40855 -S'editable' -p40856 -I01 -sS'value' -p40857 -S'none' -p40858 -sssS'description' -p40859 -(dp40860 -S'editable' -p40861 -I01 -sS'value' -p40862 -g47 -sssS'archived' -p40863 -(dp40864 -S'mandatory' -p40865 -(dp40866 -S'editable' -p40867 -I00 -sS'value' -p40868 -I00 -ssS'name' -p40869 -(dp40870 -S'editable' -p40871 -I01 -sS'value' -p40872 -S'Archived' -p40873 -ssS'data_type' -p40874 -(dp40875 -S'editable' -p40876 -I00 -sS'value' -p40877 -S'checkbox' -p40878 -ssS'entity_type' -p40879 -(dp40880 -S'editable' -p40881 -I00 -sS'value' -p40882 -S'Project' -p40883 -ssS'editable' -p40884 -(dp40885 -S'editable' -p40886 -I00 -sS'value' -p40887 -I01 -ssS'unique' -p40888 -(dp40889 -S'editable' -p40890 -I00 -sS'value' -p40891 -I00 -ssS'properties' -p40892 -(dp40893 -S'default_value' -p40894 -(dp40895 -S'editable' -p40896 -I00 -sS'value' -p40897 -I00 -ssS'summary_default' -p40898 -(dp40899 -S'editable' -p40900 -I00 -sS'value' -p40901 -S'none' -p40902 -sssS'description' -p40903 -(dp40904 -S'editable' -p40905 -I01 -sS'value' -p40906 -g47 -sssS'step_0' -p40907 -(dp40908 -S'mandatory' -p40909 -(dp40910 -S'editable' -p40911 -I00 -sS'value' -p40912 -I00 -ssS'name' -p40913 -(dp40914 -S'editable' -p40915 -I01 -sS'value' -p40916 -S'ALL TASKS' -p40917 -ssS'data_type' -p40918 -(dp40919 -S'editable' -p40920 -I00 -sS'value' -p40921 -S'pivot_column' -p40922 -ssS'entity_type' -p40923 -(dp40924 -S'editable' -p40925 -I00 -sS'value' -p40926 -S'Project' -p40927 -ssS'editable' -p40928 -(dp40929 -S'editable' -p40930 -I00 -sS'value' -p40931 -I00 -ssS'unique' -p40932 -(dp40933 -S'editable' -p40934 -I00 -sS'value' -p40935 -I00 -ssS'properties' -p40936 -(dp40937 -S'default_value' -p40938 -(dp40939 -S'editable' -p40940 -I00 -sS'value' -p40941 -NssS'summary_default' -p40942 -(dp40943 -S'editable' -p40944 -I00 -sS'value' -p40945 -S'none' -p40946 -sssS'description' -p40947 -(dp40948 -S'editable' -p40949 -I01 -sS'value' -p40950 -g47 -sssS'name' -p40951 -(dp40952 -S'mandatory' -p40953 -(dp40954 -S'editable' -p40955 -I00 -sS'value' -p40956 -I01 -ssS'name' -p40957 -(dp40958 -S'editable' -p40959 -I01 -sS'value' -p40960 -S'Project Name' -p40961 -ssS'data_type' -p40962 -(dp40963 -S'editable' -p40964 -I00 -sS'value' -p40965 -S'text' -p40966 -ssS'entity_type' -p40967 -(dp40968 -S'editable' -p40969 -I00 -sS'value' -p40970 -S'Project' -p40971 -ssS'editable' -p40972 -(dp40973 -S'editable' -p40974 -I00 -sS'value' -p40975 -I01 -ssS'unique' -p40976 -(dp40977 -S'editable' -p40978 -I00 -sS'value' -p40979 -I01 -ssS'properties' -p40980 -(dp40981 -S'default_value' -p40982 -(dp40983 -S'editable' -p40984 -I00 -sS'value' -p40985 -NssS'summary_default' -p40986 -(dp40987 -S'editable' -p40988 -I01 -sS'value' -p40989 -S'none' -p40990 -sssS'description' -p40991 -(dp40992 -S'editable' -p40993 -I01 -sS'value' -p40994 -g47 -sssS'created_at' -p40995 -(dp40996 -S'mandatory' -p40997 -(dp40998 -S'editable' -p40999 -I00 -sS'value' -p41000 -I00 -ssS'name' -p41001 -(dp41002 -S'editable' -p41003 -I01 -sS'value' -p41004 -S'Date Created' -p41005 -ssS'data_type' -p41006 -(dp41007 -S'editable' -p41008 -I00 -sS'value' -p41009 -S'date_time' -p41010 -ssS'entity_type' -p41011 -(dp41012 -S'editable' -p41013 -I00 -sS'value' -p41014 -S'Project' -p41015 -ssS'editable' -p41016 -(dp41017 -S'editable' -p41018 -I00 -sS'value' -p41019 -I00 -ssS'unique' -p41020 -(dp41021 -S'editable' -p41022 -I00 -sS'value' -p41023 -I00 -ssS'properties' -p41024 -(dp41025 -S'default_value' -p41026 -(dp41027 -S'editable' -p41028 -I00 -sS'value' -p41029 -NssS'summary_default' -p41030 -(dp41031 -S'editable' -p41032 -I01 -sS'value' -p41033 -S'none' -p41034 -sssS'description' -p41035 -(dp41036 -S'editable' -p41037 -I01 -sS'value' -p41038 -g47 -sssS'filmstrip_image' -p41039 -(dp41040 -S'mandatory' -p41041 -(dp41042 -S'editable' -p41043 -I00 -sS'value' -p41044 -I00 -ssS'name' -p41045 -(dp41046 -S'editable' -p41047 -I01 -sS'value' -p41048 -S'Filmstrip Thumbnail' -p41049 -ssS'data_type' -p41050 -(dp41051 -S'editable' -p41052 -I00 -sS'value' -p41053 -S'image' -p41054 -ssS'entity_type' -p41055 -(dp41056 -S'editable' -p41057 -I00 -sS'value' -p41058 -S'Project' -p41059 -ssS'editable' -p41060 -(dp41061 -S'editable' -p41062 -I00 -sS'value' -p41063 -I01 -ssS'unique' -p41064 -(dp41065 -S'editable' -p41066 -I00 -sS'value' -p41067 -I00 -ssS'properties' -p41068 -(dp41069 -S'default_value' -p41070 -(dp41071 -S'editable' -p41072 -I00 -sS'value' -p41073 -NssS'summary_default' -p41074 -(dp41075 -S'editable' -p41076 -I01 -sS'value' -p41077 -S'none' -p41078 -sssS'description' -p41079 -(dp41080 -S'editable' -p41081 -I01 -sS'value' -p41082 -g47 -sssS'layout_project' -p41083 -(dp41084 -S'mandatory' -p41085 -(dp41086 -S'editable' -p41087 -I00 -sS'value' -p41088 -I00 -ssS'name' -p41089 -(dp41090 -S'editable' -p41091 -I01 -sS'value' -p41092 -S'Layout Template' -p41093 -ssS'data_type' -p41094 -(dp41095 -S'editable' -p41096 -I00 -sS'value' -p41097 -S'entity' -p41098 -ssS'entity_type' -p41099 -(dp41100 -S'editable' -p41101 -I00 -sS'value' -p41102 -S'Project' -p41103 -ssS'editable' -p41104 -(dp41105 -S'editable' -p41106 -I00 -sS'value' -p41107 -I00 -ssS'unique' -p41108 -(dp41109 -S'editable' -p41110 -I00 -sS'value' -p41111 -I00 -ssS'properties' -p41112 -(dp41113 -S'default_value' -p41114 -(dp41115 -S'editable' -p41116 -I00 -sS'value' -p41117 -NssS'summary_default' -p41118 -(dp41119 -S'editable' -p41120 -I00 -sS'value' -p41121 -S'none' -p41122 -ssS'valid_types' -p41123 -(dp41124 -S'editable' -p41125 -I00 -sS'value' -p41126 -(lp41127 -S'Project' -p41128 -asssS'description' -p41129 -(dp41130 -S'editable' -p41131 -I01 -sS'value' -p41132 -g47 -sssS'sg_type' -p41133 -(dp41134 -S'mandatory' -p41135 -(dp41136 -S'editable' -p41137 -I00 -sS'value' -p41138 -I00 -ssS'name' -p41139 -(dp41140 -S'editable' -p41141 -I01 -sS'value' -p41142 -S'Type' -p41143 -ssS'data_type' -p41144 -(dp41145 -S'editable' -p41146 -I00 -sS'value' -p41147 -S'list' -p41148 -ssS'entity_type' -p41149 -(dp41150 -S'editable' -p41151 -I00 -sS'value' -p41152 -S'Project' -p41153 -ssS'editable' -p41154 -(dp41155 -S'editable' -p41156 -I00 -sS'value' -p41157 -I01 -ssS'unique' -p41158 -(dp41159 -S'editable' -p41160 -I00 -sS'value' -p41161 -I00 -ssS'properties' -p41162 -(dp41163 -S'default_value' -p41164 -(dp41165 -S'editable' -p41166 -I00 -sS'value' -p41167 -NssS'valid_values' -p41168 -(dp41169 -S'editable' -p41170 -I01 -sS'value' -p41171 -(lp41172 -S'Short Film' -p41173 -aS'Feature Film' -p41174 -aS'Commercial' -p41175 -aS'Effects' -p41176 -aS'Game Cinematic' -p41177 -aS'Other' -p41178 -aS'(this list can be customized)' -p41179 -assS'summary_default' -p41180 -(dp41181 -S'editable' -p41182 -I01 -sS'value' -p41183 -S'none' -p41184 -sssS'description' -p41185 -(dp41186 -S'editable' -p41187 -I01 -sS'value' -p41188 -g47 -sssS'tag_list' -p41189 -(dp41190 -S'mandatory' -p41191 -(dp41192 -S'editable' -p41193 -I00 -sS'value' -p41194 -I00 -ssS'name' -p41195 -(dp41196 -S'editable' -p41197 -I01 -sS'value' -p41198 -S'Tags' -p41199 -ssS'data_type' -p41200 -(dp41201 -S'editable' -p41202 -I00 -sS'value' -p41203 -S'tag_list' -p41204 -ssS'entity_type' -p41205 -(dp41206 -S'editable' -p41207 -I00 -sS'value' -p41208 -S'Project' -p41209 -ssS'editable' -p41210 -(dp41211 -S'editable' -p41212 -I00 -sS'value' -p41213 -I01 -ssS'unique' -p41214 -(dp41215 -S'editable' -p41216 -I00 -sS'value' -p41217 -I00 -ssS'properties' -p41218 -(dp41219 -S'default_value' -p41220 -(dp41221 -S'editable' -p41222 -I00 -sS'value' -p41223 -NssS'summary_default' -p41224 -(dp41225 -S'editable' -p41226 -I01 -sS'value' -p41227 -S'none' -p41228 -ssS'valid_types' -p41229 -(dp41230 -S'editable' -p41231 -I01 -sS'value' -p41232 -(lp41233 -S'Tag' -p41234 -asssS'description' -p41235 -(dp41236 -S'editable' -p41237 -I01 -sS'value' -p41238 -g47 -ssssS'Version' -p41239 -(dp41240 -S'sg_version_type' -p41241 -(dp41242 -S'mandatory' -p41243 -(dp41244 -S'editable' -p41245 -I00 -sS'value' -p41246 -I00 -ssS'name' -p41247 -(dp41248 -S'editable' -p41249 -I01 -sS'value' -p41250 -S'Type' -p41251 -ssS'data_type' -p41252 -(dp41253 -S'editable' -p41254 -I00 -sS'value' -p41255 -S'list' -p41256 -ssS'entity_type' -p41257 -(dp41258 -S'editable' -p41259 -I00 -sS'value' -p41260 -S'Version' -p41261 -ssS'editable' -p41262 -(dp41263 -S'editable' -p41264 -I00 -sS'value' -p41265 -I01 -ssS'unique' -p41266 -(dp41267 -S'editable' -p41268 -I00 -sS'value' -p41269 -I00 -ssS'properties' -p41270 -(dp41271 -S'default_value' -p41272 -(dp41273 -S'editable' -p41274 -I00 -sS'value' -p41275 -NssS'valid_values' -p41276 -(dp41277 -S'editable' -p41278 -I01 -sS'value' -p41279 -(lp41280 -ssS'summary_default' -p41281 -(dp41282 -S'editable' -p41283 -I01 -sS'value' -p41284 -S'none' -p41285 -sssS'description' -p41286 -(dp41287 -S'editable' -p41288 -I01 -sS'value' -p41289 -g47 -sssS'open_notes_count' -p41290 -(dp41291 -S'mandatory' -p41292 -(dp41293 -S'editable' -p41294 -I00 -sS'value' -p41295 -I00 -ssS'name' -p41296 -(dp41297 -S'editable' -p41298 -I01 -sS'value' -p41299 -S'Open Notes Count' -p41300 -ssS'data_type' -p41301 -(dp41302 -S'editable' -p41303 -I00 -sS'value' -p41304 -S'text' -p41305 -ssS'entity_type' -p41306 -(dp41307 -S'editable' -p41308 -I00 -sS'value' -p41309 -S'Version' -p41310 -ssS'editable' -p41311 -(dp41312 -S'editable' -p41313 -I00 -sS'value' -p41314 -I00 -ssS'unique' -p41315 -(dp41316 -S'editable' -p41317 -I00 -sS'value' -p41318 -I00 -ssS'properties' -p41319 -(dp41320 -S'default_value' -p41321 -(dp41322 -S'editable' -p41323 -I00 -sS'value' -p41324 -NssS'summary_default' -p41325 -(dp41326 -S'editable' -p41327 -I01 -sS'value' -p41328 -S'none' -p41329 -sssS'description' -p41330 -(dp41331 -S'editable' -p41332 -I01 -sS'value' -p41333 -g47 -sssS'code' -p41334 -(dp41335 -S'mandatory' -p41336 -(dp41337 -S'editable' -p41338 -I00 -sS'value' -p41339 -I01 -ssS'name' -p41340 -(dp41341 -S'editable' -p41342 -I01 -sS'value' -p41343 -S'Version Name' -p41344 -ssS'data_type' -p41345 -(dp41346 -S'editable' -p41347 -I00 -sS'value' -p41348 -S'text' -p41349 -ssS'entity_type' -p41350 -(dp41351 -S'editable' -p41352 -I00 -sS'value' -p41353 -S'Version' -p41354 -ssS'editable' -p41355 -(dp41356 -S'editable' -p41357 -I00 -sS'value' -p41358 -I01 -ssS'unique' -p41359 -(dp41360 -S'editable' -p41361 -I00 -sS'value' -p41362 -I00 -ssS'properties' -p41363 -(dp41364 -S'default_value' -p41365 -(dp41366 -S'editable' -p41367 -I00 -sS'value' -p41368 -NssS'summary_default' -p41369 -(dp41370 -S'editable' -p41371 -I01 -sS'value' -p41372 -S'none' -p41373 -sssS'description' -p41374 -(dp41375 -S'editable' -p41376 -I01 -sS'value' -p41377 -g47 -sssS'playlists' -p41378 -(dp41379 -S'mandatory' -p41380 -(dp41381 -S'editable' -p41382 -I00 -sS'value' -p41383 -I00 -ssS'name' -p41384 -(dp41385 -S'editable' -p41386 -I01 -sS'value' -p41387 -S'Playlists' -p41388 -ssS'data_type' -p41389 -(dp41390 -S'editable' -p41391 -I00 -sS'value' -p41392 -S'multi_entity' -p41393 -ssS'entity_type' -p41394 -(dp41395 -S'editable' -p41396 -I00 -sS'value' -p41397 -S'Version' -p41398 -ssS'editable' -p41399 -(dp41400 -S'editable' -p41401 -I00 -sS'value' -p41402 -I01 -ssS'unique' -p41403 -(dp41404 -S'editable' -p41405 -I00 -sS'value' -p41406 -I00 -ssS'properties' -p41407 -(dp41408 -S'default_value' -p41409 -(dp41410 -S'editable' -p41411 -I00 -sS'value' -p41412 -NssS'summary_default' -p41413 -(dp41414 -S'editable' -p41415 -I01 -sS'value' -p41416 -S'none' -p41417 -ssS'valid_types' -p41418 -(dp41419 -S'editable' -p41420 -I01 -sS'value' -p41421 -(lp41422 -S'Playlist' -p41423 -asssS'description' -p41424 -(dp41425 -S'editable' -p41426 -I01 -sS'value' -p41427 -g47 -sssS'sg_task' -p41428 -(dp41429 -S'mandatory' -p41430 -(dp41431 -S'editable' -p41432 -I00 -sS'value' -p41433 -I00 -ssS'name' -p41434 -(dp41435 -S'editable' -p41436 -I01 -sS'value' -p41437 -S'Task' -p41438 -ssS'data_type' -p41439 -(dp41440 -S'editable' -p41441 -I00 -sS'value' -p41442 -S'entity' -p41443 -ssS'entity_type' -p41444 -(dp41445 -S'editable' -p41446 -I00 -sS'value' -p41447 -S'Version' -p41448 -ssS'editable' -p41449 -(dp41450 -S'editable' -p41451 -I00 -sS'value' -p41452 -I01 -ssS'unique' -p41453 -(dp41454 -S'editable' -p41455 -I00 -sS'value' -p41456 -I00 -ssS'properties' -p41457 -(dp41458 -S'default_value' -p41459 -(dp41460 -S'editable' -p41461 -I00 -sS'value' -p41462 -NssS'summary_default' -p41463 -(dp41464 -S'editable' -p41465 -I01 -sS'value' -p41466 -S'none' -p41467 -ssS'valid_types' -p41468 -(dp41469 -S'editable' -p41470 -I01 -sS'value' -p41471 -(lp41472 -S'Task' -p41473 -asssS'description' -p41474 -(dp41475 -S'editable' -p41476 -I01 -sS'value' -p41477 -g47 -sssS'image' -p41478 -(dp41479 -S'mandatory' -p41480 -(dp41481 -S'editable' -p41482 -I00 -sS'value' -p41483 -I00 -ssS'name' -p41484 -(dp41485 -S'editable' -p41486 -I01 -sS'value' -p41487 -S'Thumbnail' -p41488 -ssS'data_type' -p41489 -(dp41490 -S'editable' -p41491 -I00 -sS'value' -p41492 -S'image' -p41493 -ssS'entity_type' -p41494 -(dp41495 -S'editable' -p41496 -I00 -sS'value' -p41497 -S'Version' -p41498 -ssS'editable' -p41499 -(dp41500 -S'editable' -p41501 -I00 -sS'value' -p41502 -I01 -ssS'unique' -p41503 -(dp41504 -S'editable' -p41505 -I00 -sS'value' -p41506 -I00 -ssS'properties' -p41507 -(dp41508 -S'default_value' -p41509 -(dp41510 -S'editable' -p41511 -I00 -sS'value' -p41512 -NssS'summary_default' -p41513 -(dp41514 -S'editable' -p41515 -I01 -sS'value' -p41516 -S'none' -p41517 -sssS'description' -p41518 -(dp41519 -S'editable' -p41520 -I01 -sS'value' -p41521 -g47 -sssS'updated_at' -p41522 -(dp41523 -S'mandatory' -p41524 -(dp41525 -S'editable' -p41526 -I00 -sS'value' -p41527 -I00 -ssS'name' -p41528 -(dp41529 -S'editable' -p41530 -I01 -sS'value' -p41531 -S'Date Updated' -p41532 -ssS'data_type' -p41533 -(dp41534 -S'editable' -p41535 -I00 -sS'value' -p41536 -S'date_time' -p41537 -ssS'entity_type' -p41538 -(dp41539 -S'editable' -p41540 -I00 -sS'value' -p41541 -S'Version' -p41542 -ssS'editable' -p41543 -(dp41544 -S'editable' -p41545 -I00 -sS'value' -p41546 -I00 -ssS'unique' -p41547 -(dp41548 -S'editable' -p41549 -I00 -sS'value' -p41550 -I00 -ssS'properties' -p41551 -(dp41552 -S'default_value' -p41553 -(dp41554 -S'editable' -p41555 -I00 -sS'value' -p41556 -NssS'summary_default' -p41557 -(dp41558 -S'editable' -p41559 -I01 -sS'value' -p41560 -S'none' -p41561 -sssS'description' -p41562 -(dp41563 -S'editable' -p41564 -I01 -sS'value' -p41565 -g47 -sssS'sg_uploaded_movie_frame_rate' -p41566 -(dp41567 -S'mandatory' -p41568 -(dp41569 -S'editable' -p41570 -I00 -sS'value' -p41571 -I00 -ssS'name' -p41572 -(dp41573 -S'editable' -p41574 -I01 -sS'value' -p41575 -S'Uploaded Movie Frame Rate' -p41576 -ssS'data_type' -p41577 -(dp41578 -S'editable' -p41579 -I00 -sS'value' -p41580 -S'float' -p41581 -ssS'entity_type' -p41582 -(dp41583 -S'editable' -p41584 -I00 -sS'value' -p41585 -S'Version' -p41586 -ssS'editable' -p41587 -(dp41588 -S'editable' -p41589 -I00 -sS'value' -p41590 -I01 -ssS'unique' -p41591 -(dp41592 -S'editable' -p41593 -I00 -sS'value' -p41594 -I00 -ssS'properties' -p41595 -(dp41596 -S'default_value' -p41597 -(dp41598 -S'editable' -p41599 -I00 -sS'value' -p41600 -NssS'summary_default' -p41601 -(dp41602 -S'editable' -p41603 -I00 -sS'value' -p41604 -S'none' -p41605 -sssS'description' -p41606 -(dp41607 -S'editable' -p41608 -I01 -sS'value' -p41609 -g47 -sssS'sg_path_to_frames' -p41610 -(dp41611 -S'mandatory' -p41612 -(dp41613 -S'editable' -p41614 -I00 -sS'value' -p41615 -I00 -ssS'name' -p41616 -(dp41617 -S'editable' -p41618 -I01 -sS'value' -p41619 -S'Path to Frames' -p41620 -ssS'data_type' -p41621 -(dp41622 -S'editable' -p41623 -I00 -sS'value' -p41624 -S'text' -p41625 -ssS'entity_type' -p41626 -(dp41627 -S'editable' -p41628 -I00 -sS'value' -p41629 -S'Version' -p41630 -ssS'editable' -p41631 -(dp41632 -S'editable' -p41633 -I00 -sS'value' -p41634 -I01 -ssS'unique' -p41635 -(dp41636 -S'editable' -p41637 -I00 -sS'value' -p41638 -I00 -ssS'properties' -p41639 -(dp41640 -S'default_value' -p41641 -(dp41642 -S'editable' -p41643 -I00 -sS'value' -p41644 -NssS'summary_default' -p41645 -(dp41646 -S'editable' -p41647 -I01 -sS'value' -p41648 -S'none' -p41649 -sssS'description' -p41650 -(dp41651 -S'editable' -p41652 -I01 -sS'value' -p41653 -S'Location of the high res frames on your local filesystem. Used for playback of high resolution frames.' -p41654 -sssS'tasks' -p41655 -(dp41656 -S'mandatory' -p41657 -(dp41658 -S'editable' -p41659 -I00 -sS'value' -p41660 -I00 -ssS'name' -p41661 -(dp41662 -S'editable' -p41663 -I01 -sS'value' -p41664 -S'Tasks' -p41665 -ssS'data_type' -p41666 -(dp41667 -S'editable' -p41668 -I00 -sS'value' -p41669 -S'multi_entity' -p41670 -ssS'entity_type' -p41671 -(dp41672 -S'editable' -p41673 -I00 -sS'value' -p41674 -S'Version' -p41675 -ssS'editable' -p41676 -(dp41677 -S'editable' -p41678 -I00 -sS'value' -p41679 -I01 -ssS'unique' -p41680 -(dp41681 -S'editable' -p41682 -I00 -sS'value' -p41683 -I00 -ssS'properties' -p41684 -(dp41685 -S'default_value' -p41686 -(dp41687 -S'editable' -p41688 -I00 -sS'value' -p41689 -NssS'summary_default' -p41690 -(dp41691 -S'editable' -p41692 -I01 -sS'value' -p41693 -S'none' -p41694 -ssS'valid_types' -p41695 -(dp41696 -S'editable' -p41697 -I01 -sS'value' -p41698 -(lp41699 -S'Task' -p41700 -asssS'description' -p41701 -(dp41702 -S'editable' -p41703 -I01 -sS'value' -p41704 -g47 -sssS'sg_department' -p41705 -(dp41706 -S'mandatory' -p41707 -(dp41708 -S'editable' -p41709 -I00 -sS'value' -p41710 -I00 -ssS'name' -p41711 -(dp41712 -S'editable' -p41713 -I01 -sS'value' -p41714 -S'Department' -p41715 -ssS'data_type' -p41716 -(dp41717 -S'editable' -p41718 -I00 -sS'value' -p41719 -S'text' -p41720 -ssS'entity_type' -p41721 -(dp41722 -S'editable' -p41723 -I00 -sS'value' -p41724 -S'Version' -p41725 -ssS'editable' -p41726 -(dp41727 -S'editable' -p41728 -I00 -sS'value' -p41729 -I01 -ssS'unique' -p41730 -(dp41731 -S'editable' -p41732 -I00 -sS'value' -p41733 -I00 -ssS'properties' -p41734 -(dp41735 -S'default_value' -p41736 -(dp41737 -S'editable' -p41738 -I00 -sS'value' -p41739 -NssS'summary_default' -p41740 -(dp41741 -S'editable' -p41742 -I01 -sS'value' -p41743 -S'none' -p41744 -sssS'description' -p41745 -(dp41746 -S'editable' -p41747 -I01 -sS'value' -p41748 -S'The department the Version was submitted from. This is used to find the latest Version from the same department.' -p41749 -sssS'cached_display_name' -p41750 -(dp41751 -S'mandatory' -p41752 -(dp41753 -S'editable' -p41754 -I00 -sS'value' -p41755 -I00 -ssS'name' -p41756 -(dp41757 -S'editable' -p41758 -I01 -sS'value' -p41759 -S'Cached Display Name' -p41760 -ssS'data_type' -p41761 -(dp41762 -S'editable' -p41763 -I00 -sS'value' -p41764 -S'text' -p41765 -ssS'entity_type' -p41766 -(dp41767 -S'editable' -p41768 -I00 -sS'value' -p41769 -S'Version' -p41770 -ssS'editable' -p41771 -(dp41772 -S'editable' -p41773 -I00 -sS'value' -p41774 -I01 -ssS'unique' -p41775 -(dp41776 -S'editable' -p41777 -I00 -sS'value' -p41778 -I00 -ssS'properties' -p41779 -(dp41780 -S'default_value' -p41781 -(dp41782 -S'editable' -p41783 -I00 -sS'value' -p41784 -NssS'summary_default' -p41785 -(dp41786 -S'editable' -p41787 -I00 -sS'value' -p41788 -S'none' -p41789 -sssS'description' -p41790 -(dp41791 -S'editable' -p41792 -I01 -sS'value' -p41793 -g47 -sssS'frame_range' -p41794 -(dp41795 -S'mandatory' -p41796 -(dp41797 -S'editable' -p41798 -I00 -sS'value' -p41799 -I00 -ssS'name' -p41800 -(dp41801 -S'editable' -p41802 -I01 -sS'value' -p41803 -S'Frame Range' -p41804 -ssS'data_type' -p41805 -(dp41806 -S'editable' -p41807 -I00 -sS'value' -p41808 -S'text' -p41809 -ssS'entity_type' -p41810 -(dp41811 -S'editable' -p41812 -I00 -sS'value' -p41813 -S'Version' -p41814 -ssS'editable' -p41815 -(dp41816 -S'editable' -p41817 -I00 -sS'value' -p41818 -I01 -ssS'unique' -p41819 -(dp41820 -S'editable' -p41821 -I00 -sS'value' -p41822 -I00 -ssS'properties' -p41823 -(dp41824 -S'default_value' -p41825 -(dp41826 -S'editable' -p41827 -I00 -sS'value' -p41828 -NssS'summary_default' -p41829 -(dp41830 -S'editable' -p41831 -I01 -sS'value' -p41832 -S'none' -p41833 -sssS'description' -p41834 -(dp41835 -S'editable' -p41836 -I01 -sS'value' -p41837 -g47 -sssS'updated_by' -p41838 -(dp41839 -S'mandatory' -p41840 -(dp41841 -S'editable' -p41842 -I00 -sS'value' -p41843 -I00 -ssS'name' -p41844 -(dp41845 -S'editable' -p41846 -I01 -sS'value' -p41847 -S'Updated by' -p41848 -ssS'data_type' -p41849 -(dp41850 -S'editable' -p41851 -I00 -sS'value' -p41852 -S'entity' -p41853 -ssS'entity_type' -p41854 -(dp41855 -S'editable' -p41856 -I00 -sS'value' -p41857 -S'Version' -p41858 -ssS'editable' -p41859 -(dp41860 -S'editable' -p41861 -I00 -sS'value' -p41862 -I00 -ssS'unique' -p41863 -(dp41864 -S'editable' -p41865 -I00 -sS'value' -p41866 -I00 -ssS'properties' -p41867 -(dp41868 -S'default_value' -p41869 -(dp41870 -S'editable' -p41871 -I00 -sS'value' -p41872 -NssS'summary_default' -p41873 -(dp41874 -S'editable' -p41875 -I01 -sS'value' -p41876 -S'none' -p41877 -ssS'valid_types' -p41878 -(dp41879 -S'editable' -p41880 -I01 -sS'value' -p41881 -(lp41882 -S'HumanUser' -p41883 -aS'ApiUser' -p41884 -asssS'description' -p41885 -(dp41886 -S'editable' -p41887 -I01 -sS'value' -p41888 -g47 -sssS'sg_path_to_movie' -p41889 -(dp41890 -S'mandatory' -p41891 -(dp41892 -S'editable' -p41893 -I00 -sS'value' -p41894 -I00 -ssS'name' -p41895 -(dp41896 -S'editable' -p41897 -I01 -sS'value' -p41898 -S'Path to Movie' -p41899 -ssS'data_type' -p41900 -(dp41901 -S'editable' -p41902 -I00 -sS'value' -p41903 -S'text' -p41904 -ssS'entity_type' -p41905 -(dp41906 -S'editable' -p41907 -I00 -sS'value' -p41908 -S'Version' -p41909 -ssS'editable' -p41910 -(dp41911 -S'editable' -p41912 -I00 -sS'value' -p41913 -I01 -ssS'unique' -p41914 -(dp41915 -S'editable' -p41916 -I00 -sS'value' -p41917 -I00 -ssS'properties' -p41918 -(dp41919 -S'default_value' -p41920 -(dp41921 -S'editable' -p41922 -I00 -sS'value' -p41923 -NssS'summary_default' -p41924 -(dp41925 -S'editable' -p41926 -I01 -sS'value' -p41927 -S'none' -p41928 -sssS'description' -p41929 -(dp41930 -S'editable' -p41931 -I01 -sS'value' -p41932 -S'Location of the movie on your local filesystem (not uploaded). Used for playback of lower resolution movie media stored locally.' -p41933 -sssS'sg_uploaded_movie_webm' -p41934 -(dp41935 -S'mandatory' -p41936 -(dp41937 -S'editable' -p41938 -I00 -sS'value' -p41939 -I00 -ssS'name' -p41940 -(dp41941 -S'editable' -p41942 -I01 -sS'value' -p41943 -S'Uploaded Movie WebM' -p41944 -ssS'data_type' -p41945 -(dp41946 -S'editable' -p41947 -I00 -sS'value' -p41948 -S'url' -p41949 -ssS'entity_type' -p41950 -(dp41951 -S'editable' -p41952 -I00 -sS'value' -p41953 -S'Version' -p41954 -ssS'editable' -p41955 -(dp41956 -S'editable' -p41957 -I00 -sS'value' -p41958 -I01 -ssS'unique' -p41959 -(dp41960 -S'editable' -p41961 -I00 -sS'value' -p41962 -I00 -ssS'properties' -p41963 -(dp41964 -S'default_value' -p41965 -(dp41966 -S'editable' -p41967 -I00 -sS'value' -p41968 -NssS'open_in_new_window' -p41969 -(dp41970 -S'editable' -p41971 -I00 -sS'value' -p41972 -I01 -ssS'summary_default' -p41973 -(dp41974 -S'editable' -p41975 -I00 -sS'value' -p41976 -S'none' -p41977 -sssS'description' -p41978 -(dp41979 -S'editable' -p41980 -I01 -sS'value' -p41981 -g47 -sssS'open_notes' -p41982 -(dp41983 -S'mandatory' -p41984 -(dp41985 -S'editable' -p41986 -I00 -sS'value' -p41987 -I00 -ssS'name' -p41988 -(dp41989 -S'editable' -p41990 -I01 -sS'value' -p41991 -S'Open Notes' -p41992 -ssS'data_type' -p41993 -(dp41994 -S'editable' -p41995 -I00 -sS'value' -p41996 -S'multi_entity' -p41997 -ssS'entity_type' -p41998 -(dp41999 -S'editable' -p42000 -I00 -sS'value' -p42001 -S'Version' -p42002 -ssS'editable' -p42003 -(dp42004 -S'editable' -p42005 -I00 -sS'value' -p42006 -I00 -ssS'unique' -p42007 -(dp42008 -S'editable' -p42009 -I00 -sS'value' -p42010 -I00 -ssS'properties' -p42011 -(dp42012 -S'default_value' -p42013 -(dp42014 -S'editable' -p42015 -I00 -sS'value' -p42016 -NssS'summary_default' -p42017 -(dp42018 -S'editable' -p42019 -I01 -sS'value' -p42020 -S'none' -p42021 -ssS'valid_types' -p42022 -(dp42023 -S'editable' -p42024 -I01 -sS'value' -p42025 -(lp42026 -S'Note' -p42027 -asssS'description' -p42028 -(dp42029 -S'editable' -p42030 -I01 -sS'value' -p42031 -g47 -sssS'tank_published_file' -p42032 -(dp42033 -S'mandatory' -p42034 -(dp42035 -S'editable' -p42036 -I00 -sS'value' -p42037 -I00 -ssS'name' -p42038 -(dp42039 -S'editable' -p42040 -I01 -sS'value' -p42041 -S'Tank Published File' -p42042 -ssS'data_type' -p42043 -(dp42044 -S'editable' -p42045 -I00 -sS'value' -p42046 -S'entity' -p42047 -ssS'entity_type' -p42048 -(dp42049 -S'editable' -p42050 -I00 -sS'value' -p42051 -S'Version' -p42052 -ssS'editable' -p42053 -(dp42054 -S'editable' -p42055 -I00 -sS'value' -p42056 -I01 -ssS'unique' -p42057 -(dp42058 -S'editable' -p42059 -I00 -sS'value' -p42060 -I00 -ssS'properties' -p42061 -(dp42062 -S'default_value' -p42063 -(dp42064 -S'editable' -p42065 -I00 -sS'value' -p42066 -NssS'summary_default' -p42067 -(dp42068 -S'editable' -p42069 -I01 -sS'value' -p42070 -S'none' -p42071 -ssS'valid_types' -p42072 -(dp42073 -S'editable' -p42074 -I01 -sS'value' -p42075 -(lp42076 -S'TankPublishedFile' -p42077 -asssS'description' -p42078 -(dp42079 -S'editable' -p42080 -I01 -sS'value' -p42081 -g47 -sssS'task_template' -p42082 -(dp42083 -S'mandatory' -p42084 -(dp42085 -S'editable' -p42086 -I00 -sS'value' -p42087 -I00 -ssS'name' -p42088 -(dp42089 -S'editable' -p42090 -I01 -sS'value' -p42091 -S'Task Template' -p42092 -ssS'data_type' -p42093 -(dp42094 -S'editable' -p42095 -I00 -sS'value' -p42096 -S'entity' -p42097 -ssS'entity_type' -p42098 -(dp42099 -S'editable' -p42100 -I00 -sS'value' -p42101 -S'Version' -p42102 -ssS'editable' -p42103 -(dp42104 -S'editable' -p42105 -I00 -sS'value' -p42106 -I01 -ssS'unique' -p42107 -(dp42108 -S'editable' -p42109 -I00 -sS'value' -p42110 -I00 -ssS'properties' -p42111 -(dp42112 -S'default_value' -p42113 -(dp42114 -S'editable' -p42115 -I00 -sS'value' -p42116 -NssS'summary_default' -p42117 -(dp42118 -S'editable' -p42119 -I01 -sS'value' -p42120 -S'none' -p42121 -ssS'valid_types' -p42122 -(dp42123 -S'editable' -p42124 -I01 -sS'value' -p42125 -(lp42126 -S'TaskTemplate' -p42127 -asssS'description' -p42128 -(dp42129 -S'editable' -p42130 -I01 -sS'value' -p42131 -g47 -sssS'created_by' -p42132 -(dp42133 -S'mandatory' -p42134 -(dp42135 -S'editable' -p42136 -I00 -sS'value' -p42137 -I00 -ssS'name' -p42138 -(dp42139 -S'editable' -p42140 -I01 -sS'value' -p42141 -S'Created by' -p42142 -ssS'data_type' -p42143 -(dp42144 -S'editable' -p42145 -I00 -sS'value' -p42146 -S'entity' -p42147 -ssS'entity_type' -p42148 -(dp42149 -S'editable' -p42150 -I00 -sS'value' -p42151 -S'Version' -p42152 -ssS'editable' -p42153 -(dp42154 -S'editable' -p42155 -I00 -sS'value' -p42156 -I00 -ssS'unique' -p42157 -(dp42158 -S'editable' -p42159 -I00 -sS'value' -p42160 -I00 -ssS'properties' -p42161 -(dp42162 -S'default_value' -p42163 -(dp42164 -S'editable' -p42165 -I00 -sS'value' -p42166 -NssS'summary_default' -p42167 -(dp42168 -S'editable' -p42169 -I01 -sS'value' -p42170 -S'none' -p42171 -ssS'valid_types' -p42172 -(dp42173 -S'editable' -p42174 -I01 -sS'value' -p42175 -(lp42176 -S'HumanUser' -p42177 -aS'ApiUser' -p42178 -asssS'description' -p42179 -(dp42180 -S'editable' -p42181 -I01 -sS'value' -p42182 -g47 -sssS'id' -p42183 -(dp42184 -S'mandatory' -p42185 -(dp42186 -S'editable' -p42187 -I00 -sS'value' -p42188 -I00 -ssS'name' -p42189 -(dp42190 -S'editable' -p42191 -I01 -sS'value' -p42192 -S'Id' -p42193 -ssS'data_type' -p42194 -(dp42195 -S'editable' -p42196 -I00 -sS'value' -p42197 -S'number' -p42198 -ssS'entity_type' -p42199 -(dp42200 -S'editable' -p42201 -I00 -sS'value' -p42202 -S'Version' -p42203 -ssS'editable' -p42204 -(dp42205 -S'editable' -p42206 -I00 -sS'value' -p42207 -I00 -ssS'unique' -p42208 -(dp42209 -S'editable' -p42210 -I00 -sS'value' -p42211 -I00 -ssS'properties' -p42212 -(dp42213 -S'default_value' -p42214 -(dp42215 -S'editable' -p42216 -I00 -sS'value' -p42217 -NssS'summary_default' -p42218 -(dp42219 -S'editable' -p42220 -I01 -sS'value' -p42221 -S'none' -p42222 -sssS'description' -p42223 -(dp42224 -S'editable' -p42225 -I01 -sS'value' -p42226 -g47 -sssS'sg_status_list' -p42227 -(dp42228 -S'mandatory' -p42229 -(dp42230 -S'editable' -p42231 -I00 -sS'value' -p42232 -I00 -ssS'name' -p42233 -(dp42234 -S'editable' -p42235 -I01 -sS'value' -p42236 -S'Status' -p42237 -ssS'data_type' -p42238 -(dp42239 -S'editable' -p42240 -I00 -sS'value' -p42241 -S'status_list' -p42242 -ssS'entity_type' -p42243 -(dp42244 -S'editable' -p42245 -I00 -sS'value' -p42246 -S'Version' -p42247 -ssS'editable' -p42248 -(dp42249 -S'editable' -p42250 -I00 -sS'value' -p42251 -I01 -ssS'unique' -p42252 -(dp42253 -S'editable' -p42254 -I00 -sS'value' -p42255 -I00 -ssS'properties' -p42256 -(dp42257 -S'default_value' -p42258 -(dp42259 -S'editable' -p42260 -I01 -sS'value' -p42261 -S'rev' -p42262 -ssS'valid_values' -p42263 -(dp42264 -S'editable' -p42265 -I01 -sS'value' -p42266 -(lp42267 -S'na' -p42268 -aS'rev' -p42269 -aS'vwd' -p42270 -assS'summary_default' -p42271 -(dp42272 -S'editable' -p42273 -I01 -sS'value' -p42274 -S'status_list' -p42275 -sssS'description' -p42276 -(dp42277 -S'editable' -p42278 -I01 -sS'value' -p42279 -g47 -sssS'created_at' -p42280 -(dp42281 -S'mandatory' -p42282 -(dp42283 -S'editable' -p42284 -I00 -sS'value' -p42285 -I00 -ssS'name' -p42286 -(dp42287 -S'editable' -p42288 -I01 -sS'value' -p42289 -S'Date Created' -p42290 -ssS'data_type' -p42291 -(dp42292 -S'editable' -p42293 -I00 -sS'value' -p42294 -S'date_time' -p42295 -ssS'entity_type' -p42296 -(dp42297 -S'editable' -p42298 -I00 -sS'value' -p42299 -S'Version' -p42300 -ssS'editable' -p42301 -(dp42302 -S'editable' -p42303 -I00 -sS'value' -p42304 -I00 -ssS'unique' -p42305 -(dp42306 -S'editable' -p42307 -I00 -sS'value' -p42308 -I00 -ssS'properties' -p42309 -(dp42310 -S'default_value' -p42311 -(dp42312 -S'editable' -p42313 -I00 -sS'value' -p42314 -NssS'summary_default' -p42315 -(dp42316 -S'editable' -p42317 -I01 -sS'value' -p42318 -S'none' -p42319 -sssS'description' -p42320 -(dp42321 -S'editable' -p42322 -I01 -sS'value' -p42323 -g47 -sssS'sg_frames_aspect_ratio' -p42324 -(dp42325 -S'mandatory' -p42326 -(dp42327 -S'editable' -p42328 -I00 -sS'value' -p42329 -I00 -ssS'name' -p42330 -(dp42331 -S'editable' -p42332 -I01 -sS'value' -p42333 -S'Frames Aspect Ratio' -p42334 -ssS'data_type' -p42335 -(dp42336 -S'editable' -p42337 -I00 -sS'value' -p42338 -S'float' -p42339 -ssS'entity_type' -p42340 -(dp42341 -S'editable' -p42342 -I00 -sS'value' -p42343 -S'Version' -p42344 -ssS'editable' -p42345 -(dp42346 -S'editable' -p42347 -I00 -sS'value' -p42348 -I01 -ssS'unique' -p42349 -(dp42350 -S'editable' -p42351 -I00 -sS'value' -p42352 -I00 -ssS'properties' -p42353 -(dp42354 -S'default_value' -p42355 -(dp42356 -S'editable' -p42357 -I00 -sS'value' -p42358 -NssS'summary_default' -p42359 -(dp42360 -S'editable' -p42361 -I01 -sS'value' -p42362 -S'none' -p42363 -sssS'description' -p42364 -(dp42365 -S'editable' -p42366 -I01 -sS'value' -p42367 -S'Aspect ratio of the high res frames. Used to format the image correctly for viewing.' -p42368 -sssS'sg_first_frame' -p42369 -(dp42370 -S'mandatory' -p42371 -(dp42372 -S'editable' -p42373 -I00 -sS'value' -p42374 -I00 -ssS'name' -p42375 -(dp42376 -S'editable' -p42377 -I01 -sS'value' -p42378 -S'First Frame' -p42379 -ssS'data_type' -p42380 -(dp42381 -S'editable' -p42382 -I00 -sS'value' -p42383 -S'number' -p42384 -ssS'entity_type' -p42385 -(dp42386 -S'editable' -p42387 -I00 -sS'value' -p42388 -S'Version' -p42389 -ssS'editable' -p42390 -(dp42391 -S'editable' -p42392 -I00 -sS'value' -p42393 -I01 -ssS'unique' -p42394 -(dp42395 -S'editable' -p42396 -I00 -sS'value' -p42397 -I00 -ssS'properties' -p42398 -(dp42399 -S'default_value' -p42400 -(dp42401 -S'editable' -p42402 -I00 -sS'value' -p42403 -NssS'summary_default' -p42404 -(dp42405 -S'editable' -p42406 -I01 -sS'value' -p42407 -S'none' -p42408 -sssS'description' -p42409 -(dp42410 -S'editable' -p42411 -I01 -sS'value' -p42412 -S'The first frame number contained in the Version. Used in playback of the movie or frames to calculate the first frame available in the Version.' -p42413 -sssS'sg_frames_have_slate' -p42414 -(dp42415 -S'mandatory' -p42416 -(dp42417 -S'editable' -p42418 -I00 -sS'value' -p42419 -I00 -ssS'name' -p42420 -(dp42421 -S'editable' -p42422 -I01 -sS'value' -p42423 -S'Frames Have Slate' -p42424 -ssS'data_type' -p42425 -(dp42426 -S'editable' -p42427 -I00 -sS'value' -p42428 -S'checkbox' -p42429 -ssS'entity_type' -p42430 -(dp42431 -S'editable' -p42432 -I00 -sS'value' -p42433 -S'Version' -p42434 -ssS'editable' -p42435 -(dp42436 -S'editable' -p42437 -I00 -sS'value' -p42438 -I01 -ssS'unique' -p42439 -(dp42440 -S'editable' -p42441 -I00 -sS'value' -p42442 -I00 -ssS'properties' -p42443 -(dp42444 -S'default_value' -p42445 -(dp42446 -S'editable' -p42447 -I00 -sS'value' -p42448 -I00 -ssS'summary_default' -p42449 -(dp42450 -S'editable' -p42451 -I01 -sS'value' -p42452 -S'none' -p42453 -sssS'description' -p42454 -(dp42455 -S'editable' -p42456 -I01 -sS'value' -p42457 -S'Indicates whether the frames have a slate or not. This is used to include or omit the slate from playback.' -p42458 -sssS'sg_uploaded_movie_mp4' -p42459 -(dp42460 -S'mandatory' -p42461 -(dp42462 -S'editable' -p42463 -I00 -sS'value' -p42464 -I00 -ssS'name' -p42465 -(dp42466 -S'editable' -p42467 -I01 -sS'value' -p42468 -S'Uploaded Movie MP4' -p42469 -ssS'data_type' -p42470 -(dp42471 -S'editable' -p42472 -I00 -sS'value' -p42473 -S'url' -p42474 -ssS'entity_type' -p42475 -(dp42476 -S'editable' -p42477 -I00 -sS'value' -p42478 -S'Version' -p42479 -ssS'editable' -p42480 -(dp42481 -S'editable' -p42482 -I00 -sS'value' -p42483 -I01 -ssS'unique' -p42484 -(dp42485 -S'editable' -p42486 -I00 -sS'value' -p42487 -I00 -ssS'properties' -p42488 -(dp42489 -S'default_value' -p42490 -(dp42491 -S'editable' -p42492 -I00 -sS'value' -p42493 -NssS'open_in_new_window' -p42494 -(dp42495 -S'editable' -p42496 -I00 -sS'value' -p42497 -I01 -ssS'summary_default' -p42498 -(dp42499 -S'editable' -p42500 -I00 -sS'value' -p42501 -S'none' -p42502 -sssS'description' -p42503 -(dp42504 -S'editable' -p42505 -I01 -sS'value' -p42506 -g47 -sssS'description' -p42507 -(dp42508 -S'mandatory' -p42509 -(dp42510 -S'editable' -p42511 -I00 -sS'value' -p42512 -I00 -ssS'name' -p42513 -(dp42514 -S'editable' -p42515 -I01 -sS'value' -p42516 -S'Description' -p42517 -ssS'data_type' -p42518 -(dp42519 -S'editable' -p42520 -I00 -sS'value' -p42521 -S'text' -p42522 -ssS'entity_type' -p42523 -(dp42524 -S'editable' -p42525 -I00 -sS'value' -p42526 -S'Version' -p42527 -ssS'editable' -p42528 -(dp42529 -S'editable' -p42530 -I00 -sS'value' -p42531 -I01 -ssS'unique' -p42532 -(dp42533 -S'editable' -p42534 -I00 -sS'value' -p42535 -I00 -ssS'properties' -p42536 -(dp42537 -S'default_value' -p42538 -(dp42539 -S'editable' -p42540 -I00 -sS'value' -p42541 -NssS'summary_default' -p42542 -(dp42543 -S'editable' -p42544 -I01 -sS'value' -p42545 -S'none' -p42546 -sssS'description' -p42547 -(dp42548 -S'editable' -p42549 -I01 -sS'value' -p42550 -g47 -sssS'media_center_import_time' -p42551 -(dp42552 -S'mandatory' -p42553 -(dp42554 -S'editable' -p42555 -I00 -sS'value' -p42556 -I00 -ssS'name' -p42557 -(dp42558 -S'editable' -p42559 -I01 -sS'value' -p42560 -S'Media Center Import Time' -p42561 -ssS'data_type' -p42562 -(dp42563 -S'editable' -p42564 -I00 -sS'value' -p42565 -S'date_time' -p42566 -ssS'entity_type' -p42567 -(dp42568 -S'editable' -p42569 -I00 -sS'value' -p42570 -S'Version' -p42571 -ssS'editable' -p42572 -(dp42573 -S'editable' -p42574 -I00 -sS'value' -p42575 -I01 -ssS'unique' -p42576 -(dp42577 -S'editable' -p42578 -I00 -sS'value' -p42579 -I00 -ssS'properties' -p42580 -(dp42581 -S'default_value' -p42582 -(dp42583 -S'editable' -p42584 -I00 -sS'value' -p42585 -NssS'summary_default' -p42586 -(dp42587 -S'editable' -p42588 -I00 -sS'value' -p42589 -S'none' -p42590 -sssS'description' -p42591 -(dp42592 -S'editable' -p42593 -I01 -sS'value' -p42594 -g47 -sssS'viewed_by_current_user_at' -p42595 -(dp42596 -S'mandatory' -p42597 -(dp42598 -S'editable' -p42599 -I00 -sS'value' -p42600 -I00 -ssS'name' -p42601 -(dp42602 -S'editable' -p42603 -I01 -sS'value' -p42604 -S'Date Viewed' -p42605 -ssS'data_type' -p42606 -(dp42607 -S'editable' -p42608 -I00 -sS'value' -p42609 -S'date_time' -p42610 -ssS'entity_type' -p42611 -(dp42612 -S'editable' -p42613 -I00 -sS'value' -p42614 -S'Version' -p42615 -ssS'editable' -p42616 -(dp42617 -S'editable' -p42618 -I00 -sS'value' -p42619 -I00 -ssS'unique' -p42620 -(dp42621 -S'editable' -p42622 -I00 -sS'value' -p42623 -I00 -ssS'properties' -p42624 -(dp42625 -S'default_value' -p42626 -(dp42627 -S'editable' -p42628 -I00 -sS'value' -p42629 -NssS'summary_default' -p42630 -(dp42631 -S'editable' -p42632 -I00 -sS'value' -p42633 -S'none' -p42634 -sssS'description' -p42635 -(dp42636 -S'editable' -p42637 -I01 -sS'value' -p42638 -g47 -sssS'sg_movie_has_slate' -p42639 -(dp42640 -S'mandatory' -p42641 -(dp42642 -S'editable' -p42643 -I00 -sS'value' -p42644 -I00 -ssS'name' -p42645 -(dp42646 -S'editable' -p42647 -I01 -sS'value' -p42648 -S'Movie Has Slate' -p42649 -ssS'data_type' -p42650 -(dp42651 -S'editable' -p42652 -I00 -sS'value' -p42653 -S'checkbox' -p42654 -ssS'entity_type' -p42655 -(dp42656 -S'editable' -p42657 -I00 -sS'value' -p42658 -S'Version' -p42659 -ssS'editable' -p42660 -(dp42661 -S'editable' -p42662 -I00 -sS'value' -p42663 -I01 -ssS'unique' -p42664 -(dp42665 -S'editable' -p42666 -I00 -sS'value' -p42667 -I00 -ssS'properties' -p42668 -(dp42669 -S'default_value' -p42670 -(dp42671 -S'editable' -p42672 -I00 -sS'value' -p42673 -I00 -ssS'summary_default' -p42674 -(dp42675 -S'editable' -p42676 -I01 -sS'value' -p42677 -S'none' -p42678 -sssS'description' -p42679 -(dp42680 -S'editable' -p42681 -I01 -sS'value' -p42682 -S'Indicates whether the movie file has a slate or not. This is used to include or omit the slate from playback.' -p42683 -sssS'sg_uploaded_movie' -p42684 -(dp42685 -S'mandatory' -p42686 -(dp42687 -S'editable' -p42688 -I00 -sS'value' -p42689 -I00 -ssS'name' -p42690 -(dp42691 -S'editable' -p42692 -I01 -sS'value' -p42693 -S'Uploaded Movie' -p42694 -ssS'data_type' -p42695 -(dp42696 -S'editable' -p42697 -I00 -sS'value' -p42698 -S'url' -p42699 -ssS'entity_type' -p42700 -(dp42701 -S'editable' -p42702 -I00 -sS'value' -p42703 -S'Version' -p42704 -ssS'editable' -p42705 -(dp42706 -S'editable' -p42707 -I00 -sS'value' -p42708 -I01 -ssS'unique' -p42709 -(dp42710 -S'editable' -p42711 -I00 -sS'value' -p42712 -I00 -ssS'properties' -p42713 -(dp42714 -S'default_value' -p42715 -(dp42716 -S'editable' -p42717 -I00 -sS'value' -p42718 -NssS'open_in_new_window' -p42719 -(dp42720 -S'editable' -p42721 -I01 -sS'value' -p42722 -I01 -ssS'summary_default' -p42723 -(dp42724 -S'editable' -p42725 -I01 -sS'value' -p42726 -S'none' -p42727 -sssS'description' -p42728 -(dp42729 -S'editable' -p42730 -I01 -sS'value' -p42731 -S'File field to contain the uploaded movie file. Used for playback of lower resolution movie media stored in Flow Production Tracking.' -p42732 -sssS'user' -p42733 -(dp42734 -S'mandatory' -p42735 -(dp42736 -S'editable' -p42737 -I00 -sS'value' -p42738 -I00 -ssS'name' -p42739 -(dp42740 -S'editable' -p42741 -I01 -sS'value' -p42742 -S'Artist' -p42743 -ssS'data_type' -p42744 -(dp42745 -S'editable' -p42746 -I00 -sS'value' -p42747 -S'entity' -p42748 -ssS'entity_type' -p42749 -(dp42750 -S'editable' -p42751 -I00 -sS'value' -p42752 -S'Version' -p42753 -ssS'editable' -p42754 -(dp42755 -S'editable' -p42756 -I00 -sS'value' -p42757 -I01 -ssS'unique' -p42758 -(dp42759 -S'editable' -p42760 -I00 -sS'value' -p42761 -I00 -ssS'properties' -p42762 -(dp42763 -S'default_value' -p42764 -(dp42765 -S'editable' -p42766 -I00 -sS'value' -p42767 -NssS'summary_default' -p42768 -(dp42769 -S'editable' -p42770 -I01 -sS'value' -p42771 -S'none' -p42772 -ssS'valid_types' -p42773 -(dp42774 -S'editable' -p42775 -I01 -sS'value' -p42776 -(lp42777 -S'HumanUser' -p42778 -aS'ApiUser' -p42779 -asssS'description' -p42780 -(dp42781 -S'editable' -p42782 -I01 -sS'value' -p42783 -g47 -sssS'entity' -p42784 -(dp42785 -S'mandatory' -p42786 -(dp42787 -S'editable' -p42788 -I00 -sS'value' -p42789 -I00 -ssS'name' -p42790 -(dp42791 -S'editable' -p42792 -I01 -sS'value' -p42793 -S'Link' -p42794 -ssS'data_type' -p42795 -(dp42796 -S'editable' -p42797 -I00 -sS'value' -p42798 -S'entity' -p42799 -ssS'entity_type' -p42800 -(dp42801 -S'editable' -p42802 -I00 -sS'value' -p42803 -S'Version' -p42804 -ssS'editable' -p42805 -(dp42806 -S'editable' -p42807 -I00 -sS'value' -p42808 -I01 -ssS'unique' -p42809 -(dp42810 -S'editable' -p42811 -I00 -sS'value' -p42812 -I00 -ssS'properties' -p42813 -(dp42814 -S'default_value' -p42815 -(dp42816 -S'editable' -p42817 -I00 -sS'value' -p42818 -NssS'summary_default' -p42819 -(dp42820 -S'editable' -p42821 -I01 -sS'value' -p42822 -S'none' -p42823 -ssS'valid_types' -p42824 -(dp42825 -S'editable' -p42826 -I01 -sS'value' -p42827 -(lp42828 -S'Asset' -p42829 -aS'Shot' -p42830 -aS'Sequence' -p42831 -aS'Scene' -p42832 -aS'Project' -p42833 -asssS'description' -p42834 -(dp42835 -S'editable' -p42836 -I01 -sS'value' -p42837 -g47 -sssS'published_files' -p42838 -(dp42839 -S'mandatory' -p42840 -(dp42841 -S'editable' -p42842 -I00 -sS'value' -p42843 -I00 -ssS'name' -p42844 -(dp42845 -S'editable' -p42846 -I01 -sS'value' -p42847 -S'Published Files' -p42848 -ssS'data_type' -p42849 -(dp42850 -S'editable' -p42851 -I00 -sS'value' -p42852 -S'multi_entity' -p42853 -ssS'entity_type' -p42854 -(dp42855 -S'editable' -p42856 -I00 -sS'value' -p42857 -S'Version' -p42858 -ssS'editable' -p42859 -(dp42860 -S'editable' -p42861 -I00 -sS'value' -p42862 -I01 -ssS'unique' -p42863 -(dp42864 -S'editable' -p42865 -I00 -sS'value' -p42866 -I00 -ssS'properties' -p42867 -(dp42868 -S'default_value' -p42869 -(dp42870 -S'editable' -p42871 -I00 -sS'value' -p42872 -NssS'summary_default' -p42873 -(dp42874 -S'editable' -p42875 -I01 -sS'value' -p42876 -S'none' -p42877 -ssS'valid_types' -p42878 -(dp42879 -S'editable' -p42880 -I01 -sS'value' -p42881 -(lp42882 -S'PublishedFile' -p42883 -asssS'description' -p42884 -(dp42885 -S'editable' -p42886 -I01 -sS'value' -p42887 -g47 -sssS'step_0' -p42888 -(dp42889 -S'mandatory' -p42890 -(dp42891 -S'editable' -p42892 -I00 -sS'value' -p42893 -I00 -ssS'name' -p42894 -(dp42895 -S'editable' -p42896 -I01 -sS'value' -p42897 -S'ALL TASKS' -p42898 -ssS'data_type' -p42899 -(dp42900 -S'editable' -p42901 -I00 -sS'value' -p42902 -S'pivot_column' -p42903 -ssS'entity_type' -p42904 -(dp42905 -S'editable' -p42906 -I00 -sS'value' -p42907 -S'Version' -p42908 -ssS'editable' -p42909 -(dp42910 -S'editable' -p42911 -I00 -sS'value' -p42912 -I00 -ssS'unique' -p42913 -(dp42914 -S'editable' -p42915 -I00 -sS'value' -p42916 -I00 -ssS'properties' -p42917 -(dp42918 -S'default_value' -p42919 -(dp42920 -S'editable' -p42921 -I00 -sS'value' -p42922 -NssS'summary_default' -p42923 -(dp42924 -S'editable' -p42925 -I00 -sS'value' -p42926 -S'none' -p42927 -sssS'description' -p42928 -(dp42929 -S'editable' -p42930 -I01 -sS'value' -p42931 -g47 -sssS'sg_last_frame' -p42932 -(dp42933 -S'mandatory' -p42934 -(dp42935 -S'editable' -p42936 -I00 -sS'value' -p42937 -I00 -ssS'name' -p42938 -(dp42939 -S'editable' -p42940 -I01 -sS'value' -p42941 -S'Last Frame' -p42942 -ssS'data_type' -p42943 -(dp42944 -S'editable' -p42945 -I00 -sS'value' -p42946 -S'number' -p42947 -ssS'entity_type' -p42948 -(dp42949 -S'editable' -p42950 -I00 -sS'value' -p42951 -S'Version' -p42952 -ssS'editable' -p42953 -(dp42954 -S'editable' -p42955 -I00 -sS'value' -p42956 -I01 -ssS'unique' -p42957 -(dp42958 -S'editable' -p42959 -I00 -sS'value' -p42960 -I00 -ssS'properties' -p42961 -(dp42962 -S'default_value' -p42963 -(dp42964 -S'editable' -p42965 -I00 -sS'value' -p42966 -NssS'summary_default' -p42967 -(dp42968 -S'editable' -p42969 -I01 -sS'value' -p42970 -S'none' -p42971 -sssS'description' -p42972 -(dp42973 -S'editable' -p42974 -I01 -sS'value' -p42975 -S'The last frame number contained in the Version. Used in playback of the movie or frames to calculate the last frame available in the Version.' -p42976 -sssS'viewed_by_current_user' -p42977 -(dp42978 -S'mandatory' -p42979 -(dp42980 -S'editable' -p42981 -I00 -sS'value' -p42982 -I00 -ssS'name' -p42983 -(dp42984 -S'editable' -p42985 -I01 -sS'value' -p42986 -S'Viewed/Unviewed' -p42987 -ssS'data_type' -p42988 -(dp42989 -S'editable' -p42990 -I00 -sS'value' -p42991 -S'list' -p42992 -ssS'entity_type' -p42993 -(dp42994 -S'editable' -p42995 -I00 -sS'value' -p42996 -S'Version' -p42997 -ssS'editable' -p42998 -(dp42999 -S'editable' -p43000 -I00 -sS'value' -p43001 -I01 -ssS'unique' -p43002 -(dp43003 -S'editable' -p43004 -I00 -sS'value' -p43005 -I00 -ssS'properties' -p43006 -(dp43007 -S'default_value' -p43008 -(dp43009 -S'editable' -p43010 -I00 -sS'value' -p43011 -NssS'valid_values' -p43012 -(dp43013 -S'editable' -p43014 -I00 -sS'value' -p43015 -(lp43016 -S'read' -p43017 -aS'unread' -p43018 -assS'summary_default' -p43019 -(dp43020 -S'editable' -p43021 -I00 -sS'value' -p43022 -S'none' -p43023 -sssS'description' -p43024 -(dp43025 -S'editable' -p43026 -I01 -sS'value' -p43027 -g47 -sssS'sg_uploaded_movie_transcoding_status' -p43028 -(dp43029 -S'mandatory' -p43030 -(dp43031 -S'editable' -p43032 -I00 -sS'value' -p43033 -I00 -ssS'name' -p43034 -(dp43035 -S'editable' -p43036 -I01 -sS'value' -p43037 -S'Uploaded Movie Transcoding Status' -p43038 -ssS'data_type' -p43039 -(dp43040 -S'editable' -p43041 -I00 -sS'value' -p43042 -S'number' -p43043 -ssS'entity_type' -p43044 -(dp43045 -S'editable' -p43046 -I00 -sS'value' -p43047 -S'Version' -p43048 -ssS'editable' -p43049 -(dp43050 -S'editable' -p43051 -I00 -sS'value' -p43052 -I01 -ssS'unique' -p43053 -(dp43054 -S'editable' -p43055 -I00 -sS'value' -p43056 -I00 -ssS'properties' -p43057 -(dp43058 -S'default_value' -p43059 -(dp43060 -S'editable' -p43061 -I00 -sS'value' -p43062 -NssS'summary_default' -p43063 -(dp43064 -S'editable' -p43065 -I00 -sS'value' -p43066 -S'none' -p43067 -sssS'description' -p43068 -(dp43069 -S'editable' -p43070 -I01 -sS'value' -p43071 -g47 -sssS'sg_movie_aspect_ratio' -p43072 -(dp43073 -S'mandatory' -p43074 -(dp43075 -S'editable' -p43076 -I00 -sS'value' -p43077 -I00 -ssS'name' -p43078 -(dp43079 -S'editable' -p43080 -I01 -sS'value' -p43081 -S'Movie Aspect Ratio' -p43082 -ssS'data_type' -p43083 -(dp43084 -S'editable' -p43085 -I00 -sS'value' -p43086 -S'float' -p43087 -ssS'entity_type' -p43088 -(dp43089 -S'editable' -p43090 -I00 -sS'value' -p43091 -S'Version' -p43092 -ssS'editable' -p43093 -(dp43094 -S'editable' -p43095 -I00 -sS'value' -p43096 -I01 -ssS'unique' -p43097 -(dp43098 -S'editable' -p43099 -I00 -sS'value' -p43100 -I00 -ssS'properties' -p43101 -(dp43102 -S'default_value' -p43103 -(dp43104 -S'editable' -p43105 -I00 -sS'value' -p43106 -NssS'summary_default' -p43107 -(dp43108 -S'editable' -p43109 -I01 -sS'value' -p43110 -S'none' -p43111 -sssS'description' -p43112 -(dp43113 -S'editable' -p43114 -I01 -sS'value' -p43115 -S'Aspect ratio of the the movie. Used to format the image correctly for viewing.' -p43116 -sssS'notes' -p43117 -(dp43118 -S'mandatory' -p43119 -(dp43120 -S'editable' -p43121 -I00 -sS'value' -p43122 -I00 -ssS'name' -p43123 -(dp43124 -S'editable' -p43125 -I01 -sS'value' -p43126 -S'Notes' -p43127 -ssS'data_type' -p43128 -(dp43129 -S'editable' -p43130 -I00 -sS'value' -p43131 -S'multi_entity' -p43132 -ssS'entity_type' -p43133 -(dp43134 -S'editable' -p43135 -I00 -sS'value' -p43136 -S'Version' -p43137 -ssS'editable' -p43138 -(dp43139 -S'editable' -p43140 -I00 -sS'value' -p43141 -I01 -ssS'unique' -p43142 -(dp43143 -S'editable' -p43144 -I00 -sS'value' -p43145 -I00 -ssS'properties' -p43146 -(dp43147 -S'default_value' -p43148 -(dp43149 -S'editable' -p43150 -I00 -sS'value' -p43151 -NssS'summary_default' -p43152 -(dp43153 -S'editable' -p43154 -I01 -sS'value' -p43155 -S'none' -p43156 -ssS'valid_types' -p43157 -(dp43158 -S'editable' -p43159 -I01 -sS'value' -p43160 -(lp43161 -S'Note' -p43162 -asssS'description' -p43163 -(dp43164 -S'editable' -p43165 -I01 -sS'value' -p43166 -g47 -sssS'project' -p43167 -(dp43168 -S'mandatory' -p43169 -(dp43170 -S'editable' -p43171 -I00 -sS'value' -p43172 -I00 -ssS'name' -p43173 -(dp43174 -S'editable' -p43175 -I01 -sS'value' -p43176 -S'Project' -p43177 -ssS'data_type' -p43178 -(dp43179 -S'editable' -p43180 -I00 -sS'value' -p43181 -S'entity' -p43182 -ssS'entity_type' -p43183 -(dp43184 -S'editable' -p43185 -I00 -sS'value' -p43186 -S'Version' -p43187 -ssS'editable' -p43188 -(dp43189 -S'editable' -p43190 -I00 -sS'value' -p43191 -I01 -ssS'unique' -p43192 -(dp43193 -S'editable' -p43194 -I00 -sS'value' -p43195 -I00 -ssS'properties' -p43196 -(dp43197 -S'default_value' -p43198 -(dp43199 -S'editable' -p43200 -I00 -sS'value' -p43201 -NssS'summary_default' -p43202 -(dp43203 -S'editable' -p43204 -I01 -sS'value' -p43205 -S'none' -p43206 -ssS'valid_types' -p43207 -(dp43208 -S'editable' -p43209 -I01 -sS'value' -p43210 -(lp43211 -S'Project' -p43212 -asssS'description' -p43213 -(dp43214 -S'editable' -p43215 -I01 -sS'value' -p43216 -g47 -sssS'filmstrip_image' -p43217 -(dp43218 -S'mandatory' -p43219 -(dp43220 -S'editable' -p43221 -I00 -sS'value' -p43222 -I00 -ssS'name' -p43223 -(dp43224 -S'editable' -p43225 -I01 -sS'value' -p43226 -S'Filmstrip Thumbnail' -p43227 -ssS'data_type' -p43228 -(dp43229 -S'editable' -p43230 -I00 -sS'value' -p43231 -S'image' -p43232 -ssS'entity_type' -p43233 -(dp43234 -S'editable' -p43235 -I00 -sS'value' -p43236 -S'Version' -p43237 -ssS'editable' -p43238 -(dp43239 -S'editable' -p43240 -I00 -sS'value' -p43241 -I01 -ssS'unique' -p43242 -(dp43243 -S'editable' -p43244 -I00 -sS'value' -p43245 -I00 -ssS'properties' -p43246 -(dp43247 -S'default_value' -p43248 -(dp43249 -S'editable' -p43250 -I00 -sS'value' -p43251 -NssS'summary_default' -p43252 -(dp43253 -S'editable' -p43254 -I01 -sS'value' -p43255 -S'none' -p43256 -sssS'description' -p43257 -(dp43258 -S'editable' -p43259 -I01 -sS'value' -p43260 -g47 -sssS'tag_list' -p43261 -(dp43262 -S'mandatory' -p43263 -(dp43264 -S'editable' -p43265 -I00 -sS'value' -p43266 -I00 -ssS'name' -p43267 -(dp43268 -S'editable' -p43269 -I01 -sS'value' -p43270 -S'Tags' -p43271 -ssS'data_type' -p43272 -(dp43273 -S'editable' -p43274 -I00 -sS'value' -p43275 -S'tag_list' -p43276 -ssS'entity_type' -p43277 -(dp43278 -S'editable' -p43279 -I00 -sS'value' -p43280 -S'Version' -p43281 -ssS'editable' -p43282 -(dp43283 -S'editable' -p43284 -I00 -sS'value' -p43285 -I01 -ssS'unique' -p43286 -(dp43287 -S'editable' -p43288 -I00 -sS'value' -p43289 -I00 -ssS'properties' -p43290 -(dp43291 -S'default_value' -p43292 -(dp43293 -S'editable' -p43294 -I00 -sS'value' -p43295 -NssS'summary_default' -p43296 -(dp43297 -S'editable' -p43298 -I01 -sS'value' -p43299 -S'none' -p43300 -ssS'valid_types' -p43301 -(dp43302 -S'editable' -p43303 -I01 -sS'value' -p43304 -(lp43305 -S'Tag' -p43306 -asssS'description' -p43307 -(dp43308 -S'editable' -p43309 -I01 -sS'value' -p43310 -g47 -sssS'frame_count' -p43311 -(dp43312 -S'mandatory' -p43313 -(dp43314 -S'editable' -p43315 -I00 -sS'value' -p43316 -I00 -ssS'name' -p43317 -(dp43318 -S'editable' -p43319 -I01 -sS'value' -p43320 -S'Frame Count' -p43321 -ssS'data_type' -p43322 -(dp43323 -S'editable' -p43324 -I00 -sS'value' -p43325 -S'number' -p43326 -ssS'entity_type' -p43327 -(dp43328 -S'editable' -p43329 -I00 -sS'value' -p43330 -S'Version' -p43331 -ssS'editable' -p43332 -(dp43333 -S'editable' -p43334 -I00 -sS'value' -p43335 -I01 -ssS'unique' -p43336 -(dp43337 -S'editable' -p43338 -I00 -sS'value' -p43339 -I00 -ssS'properties' -p43340 -(dp43341 -S'default_value' -p43342 -(dp43343 -S'editable' -p43344 -I00 -sS'value' -p43345 -NssS'summary_default' -p43346 -(dp43347 -S'editable' -p43348 -I01 -sS'value' -p43349 -S'none' -p43350 -sssS'description' -p43351 -(dp43352 -S'editable' -p43353 -I01 -sS'value' -p43354 -g47 -sssS'flagged' -p43355 -(dp43356 -S'mandatory' -p43357 -(dp43358 -S'editable' -p43359 -I00 -sS'value' -p43360 -I00 -ssS'name' -p43361 -(dp43362 -S'editable' -p43363 -I01 -sS'value' -p43364 -S'Flagged' -p43365 -ssS'data_type' -p43366 -(dp43367 -S'editable' -p43368 -I00 -sS'value' -p43369 -S'checkbox' -p43370 -ssS'entity_type' -p43371 -(dp43372 -S'editable' -p43373 -I00 -sS'value' -p43374 -S'Version' -p43375 -ssS'editable' -p43376 -(dp43377 -S'editable' -p43378 -I00 -sS'value' -p43379 -I01 -ssS'unique' -p43380 -(dp43381 -S'editable' -p43382 -I00 -sS'value' -p43383 -I00 -ssS'properties' -p43384 -(dp43385 -S'default_value' -p43386 -(dp43387 -S'editable' -p43388 -I00 -sS'value' -p43389 -I00 -ssS'summary_default' -p43390 -(dp43391 -S'editable' -p43392 -I00 -sS'value' -p43393 -S'none' -p43394 -sssS'description' -p43395 -(dp43396 -S'editable' -p43397 -I01 -sS'value' -p43398 -g47 -ssssS'ElementShotConnection' -p43399 -(dp43400 -S'cached_display_name' -p43401 -(dp43402 -S'mandatory' -p43403 -(dp43404 -S'editable' -p43405 -I00 -sS'value' -p43406 -I00 -ssS'name' -p43407 -(dp43408 -S'editable' -p43409 -I01 -sS'value' -p43410 -S'Cached Display Name' -p43411 -ssS'data_type' -p43412 -(dp43413 -S'editable' -p43414 -I00 -sS'value' -p43415 -S'text' -p43416 -ssS'entity_type' -p43417 -(dp43418 -S'editable' -p43419 -I00 -sS'value' -p43420 -S'ElementShotConnection' -p43421 -ssS'editable' -p43422 -(dp43423 -S'editable' -p43424 -I00 -sS'value' -p43425 -I01 -ssS'unique' -p43426 -(dp43427 -S'editable' -p43428 -I00 -sS'value' -p43429 -I00 -ssS'properties' -p43430 -(dp43431 -S'default_value' -p43432 -(dp43433 -S'editable' -p43434 -I00 -sS'value' -p43435 -NssS'summary_default' -p43436 -(dp43437 -S'editable' -p43438 -I00 -sS'value' -p43439 -S'none' -p43440 -sssS'description' -p43441 -(dp43442 -S'editable' -p43443 -I01 -sS'value' -p43444 -g47 -sssS'shot' -p43445 -(dp43446 -S'mandatory' -p43447 -(dp43448 -S'editable' -p43449 -I00 -sS'value' -p43450 -I00 -ssS'name' -p43451 -(dp43452 -S'editable' -p43453 -I01 -sS'value' -p43454 -S'Shot' -p43455 -ssS'data_type' -p43456 -(dp43457 -S'editable' -p43458 -I00 -sS'value' -p43459 -S'entity' -p43460 -ssS'entity_type' -p43461 -(dp43462 -S'editable' -p43463 -I00 -sS'value' -p43464 -S'ElementShotConnection' -p43465 -ssS'editable' -p43466 -(dp43467 -S'editable' -p43468 -I00 -sS'value' -p43469 -I00 -ssS'unique' -p43470 -(dp43471 -S'editable' -p43472 -I00 -sS'value' -p43473 -I00 -ssS'properties' -p43474 -(dp43475 -S'default_value' -p43476 -(dp43477 -S'editable' -p43478 -I00 -sS'value' -p43479 -NssS'summary_default' -p43480 -(dp43481 -S'editable' -p43482 -I00 -sS'value' -p43483 -S'none' -p43484 -ssS'valid_types' -p43485 -(dp43486 -S'editable' -p43487 -I00 -sS'value' -p43488 -(lp43489 -S'Shot' -p43490 -asssS'description' -p43491 -(dp43492 -S'editable' -p43493 -I01 -sS'value' -p43494 -g47 -sssS'id' -p43495 -(dp43496 -S'mandatory' -p43497 -(dp43498 -S'editable' -p43499 -I00 -sS'value' -p43500 -I01 -ssS'name' -p43501 -(dp43502 -S'editable' -p43503 -I01 -sS'value' -p43504 -S'Id' -p43505 -ssS'data_type' -p43506 -(dp43507 -S'editable' -p43508 -I00 -sS'value' -p43509 -S'number' -p43510 -ssS'entity_type' -p43511 -(dp43512 -S'editable' -p43513 -I00 -sS'value' -p43514 -S'ElementShotConnection' -p43515 -ssS'editable' -p43516 -(dp43517 -S'editable' -p43518 -I00 -sS'value' -p43519 -I00 -ssS'unique' -p43520 -(dp43521 -S'editable' -p43522 -I00 -sS'value' -p43523 -I00 -ssS'properties' -p43524 -(dp43525 -S'default_value' -p43526 -(dp43527 -S'editable' -p43528 -I00 -sS'value' -p43529 -NssS'summary_default' -p43530 -(dp43531 -S'editable' -p43532 -I00 -sS'value' -p43533 -S'none' -p43534 -sssS'description' -p43535 -(dp43536 -S'editable' -p43537 -I01 -sS'value' -p43538 -g47 -sssS'element' -p43539 -(dp43540 -S'mandatory' -p43541 -(dp43542 -S'editable' -p43543 -I00 -sS'value' -p43544 -I00 -ssS'name' -p43545 -(dp43546 -S'editable' -p43547 -I01 -sS'value' -p43548 -S'Element' -p43549 -ssS'data_type' -p43550 -(dp43551 -S'editable' -p43552 -I00 -sS'value' -p43553 -S'entity' -p43554 -ssS'entity_type' -p43555 -(dp43556 -S'editable' -p43557 -I00 -sS'value' -p43558 -S'ElementShotConnection' -p43559 -ssS'editable' -p43560 -(dp43561 -S'editable' -p43562 -I00 -sS'value' -p43563 -I00 -ssS'unique' -p43564 -(dp43565 -S'editable' -p43566 -I00 -sS'value' -p43567 -I00 -ssS'properties' -p43568 -(dp43569 -S'default_value' -p43570 -(dp43571 -S'editable' -p43572 -I00 -sS'value' -p43573 -NssS'summary_default' -p43574 -(dp43575 -S'editable' -p43576 -I00 -sS'value' -p43577 -S'none' -p43578 -ssS'valid_types' -p43579 -(dp43580 -S'editable' -p43581 -I00 -sS'value' -p43582 -(lp43583 -S'Element' -p43584 -asssS'description' -p43585 -(dp43586 -S'editable' -p43587 -I01 -sS'value' -p43588 -g47 -ssssS'HumanUser' -p43589 -(dp43590 -S'file_access' -p43591 -(dp43592 -S'mandatory' -p43593 -(dp43594 -S'editable' -p43595 -I00 -sS'value' -p43596 -I00 -ssS'name' -p43597 -(dp43598 -S'editable' -p43599 -I01 -sS'value' -p43600 -S'File Access' -p43601 -ssS'data_type' -p43602 -(dp43603 -S'editable' -p43604 -I00 -sS'value' -p43605 -S'checkbox' -p43606 -ssS'entity_type' -p43607 -(dp43608 -S'editable' -p43609 -I00 -sS'value' -p43610 -S'HumanUser' -p43611 -ssS'editable' -p43612 -(dp43613 -S'editable' -p43614 -I00 -sS'value' -p43615 -I01 -ssS'unique' -p43616 -(dp43617 -S'editable' -p43618 -I00 -sS'value' -p43619 -I00 -ssS'properties' -p43620 -(dp43621 -S'default_value' -p43622 -(dp43623 -S'editable' -p43624 -I00 -sS'value' -p43625 -I01 -ssS'summary_default' -p43626 -(dp43627 -S'editable' -p43628 -I01 -sS'value' -p43629 -S'none' -p43630 -sssS'description' -p43631 -(dp43632 -S'editable' -p43633 -I01 -sS'value' -p43634 -g47 -sssS'email_all_deliveries' -p43635 -(dp43636 -S'mandatory' -p43637 -(dp43638 -S'editable' -p43639 -I00 -sS'value' -p43640 -I00 -ssS'name' -p43641 -(dp43642 -S'editable' -p43643 -I01 -sS'value' -p43644 -S'Subscribe to All Delivery Emails' -p43645 -ssS'data_type' -p43646 -(dp43647 -S'editable' -p43648 -I00 -sS'value' -p43649 -S'checkbox' -p43650 -ssS'entity_type' -p43651 -(dp43652 -S'editable' -p43653 -I00 -sS'value' -p43654 -S'HumanUser' -p43655 -ssS'editable' -p43656 -(dp43657 -S'editable' -p43658 -I00 -sS'value' -p43659 -I01 -ssS'unique' -p43660 -(dp43661 -S'editable' -p43662 -I00 -sS'value' -p43663 -I00 -ssS'properties' -p43664 -(dp43665 -S'default_value' -p43666 -(dp43667 -S'editable' -p43668 -I00 -sS'value' -p43669 -I00 -ssS'summary_default' -p43670 -(dp43671 -S'editable' -p43672 -I01 -sS'value' -p43673 -S'none' -p43674 -sssS'description' -p43675 -(dp43676 -S'editable' -p43677 -I01 -sS'value' -p43678 -g47 -sssS'email_notes' -p43679 -(dp43680 -S'mandatory' -p43681 -(dp43682 -S'editable' -p43683 -I00 -sS'value' -p43684 -I00 -ssS'name' -p43685 -(dp43686 -S'editable' -p43687 -I01 -sS'value' -p43688 -S'Subscribe to My Notes Emails' -p43689 -ssS'data_type' -p43690 -(dp43691 -S'editable' -p43692 -I00 -sS'value' -p43693 -S'checkbox' -p43694 -ssS'entity_type' -p43695 -(dp43696 -S'editable' -p43697 -I00 -sS'value' -p43698 -S'HumanUser' -p43699 -ssS'editable' -p43700 -(dp43701 -S'editable' -p43702 -I00 -sS'value' -p43703 -I01 -ssS'unique' -p43704 -(dp43705 -S'editable' -p43706 -I00 -sS'value' -p43707 -I00 -ssS'properties' -p43708 -(dp43709 -S'default_value' -p43710 -(dp43711 -S'editable' -p43712 -I00 -sS'value' -p43713 -I00 -ssS'summary_default' -p43714 -(dp43715 -S'editable' -p43716 -I01 -sS'value' -p43717 -S'none' -p43718 -sssS'description' -p43719 -(dp43720 -S'editable' -p43721 -I01 -sS'value' -p43722 -g47 -sssS'image' -p43723 -(dp43724 -S'mandatory' -p43725 -(dp43726 -S'editable' -p43727 -I00 -sS'value' -p43728 -I00 -ssS'name' -p43729 -(dp43730 -S'editable' -p43731 -I01 -sS'value' -p43732 -S'Thumbnail' -p43733 -ssS'data_type' -p43734 -(dp43735 -S'editable' -p43736 -I00 -sS'value' -p43737 -S'image' -p43738 -ssS'entity_type' -p43739 -(dp43740 -S'editable' -p43741 -I00 -sS'value' -p43742 -S'HumanUser' -p43743 -ssS'editable' -p43744 -(dp43745 -S'editable' -p43746 -I00 -sS'value' -p43747 -I01 -ssS'unique' -p43748 -(dp43749 -S'editable' -p43750 -I00 -sS'value' -p43751 -I00 -ssS'properties' -p43752 -(dp43753 -S'default_value' -p43754 -(dp43755 -S'editable' -p43756 -I00 -sS'value' -p43757 -NssS'summary_default' -p43758 -(dp43759 -S'editable' -p43760 -I01 -sS'value' -p43761 -S'none' -p43762 -sssS'description' -p43763 -(dp43764 -S'editable' -p43765 -I01 -sS'value' -p43766 -g47 -sssS'updated_at' -p43767 -(dp43768 -S'mandatory' -p43769 -(dp43770 -S'editable' -p43771 -I00 -sS'value' -p43772 -I00 -ssS'name' -p43773 -(dp43774 -S'editable' -p43775 -I01 -sS'value' -p43776 -S'Date Updated' -p43777 -ssS'data_type' -p43778 -(dp43779 -S'editable' -p43780 -I00 -sS'value' -p43781 -S'date_time' -p43782 -ssS'entity_type' -p43783 -(dp43784 -S'editable' -p43785 -I00 -sS'value' -p43786 -S'HumanUser' -p43787 -ssS'editable' -p43788 -(dp43789 -S'editable' -p43790 -I00 -sS'value' -p43791 -I00 -ssS'unique' -p43792 -(dp43793 -S'editable' -p43794 -I00 -sS'value' -p43795 -I00 -ssS'properties' -p43796 -(dp43797 -S'default_value' -p43798 -(dp43799 -S'editable' -p43800 -I00 -sS'value' -p43801 -NssS'summary_default' -p43802 -(dp43803 -S'editable' -p43804 -I01 -sS'value' -p43805 -S'none' -p43806 -sssS'description' -p43807 -(dp43808 -S'editable' -p43809 -I01 -sS'value' -p43810 -g47 -sssS'password_change_next_login' -p43811 -(dp43812 -S'mandatory' -p43813 -(dp43814 -S'editable' -p43815 -I00 -sS'value' -p43816 -I00 -ssS'name' -p43817 -(dp43818 -S'editable' -p43819 -I01 -sS'value' -p43820 -S'Require a change of password at the next sign in' -p43821 -ssS'data_type' -p43822 -(dp43823 -S'editable' -p43824 -I00 -sS'value' -p43825 -S'checkbox' -p43826 -ssS'entity_type' -p43827 -(dp43828 -S'editable' -p43829 -I00 -sS'value' -p43830 -S'HumanUser' -p43831 -ssS'editable' -p43832 -(dp43833 -S'editable' -p43834 -I00 -sS'value' -p43835 -I01 -ssS'unique' -p43836 -(dp43837 -S'editable' -p43838 -I00 -sS'value' -p43839 -I00 -ssS'properties' -p43840 -(dp43841 -S'default_value' -p43842 -(dp43843 -S'editable' -p43844 -I00 -sS'value' -p43845 -I00 -ssS'summary_default' -p43846 -(dp43847 -S'editable' -p43848 -I00 -sS'value' -p43849 -S'none' -p43850 -sssS'description' -p43851 -(dp43852 -S'editable' -p43853 -I01 -sS'value' -p43854 -g47 -sssS'email_inbox_general' -p43855 -(dp43856 -S'mandatory' -p43857 -(dp43858 -S'editable' -p43859 -I00 -sS'value' -p43860 -I00 -ssS'name' -p43861 -(dp43862 -S'editable' -p43863 -I01 -sS'value' -p43864 -S'Subscribe to My Inbox Update Emails' -p43865 -ssS'data_type' -p43866 -(dp43867 -S'editable' -p43868 -I00 -sS'value' -p43869 -S'checkbox' -p43870 -ssS'entity_type' -p43871 -(dp43872 -S'editable' -p43873 -I00 -sS'value' -p43874 -S'HumanUser' -p43875 -ssS'editable' -p43876 -(dp43877 -S'editable' -p43878 -I00 -sS'value' -p43879 -I01 -ssS'unique' -p43880 -(dp43881 -S'editable' -p43882 -I00 -sS'value' -p43883 -I00 -ssS'properties' -p43884 -(dp43885 -S'default_value' -p43886 -(dp43887 -S'editable' -p43888 -I00 -sS'value' -p43889 -NssS'summary_default' -p43890 -(dp43891 -S'editable' -p43892 -I01 -sS'value' -p43893 -S'none' -p43894 -sssS'description' -p43895 -(dp43896 -S'editable' -p43897 -I01 -sS'value' -p43898 -g47 -sssS'bookings' -p43899 -(dp43900 -S'mandatory' -p43901 -(dp43902 -S'editable' -p43903 -I00 -sS'value' -p43904 -I00 -ssS'name' -p43905 -(dp43906 -S'editable' -p43907 -I01 -sS'value' -p43908 -S'Bookings' -p43909 -ssS'data_type' -p43910 -(dp43911 -S'editable' -p43912 -I00 -sS'value' -p43913 -S'multi_entity' -p43914 -ssS'entity_type' -p43915 -(dp43916 -S'editable' -p43917 -I00 -sS'value' -p43918 -S'HumanUser' -p43919 -ssS'editable' -p43920 -(dp43921 -S'editable' -p43922 -I00 -sS'value' -p43923 -I00 -ssS'unique' -p43924 -(dp43925 -S'editable' -p43926 -I00 -sS'value' -p43927 -I00 -ssS'properties' -p43928 -(dp43929 -S'default_value' -p43930 -(dp43931 -S'editable' -p43932 -I00 -sS'value' -p43933 -NssS'summary_default' -p43934 -(dp43935 -S'editable' -p43936 -I00 -sS'value' -p43937 -S'none' -p43938 -ssS'valid_types' -p43939 -(dp43940 -S'editable' -p43941 -I00 -sS'value' -p43942 -(lp43943 -S'Booking' -p43944 -asssS'description' -p43945 -(dp43946 -S'editable' -p43947 -I01 -sS'value' -p43948 -g47 -sssS'banners' -p43949 -(dp43950 -S'mandatory' -p43951 -(dp43952 -S'editable' -p43953 -I00 -sS'value' -p43954 -I00 -ssS'name' -p43955 -(dp43956 -S'editable' -p43957 -I01 -sS'value' -p43958 -S'Banners' -p43959 -ssS'data_type' -p43960 -(dp43961 -S'editable' -p43962 -I00 -sS'value' -p43963 -S'multi_entity' -p43964 -ssS'entity_type' -p43965 -(dp43966 -S'editable' -p43967 -I00 -sS'value' -p43968 -S'HumanUser' -p43969 -ssS'editable' -p43970 -(dp43971 -S'editable' -p43972 -I00 -sS'value' -p43973 -I01 -ssS'unique' -p43974 -(dp43975 -S'editable' -p43976 -I00 -sS'value' -p43977 -I00 -ssS'properties' -p43978 -(dp43979 -S'default_value' -p43980 -(dp43981 -S'editable' -p43982 -I00 -sS'value' -p43983 -NssS'summary_default' -p43984 -(dp43985 -S'editable' -p43986 -I00 -sS'value' -p43987 -S'none' -p43988 -ssS'valid_types' -p43989 -(dp43990 -S'editable' -p43991 -I00 -sS'value' -p43992 -(lp43993 -S'Banners' -p43994 -asssS'description' -p43995 -(dp43996 -S'editable' -p43997 -I01 -sS'value' -p43998 -g47 -sssS'locked_until' -p43999 -(dp44000 -S'mandatory' -p44001 -(dp44002 -S'editable' -p44003 -I00 -sS'value' -p44004 -I00 -ssS'name' -p44005 -(dp44006 -S'editable' -p44007 -I01 -sS'value' -p44008 -S'Locked Until' -p44009 -ssS'data_type' -p44010 -(dp44011 -S'editable' -p44012 -I00 -sS'value' -p44013 -S'date_time' -p44014 -ssS'entity_type' -p44015 -(dp44016 -S'editable' -p44017 -I00 -sS'value' -p44018 -S'HumanUser' -p44019 -ssS'editable' -p44020 -(dp44021 -S'editable' -p44022 -I00 -sS'value' -p44023 -I01 -ssS'unique' -p44024 -(dp44025 -S'editable' -p44026 -I00 -sS'value' -p44027 -I00 -ssS'properties' -p44028 -(dp44029 -S'default_value' -p44030 -(dp44031 -S'editable' -p44032 -I00 -sS'value' -p44033 -NssS'summary_default' -p44034 -(dp44035 -S'editable' -p44036 -I00 -sS'value' -p44037 -S'none' -p44038 -sssS'description' -p44039 -(dp44040 -S'editable' -p44041 -I01 -sS'value' -p44042 -g47 -sssS'password_proxy' -p44043 -(dp44044 -S'mandatory' -p44045 -(dp44046 -S'editable' -p44047 -I00 -sS'value' -p44048 -I00 -ssS'name' -p44049 -(dp44050 -S'editable' -p44051 -I01 -sS'value' -p44052 -S'Password' -p44053 -ssS'data_type' -p44054 -(dp44055 -S'editable' -p44056 -I00 -sS'value' -p44057 -S'password' -p44058 -ssS'entity_type' -p44059 -(dp44060 -S'editable' -p44061 -I00 -sS'value' -p44062 -S'HumanUser' -p44063 -ssS'editable' -p44064 -(dp44065 -S'editable' -p44066 -I00 -sS'value' -p44067 -I00 -ssS'unique' -p44068 -(dp44069 -S'editable' -p44070 -I00 -sS'value' -p44071 -I00 -ssS'properties' -p44072 -(dp44073 -S'default_value' -p44074 -(dp44075 -S'editable' -p44076 -I00 -sS'value' -p44077 -NssS'summary_default' -p44078 -(dp44079 -S'editable' -p44080 -I01 -sS'value' -p44081 -S'none' -p44082 -sssS'description' -p44083 -(dp44084 -S'editable' -p44085 -I01 -sS'value' -p44086 -g47 -sssS'cached_display_name' -p44087 -(dp44088 -S'mandatory' -p44089 -(dp44090 -S'editable' -p44091 -I00 -sS'value' -p44092 -I00 -ssS'name' -p44093 -(dp44094 -S'editable' -p44095 -I01 -sS'value' -p44096 -S'Cached Display Name' -p44097 -ssS'data_type' -p44098 -(dp44099 -S'editable' -p44100 -I00 -sS'value' -p44101 -S'text' -p44102 -ssS'entity_type' -p44103 -(dp44104 -S'editable' -p44105 -I00 -sS'value' -p44106 -S'HumanUser' -p44107 -ssS'editable' -p44108 -(dp44109 -S'editable' -p44110 -I00 -sS'value' -p44111 -I01 -ssS'unique' -p44112 -(dp44113 -S'editable' -p44114 -I00 -sS'value' -p44115 -I00 -ssS'properties' -p44116 -(dp44117 -S'default_value' -p44118 -(dp44119 -S'editable' -p44120 -I00 -sS'value' -p44121 -NssS'summary_default' -p44122 -(dp44123 -S'editable' -p44124 -I00 -sS'value' -p44125 -S'none' -p44126 -sssS'description' -p44127 -(dp44128 -S'editable' -p44129 -I01 -sS'value' -p44130 -g47 -sssS'id' -p44131 -(dp44132 -S'mandatory' -p44133 -(dp44134 -S'editable' -p44135 -I00 -sS'value' -p44136 -I00 -ssS'name' -p44137 -(dp44138 -S'editable' -p44139 -I01 -sS'value' -p44140 -S'Id' -p44141 -ssS'data_type' -p44142 -(dp44143 -S'editable' -p44144 -I00 -sS'value' -p44145 -S'number' -p44146 -ssS'entity_type' -p44147 -(dp44148 -S'editable' -p44149 -I00 -sS'value' -p44150 -S'HumanUser' -p44151 -ssS'editable' -p44152 -(dp44153 -S'editable' -p44154 -I00 -sS'value' -p44155 -I00 -ssS'unique' -p44156 -(dp44157 -S'editable' -p44158 -I00 -sS'value' -p44159 -I00 -ssS'properties' -p44160 -(dp44161 -S'default_value' -p44162 -(dp44163 -S'editable' -p44164 -I00 -sS'value' -p44165 -NssS'summary_default' -p44166 -(dp44167 -S'editable' -p44168 -I01 -sS'value' -p44169 -S'none' -p44170 -sssS'description' -p44171 -(dp44172 -S'editable' -p44173 -I01 -sS'value' -p44174 -g47 -sssS'email_version_link_cc' -p44175 -(dp44176 -S'mandatory' -p44177 -(dp44178 -S'editable' -p44179 -I00 -sS'value' -p44180 -I00 -ssS'name' -p44181 -(dp44182 -S'editable' -p44183 -I01 -sS'value' -p44184 -S"Subscribe to Version Emails for CC'd Link" -p44185 -ssS'data_type' -p44186 -(dp44187 -S'editable' -p44188 -I00 -sS'value' -p44189 -S'checkbox' -p44190 -ssS'entity_type' -p44191 -(dp44192 -S'editable' -p44193 -I00 -sS'value' -p44194 -S'HumanUser' -p44195 -ssS'editable' -p44196 -(dp44197 -S'editable' -p44198 -I00 -sS'value' -p44199 -I01 -ssS'unique' -p44200 -(dp44201 -S'editable' -p44202 -I00 -sS'value' -p44203 -I00 -ssS'properties' -p44204 -(dp44205 -S'default_value' -p44206 -(dp44207 -S'editable' -p44208 -I00 -sS'value' -p44209 -I00 -ssS'summary_default' -p44210 -(dp44211 -S'editable' -p44212 -I01 -sS'value' -p44213 -S'none' -p44214 -sssS'description' -p44215 -(dp44216 -S'editable' -p44217 -I01 -sS'value' -p44218 -g47 -sssS'home_page' -p44219 -(dp44220 -S'mandatory' -p44221 -(dp44222 -S'editable' -p44223 -I00 -sS'value' -p44224 -I00 -ssS'name' -p44225 -(dp44226 -S'editable' -p44227 -I01 -sS'value' -p44228 -S'Home Page' -p44229 -ssS'data_type' -p44230 -(dp44231 -S'editable' -p44232 -I00 -sS'value' -p44233 -S'list' -p44234 -ssS'entity_type' -p44235 -(dp44236 -S'editable' -p44237 -I00 -sS'value' -p44238 -S'HumanUser' -p44239 -ssS'editable' -p44240 -(dp44241 -S'editable' -p44242 -I00 -sS'value' -p44243 -I01 -ssS'unique' -p44244 -(dp44245 -S'editable' -p44246 -I00 -sS'value' -p44247 -I00 -ssS'properties' -p44248 -(dp44249 -S'default_value' -p44250 -(dp44251 -S'editable' -p44252 -I00 -sS'value' -p44253 -NssS'valid_values' -p44254 -(dp44255 -S'editable' -p44256 -I00 -sS'value' -p44257 -(lp44258 -S'home' -p44259 -aS'inbox' -p44260 -aS'my_tasks' -p44261 -aS'new_user_welcome' -p44262 -assS'summary_default' -p44263 -(dp44264 -S'editable' -p44265 -I00 -sS'value' -p44266 -S'none' -p44267 -sssS'description' -p44268 -(dp44269 -S'editable' -p44270 -I01 -sS'value' -p44271 -g47 -sssS'email_versions' -p44272 -(dp44273 -S'mandatory' -p44274 -(dp44275 -S'editable' -p44276 -I00 -sS'value' -p44277 -I00 -ssS'name' -p44278 -(dp44279 -S'editable' -p44280 -I01 -sS'value' -p44281 -S'Subscribe to My Version Emails' -p44282 -ssS'data_type' -p44283 -(dp44284 -S'editable' -p44285 -I00 -sS'value' -p44286 -S'checkbox' -p44287 -ssS'entity_type' -p44288 -(dp44289 -S'editable' -p44290 -I00 -sS'value' -p44291 -S'HumanUser' -p44292 -ssS'editable' -p44293 -(dp44294 -S'editable' -p44295 -I00 -sS'value' -p44296 -I01 -ssS'unique' -p44297 -(dp44298 -S'editable' -p44299 -I00 -sS'value' -p44300 -I00 -ssS'properties' -p44301 -(dp44302 -S'default_value' -p44303 -(dp44304 -S'editable' -p44305 -I00 -sS'value' -p44306 -I00 -ssS'summary_default' -p44307 -(dp44308 -S'editable' -p44309 -I01 -sS'value' -p44310 -S'none' -p44311 -sssS'description' -p44312 -(dp44313 -S'editable' -p44314 -I01 -sS'value' -p44315 -g47 -sssS'created_by' -p44316 -(dp44317 -S'mandatory' -p44318 -(dp44319 -S'editable' -p44320 -I00 -sS'value' -p44321 -I00 -ssS'name' -p44322 -(dp44323 -S'editable' -p44324 -I01 -sS'value' -p44325 -S'Created by' -p44326 -ssS'data_type' -p44327 -(dp44328 -S'editable' -p44329 -I00 -sS'value' -p44330 -S'entity' -p44331 -ssS'entity_type' -p44332 -(dp44333 -S'editable' -p44334 -I00 -sS'value' -p44335 -S'HumanUser' -p44336 -ssS'editable' -p44337 -(dp44338 -S'editable' -p44339 -I00 -sS'value' -p44340 -I00 -ssS'unique' -p44341 -(dp44342 -S'editable' -p44343 -I00 -sS'value' -p44344 -I00 -ssS'properties' -p44345 -(dp44346 -S'default_value' -p44347 -(dp44348 -S'editable' -p44349 -I00 -sS'value' -p44350 -NssS'summary_default' -p44351 -(dp44352 -S'editable' -p44353 -I01 -sS'value' -p44354 -S'none' -p44355 -ssS'valid_types' -p44356 -(dp44357 -S'editable' -p44358 -I01 -sS'value' -p44359 -(lp44360 -S'HumanUser' -p44361 -aS'ApiUser' -p44362 -asssS'description' -p44363 -(dp44364 -S'editable' -p44365 -I01 -sS'value' -p44366 -g47 -sssS'sg_status_list' -p44367 -(dp44368 -S'mandatory' -p44369 -(dp44370 -S'editable' -p44371 -I00 -sS'value' -p44372 -I00 -ssS'name' -p44373 -(dp44374 -S'editable' -p44375 -I01 -sS'value' -p44376 -S'Status' -p44377 -ssS'data_type' -p44378 -(dp44379 -S'editable' -p44380 -I00 -sS'value' -p44381 -S'status_list' -p44382 -ssS'entity_type' -p44383 -(dp44384 -S'editable' -p44385 -I00 -sS'value' -p44386 -S'HumanUser' -p44387 -ssS'editable' -p44388 -(dp44389 -S'editable' -p44390 -I00 -sS'value' -p44391 -I01 -ssS'unique' -p44392 -(dp44393 -S'editable' -p44394 -I00 -sS'value' -p44395 -I00 -ssS'properties' -p44396 -(dp44397 -S'default_value' -p44398 -(dp44399 -S'editable' -p44400 -I01 -sS'value' -p44401 -S'act' -p44402 -ssS'valid_values' -p44403 -(dp44404 -S'editable' -p44405 -I01 -sS'value' -p44406 -(lp44407 -S'act' -p44408 -aS'dis' -p44409 -assS'summary_default' -p44410 -(dp44411 -S'editable' -p44412 -I01 -sS'value' -p44413 -S'none' -p44414 -sssS'description' -p44415 -(dp44416 -S'editable' -p44417 -I01 -sS'value' -p44418 -g47 -sssS'department' -p44419 -(dp44420 -S'mandatory' -p44421 -(dp44422 -S'editable' -p44423 -I00 -sS'value' -p44424 -I00 -ssS'name' -p44425 -(dp44426 -S'editable' -p44427 -I01 -sS'value' -p44428 -S'Department' -p44429 -ssS'data_type' -p44430 -(dp44431 -S'editable' -p44432 -I00 -sS'value' -p44433 -S'entity' -p44434 -ssS'entity_type' -p44435 -(dp44436 -S'editable' -p44437 -I00 -sS'value' -p44438 -S'HumanUser' -p44439 -ssS'editable' -p44440 -(dp44441 -S'editable' -p44442 -I00 -sS'value' -p44443 -I01 -ssS'unique' -p44444 -(dp44445 -S'editable' -p44446 -I00 -sS'value' -p44447 -I00 -ssS'properties' -p44448 -(dp44449 -S'default_value' -p44450 -(dp44451 -S'editable' -p44452 -I00 -sS'value' -p44453 -NssS'summary_default' -p44454 -(dp44455 -S'editable' -p44456 -I01 -sS'value' -p44457 -S'none' -p44458 -ssS'valid_types' -p44459 -(dp44460 -S'editable' -p44461 -I01 -sS'value' -p44462 -(lp44463 -S'Department' -p44464 -asssS'description' -p44465 -(dp44466 -S'editable' -p44467 -I01 -sS'value' -p44468 -g47 -sssS'email_tickets' -p44469 -(dp44470 -S'mandatory' -p44471 -(dp44472 -S'editable' -p44473 -I00 -sS'value' -p44474 -I00 -ssS'name' -p44475 -(dp44476 -S'editable' -p44477 -I01 -sS'value' -p44478 -S'Subscribe to My Tickets Emails' -p44479 -ssS'data_type' -p44480 -(dp44481 -S'editable' -p44482 -I00 -sS'value' -p44483 -S'checkbox' -p44484 -ssS'entity_type' -p44485 -(dp44486 -S'editable' -p44487 -I00 -sS'value' -p44488 -S'HumanUser' -p44489 -ssS'editable' -p44490 -(dp44491 -S'editable' -p44492 -I00 -sS'value' -p44493 -I01 -ssS'unique' -p44494 -(dp44495 -S'editable' -p44496 -I00 -sS'value' -p44497 -I00 -ssS'properties' -p44498 -(dp44499 -S'default_value' -p44500 -(dp44501 -S'editable' -p44502 -I00 -sS'value' -p44503 -I00 -ssS'summary_default' -p44504 -(dp44505 -S'editable' -p44506 -I01 -sS'value' -p44507 -S'none' -p44508 -sssS'description' -p44509 -(dp44510 -S'editable' -p44511 -I01 -sS'value' -p44512 -g47 -sssS'email' -p44513 -(dp44514 -S'mandatory' -p44515 -(dp44516 -S'editable' -p44517 -I00 -sS'value' -p44518 -I00 -ssS'name' -p44519 -(dp44520 -S'editable' -p44521 -I01 -sS'value' -p44522 -S'Email' -p44523 -ssS'data_type' -p44524 -(dp44525 -S'editable' -p44526 -I00 -sS'value' -p44527 -S'text' -p44528 -ssS'entity_type' -p44529 -(dp44530 -S'editable' -p44531 -I00 -sS'value' -p44532 -S'HumanUser' -p44533 -ssS'editable' -p44534 -(dp44535 -S'editable' -p44536 -I00 -sS'value' -p44537 -I01 -ssS'unique' -p44538 -(dp44539 -S'editable' -p44540 -I00 -sS'value' -p44541 -I00 -ssS'properties' -p44542 -(dp44543 -S'default_value' -p44544 -(dp44545 -S'editable' -p44546 -I00 -sS'value' -p44547 -g47 -ssS'summary_default' -p44548 -(dp44549 -S'editable' -p44550 -I01 -sS'value' -p44551 -S'none' -p44552 -sssS'description' -p44553 -(dp44554 -S'editable' -p44555 -I01 -sS'value' -p44556 -g47 -sssS'pipeline_configurations' -p44557 -(dp44558 -S'mandatory' -p44559 -(dp44560 -S'editable' -p44561 -I00 -sS'value' -p44562 -I00 -ssS'name' -p44563 -(dp44564 -S'editable' -p44565 -I01 -sS'value' -p44566 -S'Pipeline Configurations' -p44567 -ssS'data_type' -p44568 -(dp44569 -S'editable' -p44570 -I00 -sS'value' -p44571 -S'multi_entity' -p44572 -ssS'entity_type' -p44573 -(dp44574 -S'editable' -p44575 -I00 -sS'value' -p44576 -S'HumanUser' -p44577 -ssS'editable' -p44578 -(dp44579 -S'editable' -p44580 -I00 -sS'value' -p44581 -I01 -ssS'unique' -p44582 -(dp44583 -S'editable' -p44584 -I00 -sS'value' -p44585 -I00 -ssS'properties' -p44586 -(dp44587 -S'default_value' -p44588 -(dp44589 -S'editable' -p44590 -I00 -sS'value' -p44591 -NssS'summary_default' -p44592 -(dp44593 -S'editable' -p44594 -I00 -sS'value' -p44595 -S'none' -p44596 -ssS'valid_types' -p44597 -(dp44598 -S'editable' -p44599 -I00 -sS'value' -p44600 -(lp44601 -S'PipelineConfiguration' -p44602 -asssS'description' -p44603 -(dp44604 -S'editable' -p44605 -I01 -sS'value' -p44606 -g47 -sssS'password_strength' -p44607 -(dp44608 -S'mandatory' -p44609 -(dp44610 -S'editable' -p44611 -I00 -sS'value' -p44612 -I00 -ssS'name' -p44613 -(dp44614 -S'editable' -p44615 -I01 -sS'value' -p44616 -S'Password Strength' -p44617 -ssS'data_type' -p44618 -(dp44619 -S'editable' -p44620 -I00 -sS'value' -p44621 -S'float' -p44622 -ssS'entity_type' -p44623 -(dp44624 -S'editable' -p44625 -I00 -sS'value' -p44626 -S'HumanUser' -p44627 -ssS'editable' -p44628 -(dp44629 -S'editable' -p44630 -I00 -sS'value' -p44631 -I01 -ssS'unique' -p44632 -(dp44633 -S'editable' -p44634 -I00 -sS'value' -p44635 -I00 -ssS'properties' -p44636 -(dp44637 -S'default_value' -p44638 -(dp44639 -S'editable' -p44640 -I00 -sS'value' -p44641 -NssS'summary_default' -p44642 -(dp44643 -S'editable' -p44644 -I00 -sS'value' -p44645 -S'none' -p44646 -sssS'description' -p44647 -(dp44648 -S'editable' -p44649 -I01 -sS'value' -p44650 -g47 -sssS'updated_by' -p44651 -(dp44652 -S'mandatory' -p44653 -(dp44654 -S'editable' -p44655 -I00 -sS'value' -p44656 -I00 -ssS'name' -p44657 -(dp44658 -S'editable' -p44659 -I01 -sS'value' -p44660 -S'Updated by' -p44661 -ssS'data_type' -p44662 -(dp44663 -S'editable' -p44664 -I00 -sS'value' -p44665 -S'entity' -p44666 -ssS'entity_type' -p44667 -(dp44668 -S'editable' -p44669 -I00 -sS'value' -p44670 -S'HumanUser' -p44671 -ssS'editable' -p44672 -(dp44673 -S'editable' -p44674 -I00 -sS'value' -p44675 -I00 -ssS'unique' -p44676 -(dp44677 -S'editable' -p44678 -I00 -sS'value' -p44679 -I00 -ssS'properties' -p44680 -(dp44681 -S'default_value' -p44682 -(dp44683 -S'editable' -p44684 -I00 -sS'value' -p44685 -NssS'summary_default' -p44686 -(dp44687 -S'editable' -p44688 -I01 -sS'value' -p44689 -S'none' -p44690 -ssS'valid_types' -p44691 -(dp44692 -S'editable' -p44693 -I01 -sS'value' -p44694 -(lp44695 -S'HumanUser' -p44696 -aS'ApiUser' -p44697 -asssS'description' -p44698 -(dp44699 -S'editable' -p44700 -I01 -sS'value' -p44701 -g47 -sssS'firstname' -p44702 -(dp44703 -S'mandatory' -p44704 -(dp44705 -S'editable' -p44706 -I00 -sS'value' -p44707 -I00 -ssS'name' -p44708 -(dp44709 -S'editable' -p44710 -I01 -sS'value' -p44711 -S'First Name' -p44712 -ssS'data_type' -p44713 -(dp44714 -S'editable' -p44715 -I00 -sS'value' -p44716 -S'text' -p44717 -ssS'entity_type' -p44718 -(dp44719 -S'editable' -p44720 -I00 -sS'value' -p44721 -S'HumanUser' -p44722 -ssS'editable' -p44723 -(dp44724 -S'editable' -p44725 -I00 -sS'value' -p44726 -I01 -ssS'unique' -p44727 -(dp44728 -S'editable' -p44729 -I00 -sS'value' -p44730 -I00 -ssS'properties' -p44731 -(dp44732 -S'default_value' -p44733 -(dp44734 -S'editable' -p44735 -I00 -sS'value' -p44736 -NssS'summary_default' -p44737 -(dp44738 -S'editable' -p44739 -I01 -sS'value' -p44740 -S'none' -p44741 -sssS'description' -p44742 -(dp44743 -S'editable' -p44744 -I01 -sS'value' -p44745 -g47 -sssS'app_welcomes' -p44746 -(dp44747 -S'mandatory' -p44748 -(dp44749 -S'editable' -p44750 -I00 -sS'value' -p44751 -I00 -ssS'name' -p44752 -(dp44753 -S'editable' -p44754 -I01 -sS'value' -p44755 -S'App Welcomes' -p44756 -ssS'data_type' -p44757 -(dp44758 -S'editable' -p44759 -I00 -sS'value' -p44760 -S'multi_entity' -p44761 -ssS'entity_type' -p44762 -(dp44763 -S'editable' -p44764 -I00 -sS'value' -p44765 -S'HumanUser' -p44766 -ssS'editable' -p44767 -(dp44768 -S'editable' -p44769 -I00 -sS'value' -p44770 -I01 -ssS'unique' -p44771 -(dp44772 -S'editable' -p44773 -I00 -sS'value' -p44774 -I00 -ssS'properties' -p44775 -(dp44776 -S'default_value' -p44777 -(dp44778 -S'editable' -p44779 -I00 -sS'value' -p44780 -NssS'summary_default' -p44781 -(dp44782 -S'editable' -p44783 -I00 -sS'value' -p44784 -S'none' -p44785 -ssS'valid_types' -p44786 -(dp44787 -S'editable' -p44788 -I00 -sS'value' -p44789 -(lp44790 -S'AppWelcome' -p44791 -asssS'description' -p44792 -(dp44793 -S'editable' -p44794 -I01 -sS'value' -p44795 -g47 -sssS'lastname' -p44796 -(dp44797 -S'mandatory' -p44798 -(dp44799 -S'editable' -p44800 -I00 -sS'value' -p44801 -I00 -ssS'name' -p44802 -(dp44803 -S'editable' -p44804 -I01 -sS'value' -p44805 -S'Last Name' -p44806 -ssS'data_type' -p44807 -(dp44808 -S'editable' -p44809 -I00 -sS'value' -p44810 -S'text' -p44811 -ssS'entity_type' -p44812 -(dp44813 -S'editable' -p44814 -I00 -sS'value' -p44815 -S'HumanUser' -p44816 -ssS'editable' -p44817 -(dp44818 -S'editable' -p44819 -I00 -sS'value' -p44820 -I01 -ssS'unique' -p44821 -(dp44822 -S'editable' -p44823 -I00 -sS'value' -p44824 -I00 -ssS'properties' -p44825 -(dp44826 -S'default_value' -p44827 -(dp44828 -S'editable' -p44829 -I00 -sS'value' -p44830 -NssS'summary_default' -p44831 -(dp44832 -S'editable' -p44833 -I01 -sS'value' -p44834 -S'none' -p44835 -sssS'description' -p44836 -(dp44837 -S'editable' -p44838 -I01 -sS'value' -p44839 -g47 -sssS'groups' -p44840 -(dp44841 -S'mandatory' -p44842 -(dp44843 -S'editable' -p44844 -I00 -sS'value' -p44845 -I00 -ssS'name' -p44846 -(dp44847 -S'editable' -p44848 -I01 -sS'value' -p44849 -S'Groups' -p44850 -ssS'data_type' -p44851 -(dp44852 -S'editable' -p44853 -I00 -sS'value' -p44854 -S'multi_entity' -p44855 -ssS'entity_type' -p44856 -(dp44857 -S'editable' -p44858 -I00 -sS'value' -p44859 -S'HumanUser' -p44860 -ssS'editable' -p44861 -(dp44862 -S'editable' -p44863 -I00 -sS'value' -p44864 -I01 -ssS'unique' -p44865 -(dp44866 -S'editable' -p44867 -I00 -sS'value' -p44868 -I00 -ssS'properties' -p44869 -(dp44870 -S'default_value' -p44871 -(dp44872 -S'editable' -p44873 -I00 -sS'value' -p44874 -NssS'summary_default' -p44875 -(dp44876 -S'editable' -p44877 -I01 -sS'value' -p44878 -S'none' -p44879 -ssS'valid_types' -p44880 -(dp44881 -S'editable' -p44882 -I01 -sS'value' -p44883 -(lp44884 -S'Group' -p44885 -asssS'description' -p44886 -(dp44887 -S'editable' -p44888 -I01 -sS'value' -p44889 -g47 -sssS'email_all_versions' -p44890 -(dp44891 -S'mandatory' -p44892 -(dp44893 -S'editable' -p44894 -I00 -sS'value' -p44895 -I00 -ssS'name' -p44896 -(dp44897 -S'editable' -p44898 -I01 -sS'value' -p44899 -S'Subscribe to All Version Emails' -p44900 -ssS'data_type' -p44901 -(dp44902 -S'editable' -p44903 -I00 -sS'value' -p44904 -S'checkbox' -p44905 -ssS'entity_type' -p44906 -(dp44907 -S'editable' -p44908 -I00 -sS'value' -p44909 -S'HumanUser' -p44910 -ssS'editable' -p44911 -(dp44912 -S'editable' -p44913 -I00 -sS'value' -p44914 -I01 -ssS'unique' -p44915 -(dp44916 -S'editable' -p44917 -I00 -sS'value' -p44918 -I00 -ssS'properties' -p44919 -(dp44920 -S'default_value' -p44921 -(dp44922 -S'editable' -p44923 -I00 -sS'value' -p44924 -I00 -ssS'summary_default' -p44925 -(dp44926 -S'editable' -p44927 -I01 -sS'value' -p44928 -S'none' -p44929 -sssS'description' -p44930 -(dp44931 -S'editable' -p44932 -I01 -sS'value' -p44933 -g47 -sssS'email_inbox_notes' -p44934 -(dp44935 -S'mandatory' -p44936 -(dp44937 -S'editable' -p44938 -I00 -sS'value' -p44939 -I00 -ssS'name' -p44940 -(dp44941 -S'editable' -p44942 -I01 -sS'value' -p44943 -S'Subscribe to My Inbox Note Emails' -p44944 -ssS'data_type' -p44945 -(dp44946 -S'editable' -p44947 -I00 -sS'value' -p44948 -S'checkbox' -p44949 -ssS'entity_type' -p44950 -(dp44951 -S'editable' -p44952 -I00 -sS'value' -p44953 -S'HumanUser' -p44954 -ssS'editable' -p44955 -(dp44956 -S'editable' -p44957 -I00 -sS'value' -p44958 -I01 -ssS'unique' -p44959 -(dp44960 -S'editable' -p44961 -I00 -sS'value' -p44962 -I00 -ssS'properties' -p44963 -(dp44964 -S'default_value' -p44965 -(dp44966 -S'editable' -p44967 -I00 -sS'value' -p44968 -NssS'summary_default' -p44969 -(dp44970 -S'editable' -p44971 -I01 -sS'value' -p44972 -S'none' -p44973 -sssS'description' -p44974 -(dp44975 -S'editable' -p44976 -I01 -sS'value' -p44977 -g47 -sssS'projects' -p44978 -(dp44979 -S'mandatory' -p44980 -(dp44981 -S'editable' -p44982 -I00 -sS'value' -p44983 -I00 -ssS'name' -p44984 -(dp44985 -S'editable' -p44986 -I01 -sS'value' -p44987 -S'Projects' -p44988 -ssS'data_type' -p44989 -(dp44990 -S'editable' -p44991 -I00 -sS'value' -p44992 -S'multi_entity' -p44993 -ssS'entity_type' -p44994 -(dp44995 -S'editable' -p44996 -I00 -sS'value' -p44997 -S'HumanUser' -p44998 -ssS'editable' -p44999 -(dp45000 -S'editable' -p45001 -I00 -sS'value' -p45002 -I01 -ssS'unique' -p45003 -(dp45004 -S'editable' -p45005 -I00 -sS'value' -p45006 -I00 -ssS'properties' -p45007 -(dp45008 -S'default_value' -p45009 -(dp45010 -S'editable' -p45011 -I00 -sS'value' -p45012 -NssS'summary_default' -p45013 -(dp45014 -S'editable' -p45015 -I01 -sS'value' -p45016 -S'none' -p45017 -ssS'valid_types' -p45018 -(dp45019 -S'editable' -p45020 -I01 -sS'value' -p45021 -(lp45022 -S'Project' -p45023 -asssS'description' -p45024 -(dp45025 -S'editable' -p45026 -I01 -sS'value' -p45027 -g47 -sssS'enable_tank_integration' -p45028 -(dp45029 -S'mandatory' -p45030 -(dp45031 -S'editable' -p45032 -I00 -sS'value' -p45033 -I00 -ssS'name' -p45034 -(dp45035 -S'editable' -p45036 -I01 -sS'value' -p45037 -S'Enable Tank Integration' -p45038 -ssS'data_type' -p45039 -(dp45040 -S'editable' -p45041 -I00 -sS'value' -p45042 -S'checkbox' -p45043 -ssS'entity_type' -p45044 -(dp45045 -S'editable' -p45046 -I00 -sS'value' -p45047 -S'HumanUser' -p45048 -ssS'editable' -p45049 -(dp45050 -S'editable' -p45051 -I00 -sS'value' -p45052 -I01 -ssS'unique' -p45053 -(dp45054 -S'editable' -p45055 -I00 -sS'value' -p45056 -I00 -ssS'properties' -p45057 -(dp45058 -S'default_value' -p45059 -(dp45060 -S'editable' -p45061 -I00 -sS'value' -p45062 -I01 -ssS'summary_default' -p45063 -(dp45064 -S'editable' -p45065 -I01 -sS'value' -p45066 -S'none' -p45067 -sssS'description' -p45068 -(dp45069 -S'editable' -p45070 -I01 -sS'value' -p45071 -g47 -sssS'email_deliveries' -p45072 -(dp45073 -S'mandatory' -p45074 -(dp45075 -S'editable' -p45076 -I00 -sS'value' -p45077 -I00 -ssS'name' -p45078 -(dp45079 -S'editable' -p45080 -I01 -sS'value' -p45081 -S'Subscribe to My Deliveries Emails' -p45082 -ssS'data_type' -p45083 -(dp45084 -S'editable' -p45085 -I00 -sS'value' -p45086 -S'checkbox' -p45087 -ssS'entity_type' -p45088 -(dp45089 -S'editable' -p45090 -I00 -sS'value' -p45091 -S'HumanUser' -p45092 -ssS'editable' -p45093 -(dp45094 -S'editable' -p45095 -I00 -sS'value' -p45096 -I01 -ssS'unique' -p45097 -(dp45098 -S'editable' -p45099 -I00 -sS'value' -p45100 -I00 -ssS'properties' -p45101 -(dp45102 -S'default_value' -p45103 -(dp45104 -S'editable' -p45105 -I00 -sS'value' -p45106 -I00 -ssS'summary_default' -p45107 -(dp45108 -S'editable' -p45109 -I01 -sS'value' -p45110 -S'none' -p45111 -sssS'description' -p45112 -(dp45113 -S'editable' -p45114 -I01 -sS'value' -p45115 -g47 -sssS'name' -p45116 -(dp45117 -S'mandatory' -p45118 -(dp45119 -S'editable' -p45120 -I00 -sS'value' -p45121 -I01 -ssS'name' -p45122 -(dp45123 -S'editable' -p45124 -I01 -sS'value' -p45125 -S'Name' -p45126 -ssS'data_type' -p45127 -(dp45128 -S'editable' -p45129 -I00 -sS'value' -p45130 -S'text' -p45131 -ssS'entity_type' -p45132 -(dp45133 -S'editable' -p45134 -I00 -sS'value' -p45135 -S'HumanUser' -p45136 -ssS'editable' -p45137 -(dp45138 -S'editable' -p45139 -I00 -sS'value' -p45140 -I01 -ssS'unique' -p45141 -(dp45142 -S'editable' -p45143 -I00 -sS'value' -p45144 -I00 -ssS'properties' -p45145 -(dp45146 -S'default_value' -p45147 -(dp45148 -S'editable' -p45149 -I00 -sS'value' -p45150 -NssS'summary_default' -p45151 -(dp45152 -S'editable' -p45153 -I01 -sS'value' -p45154 -S'none' -p45155 -sssS'description' -p45156 -(dp45157 -S'editable' -p45158 -I01 -sS'value' -p45159 -g47 -sssS'tag_list' -p45160 -(dp45161 -S'mandatory' -p45162 -(dp45163 -S'editable' -p45164 -I00 -sS'value' -p45165 -I00 -ssS'name' -p45166 -(dp45167 -S'editable' -p45168 -I01 -sS'value' -p45169 -S'Tags' -p45170 -ssS'data_type' -p45171 -(dp45172 -S'editable' -p45173 -I00 -sS'value' -p45174 -S'tag_list' -p45175 -ssS'entity_type' -p45176 -(dp45177 -S'editable' -p45178 -I00 -sS'value' -p45179 -S'HumanUser' -p45180 -ssS'editable' -p45181 -(dp45182 -S'editable' -p45183 -I00 -sS'value' -p45184 -I01 -ssS'unique' -p45185 -(dp45186 -S'editable' -p45187 -I00 -sS'value' -p45188 -I00 -ssS'properties' -p45189 -(dp45190 -S'default_value' -p45191 -(dp45192 -S'editable' -p45193 -I00 -sS'value' -p45194 -NssS'summary_default' -p45195 -(dp45196 -S'editable' -p45197 -I01 -sS'value' -p45198 -S'none' -p45199 -ssS'valid_types' -p45200 -(dp45201 -S'editable' -p45202 -I01 -sS'value' -p45203 -(lp45204 -S'Tag' -p45205 -asssS'description' -p45206 -(dp45207 -S'editable' -p45208 -I01 -sS'value' -p45209 -g47 -sssS'created_at' -p45210 -(dp45211 -S'mandatory' -p45212 -(dp45213 -S'editable' -p45214 -I00 -sS'value' -p45215 -I00 -ssS'name' -p45216 -(dp45217 -S'editable' -p45218 -I01 -sS'value' -p45219 -S'Date Created' -p45220 -ssS'data_type' -p45221 -(dp45222 -S'editable' -p45223 -I00 -sS'value' -p45224 -S'date_time' -p45225 -ssS'entity_type' -p45226 -(dp45227 -S'editable' -p45228 -I00 -sS'value' -p45229 -S'HumanUser' -p45230 -ssS'editable' -p45231 -(dp45232 -S'editable' -p45233 -I00 -sS'value' -p45234 -I00 -ssS'unique' -p45235 -(dp45236 -S'editable' -p45237 -I00 -sS'value' -p45238 -I00 -ssS'properties' -p45239 -(dp45240 -S'default_value' -p45241 -(dp45242 -S'editable' -p45243 -I00 -sS'value' -p45244 -NssS'summary_default' -p45245 -(dp45246 -S'editable' -p45247 -I01 -sS'value' -p45248 -S'none' -p45249 -sssS'description' -p45250 -(dp45251 -S'editable' -p45252 -I01 -sS'value' -p45253 -g47 -sssS'permission_rule_set' -p45254 -(dp45255 -S'mandatory' -p45256 -(dp45257 -S'editable' -p45258 -I00 -sS'value' -p45259 -I00 -ssS'name' -p45260 -(dp45261 -S'editable' -p45262 -I01 -sS'value' -p45263 -S'Permission Group' -p45264 -ssS'data_type' -p45265 -(dp45266 -S'editable' -p45267 -I00 -sS'value' -p45268 -S'entity' -p45269 -ssS'entity_type' -p45270 -(dp45271 -S'editable' -p45272 -I00 -sS'value' -p45273 -S'HumanUser' -p45274 -ssS'editable' -p45275 -(dp45276 -S'editable' -p45277 -I00 -sS'value' -p45278 -I00 -ssS'unique' -p45279 -(dp45280 -S'editable' -p45281 -I00 -sS'value' -p45282 -I00 -ssS'properties' -p45283 -(dp45284 -S'default_value' -p45285 -(dp45286 -S'editable' -p45287 -I00 -sS'value' -p45288 -NssS'summary_default' -p45289 -(dp45290 -S'editable' -p45291 -I01 -sS'value' -p45292 -S'none' -p45293 -ssS'valid_types' -p45294 -(dp45295 -S'editable' -p45296 -I01 -sS'value' -p45297 -(lp45298 -S'PermissionRuleSet' -p45299 -asssS'description' -p45300 -(dp45301 -S'editable' -p45302 -I01 -sS'value' -p45303 -g47 -sssS'filmstrip_image' -p45304 -(dp45305 -S'mandatory' -p45306 -(dp45307 -S'editable' -p45308 -I00 -sS'value' -p45309 -I00 -ssS'name' -p45310 -(dp45311 -S'editable' -p45312 -I01 -sS'value' -p45313 -S'Filmstrip Thumbnail' -p45314 -ssS'data_type' -p45315 -(dp45316 -S'editable' -p45317 -I00 -sS'value' -p45318 -S'image' -p45319 -ssS'entity_type' -p45320 -(dp45321 -S'editable' -p45322 -I00 -sS'value' -p45323 -S'HumanUser' -p45324 -ssS'editable' -p45325 -(dp45326 -S'editable' -p45327 -I00 -sS'value' -p45328 -I01 -ssS'unique' -p45329 -(dp45330 -S'editable' -p45331 -I00 -sS'value' -p45332 -I00 -ssS'properties' -p45333 -(dp45334 -S'default_value' -p45335 -(dp45336 -S'editable' -p45337 -I00 -sS'value' -p45338 -NssS'summary_default' -p45339 -(dp45340 -S'editable' -p45341 -I01 -sS'value' -p45342 -S'none' -p45343 -sssS'description' -p45344 -(dp45345 -S'editable' -p45346 -I01 -sS'value' -p45347 -g47 -sssS'email_all_notes' -p45348 -(dp45349 -S'mandatory' -p45350 -(dp45351 -S'editable' -p45352 -I00 -sS'value' -p45353 -I00 -ssS'name' -p45354 -(dp45355 -S'editable' -p45356 -I01 -sS'value' -p45357 -S'Subscribe to All Note Emails' -p45358 -ssS'data_type' -p45359 -(dp45360 -S'editable' -p45361 -I00 -sS'value' -p45362 -S'checkbox' -p45363 -ssS'entity_type' -p45364 -(dp45365 -S'editable' -p45366 -I00 -sS'value' -p45367 -S'HumanUser' -p45368 -ssS'editable' -p45369 -(dp45370 -S'editable' -p45371 -I00 -sS'value' -p45372 -I01 -ssS'unique' -p45373 -(dp45374 -S'editable' -p45375 -I00 -sS'value' -p45376 -I00 -ssS'properties' -p45377 -(dp45378 -S'default_value' -p45379 -(dp45380 -S'editable' -p45381 -I00 -sS'value' -p45382 -I00 -ssS'summary_default' -p45383 -(dp45384 -S'editable' -p45385 -I01 -sS'value' -p45386 -S'none' -p45387 -sssS'description' -p45388 -(dp45389 -S'editable' -p45390 -I01 -sS'value' -p45391 -g47 -sssS'email_tasks' -p45392 -(dp45393 -S'mandatory' -p45394 -(dp45395 -S'editable' -p45396 -I00 -sS'value' -p45397 -I00 -ssS'name' -p45398 -(dp45399 -S'editable' -p45400 -I01 -sS'value' -p45401 -S'Subscribe to My Task Emails' -p45402 -ssS'data_type' -p45403 -(dp45404 -S'editable' -p45405 -I00 -sS'value' -p45406 -S'checkbox' -p45407 -ssS'entity_type' -p45408 -(dp45409 -S'editable' -p45410 -I00 -sS'value' -p45411 -S'HumanUser' -p45412 -ssS'editable' -p45413 -(dp45414 -S'editable' -p45415 -I00 -sS'value' -p45416 -I01 -ssS'unique' -p45417 -(dp45418 -S'editable' -p45419 -I00 -sS'value' -p45420 -I00 -ssS'properties' -p45421 -(dp45422 -S'default_value' -p45423 -(dp45424 -S'editable' -p45425 -I00 -sS'value' -p45426 -I00 -ssS'summary_default' -p45427 -(dp45428 -S'editable' -p45429 -I00 -sS'value' -p45430 -S'none' -p45431 -sssS'description' -p45432 -(dp45433 -S'editable' -p45434 -I01 -sS'value' -p45435 -g47 -sssS'login' -p45436 -(dp45437 -S'mandatory' -p45438 -(dp45439 -S'editable' -p45440 -I00 -sS'value' -p45441 -I00 -ssS'name' -p45442 -(dp45443 -S'editable' -p45444 -I01 -sS'value' -p45445 -S'Login' -p45446 -ssS'data_type' -p45447 -(dp45448 -S'editable' -p45449 -I00 -sS'value' -p45450 -S'text' -p45451 -ssS'entity_type' -p45452 -(dp45453 -S'editable' -p45454 -I00 -sS'value' -p45455 -S'HumanUser' -p45456 -ssS'editable' -p45457 -(dp45458 -S'editable' -p45459 -I00 -sS'value' -p45460 -I01 -ssS'unique' -p45461 -(dp45462 -S'editable' -p45463 -I00 -sS'value' -p45464 -I01 -ssS'properties' -p45465 -(dp45466 -S'default_value' -p45467 -(dp45468 -S'editable' -p45469 -I00 -sS'value' -p45470 -g47 -ssS'summary_default' -p45471 -(dp45472 -S'editable' -p45473 -I01 -sS'value' -p45474 -S'none' -p45475 -sssS'description' -p45476 -(dp45477 -S'editable' -p45478 -I01 -sS'value' -p45479 -g47 -sssS'email_all_tickets' -p45480 -(dp45481 -S'mandatory' -p45482 -(dp45483 -S'editable' -p45484 -I00 -sS'value' -p45485 -I00 -ssS'name' -p45486 -(dp45487 -S'editable' -p45488 -I01 -sS'value' -p45489 -S'Subscribe to All Ticket Emails' -p45490 -ssS'data_type' -p45491 -(dp45492 -S'editable' -p45493 -I00 -sS'value' -p45494 -S'checkbox' -p45495 -ssS'entity_type' -p45496 -(dp45497 -S'editable' -p45498 -I00 -sS'value' -p45499 -S'HumanUser' -p45500 -ssS'editable' -p45501 -(dp45502 -S'editable' -p45503 -I00 -sS'value' -p45504 -I01 -ssS'unique' -p45505 -(dp45506 -S'editable' -p45507 -I00 -sS'value' -p45508 -I00 -ssS'properties' -p45509 -(dp45510 -S'default_value' -p45511 -(dp45512 -S'editable' -p45513 -I00 -sS'value' -p45514 -I00 -ssS'summary_default' -p45515 -(dp45516 -S'editable' -p45517 -I01 -sS'value' -p45518 -S'none' -p45519 -sssS'description' -p45520 -(dp45521 -S'editable' -p45522 -I01 -sS'value' -p45523 -g47 -sssS'email_all_tasks' -p45524 -(dp45525 -S'mandatory' -p45526 -(dp45527 -S'editable' -p45528 -I00 -sS'value' -p45529 -I00 -ssS'name' -p45530 -(dp45531 -S'editable' -p45532 -I01 -sS'value' -p45533 -S'Subscribe to All Task Emails' -p45534 -ssS'data_type' -p45535 -(dp45536 -S'editable' -p45537 -I00 -sS'value' -p45538 -S'checkbox' -p45539 -ssS'entity_type' -p45540 -(dp45541 -S'editable' -p45542 -I00 -sS'value' -p45543 -S'HumanUser' -p45544 -ssS'editable' -p45545 -(dp45546 -S'editable' -p45547 -I00 -sS'value' -p45548 -I01 -ssS'unique' -p45549 -(dp45550 -S'editable' -p45551 -I00 -sS'value' -p45552 -I00 -ssS'properties' -p45553 -(dp45554 -S'default_value' -p45555 -(dp45556 -S'editable' -p45557 -I00 -sS'value' -p45558 -I00 -ssS'summary_default' -p45559 -(dp45560 -S'editable' -p45561 -I00 -sS'value' -p45562 -S'none' -p45563 -sssS'description' -p45564 -(dp45565 -S'editable' -p45566 -I01 -sS'value' -p45567 -g47 -ssssS'PermissionRuleSet' -p45568 -(dp45569 -S'code' -p45570 -(dp45571 -S'mandatory' -p45572 -(dp45573 -S'editable' -p45574 -I00 -sS'value' -p45575 -I00 -ssS'name' -p45576 -(dp45577 -S'editable' -p45578 -I01 -sS'value' -p45579 -S'Code' -p45580 -ssS'data_type' -p45581 -(dp45582 -S'editable' -p45583 -I00 -sS'value' -p45584 -S'text' -p45585 -ssS'entity_type' -p45586 -(dp45587 -S'editable' -p45588 -I00 -sS'value' -p45589 -S'PermissionRuleSet' -p45590 -ssS'editable' -p45591 -(dp45592 -S'editable' -p45593 -I00 -sS'value' -p45594 -I00 -ssS'unique' -p45595 -(dp45596 -S'editable' -p45597 -I00 -sS'value' -p45598 -I00 -ssS'properties' -p45599 -(dp45600 -S'default_value' -p45601 -(dp45602 -S'editable' -p45603 -I00 -sS'value' -p45604 -NssS'summary_default' -p45605 -(dp45606 -S'editable' -p45607 -I01 -sS'value' -p45608 -S'none' -p45609 -sssS'description' -p45610 -(dp45611 -S'editable' -p45612 -I01 -sS'value' -p45613 -g47 -sssS'display_name' -p45614 -(dp45615 -S'mandatory' -p45616 -(dp45617 -S'editable' -p45618 -I00 -sS'value' -p45619 -I00 -ssS'name' -p45620 -(dp45621 -S'editable' -p45622 -I01 -sS'value' -p45623 -S'Display Name' -p45624 -ssS'data_type' -p45625 -(dp45626 -S'editable' -p45627 -I00 -sS'value' -p45628 -S'text' -p45629 -ssS'entity_type' -p45630 -(dp45631 -S'editable' -p45632 -I00 -sS'value' -p45633 -S'PermissionRuleSet' -p45634 -ssS'editable' -p45635 -(dp45636 -S'editable' -p45637 -I00 -sS'value' -p45638 -I00 -ssS'unique' -p45639 -(dp45640 -S'editable' -p45641 -I00 -sS'value' -p45642 -I00 -ssS'properties' -p45643 -(dp45644 -S'default_value' -p45645 -(dp45646 -S'editable' -p45647 -I00 -sS'value' -p45648 -NssS'summary_default' -p45649 -(dp45650 -S'editable' -p45651 -I01 -sS'value' -p45652 -S'none' -p45653 -sssS'description' -p45654 -(dp45655 -S'editable' -p45656 -I01 -sS'value' -p45657 -g47 -sssS'entity_type' -p45658 -(dp45659 -S'mandatory' -p45660 -(dp45661 -S'editable' -p45662 -I00 -sS'value' -p45663 -I00 -ssS'name' -p45664 -(dp45665 -S'editable' -p45666 -I01 -sS'value' -p45667 -S'Entity Type' -p45668 -ssS'data_type' -p45669 -(dp45670 -S'editable' -p45671 -I00 -sS'value' -p45672 -S'entity_type' -p45673 -ssS'entity_type' -p45674 -(dp45675 -S'editable' -p45676 -I00 -sS'value' -p45677 -S'PermissionRuleSet' -p45678 -ssS'editable' -p45679 -(dp45680 -S'editable' -p45681 -I00 -sS'value' -p45682 -I00 -ssS'unique' -p45683 -(dp45684 -S'editable' -p45685 -I00 -sS'value' -p45686 -I00 -ssS'properties' -p45687 -(dp45688 -S'default_value' -p45689 -(dp45690 -S'editable' -p45691 -I00 -sS'value' -p45692 -NssS'summary_default' -p45693 -(dp45694 -S'editable' -p45695 -I01 -sS'value' -p45696 -S'none' -p45697 -sssS'description' -p45698 -(dp45699 -S'editable' -p45700 -I01 -sS'value' -p45701 -g47 -sssS'parent_set' -p45702 -(dp45703 -S'mandatory' -p45704 -(dp45705 -S'editable' -p45706 -I00 -sS'value' -p45707 -I00 -ssS'name' -p45708 -(dp45709 -S'editable' -p45710 -I01 -sS'value' -p45711 -S'Parent Permission Role' -p45712 -ssS'data_type' -p45713 -(dp45714 -S'editable' -p45715 -I00 -sS'value' -p45716 -S'entity' -p45717 -ssS'entity_type' -p45718 -(dp45719 -S'editable' -p45720 -I00 -sS'value' -p45721 -S'PermissionRuleSet' -p45722 -ssS'editable' -p45723 -(dp45724 -S'editable' -p45725 -I00 -sS'value' -p45726 -I00 -ssS'unique' -p45727 -(dp45728 -S'editable' -p45729 -I00 -sS'value' -p45730 -I00 -ssS'properties' -p45731 -(dp45732 -S'default_value' -p45733 -(dp45734 -S'editable' -p45735 -I00 -sS'value' -p45736 -NssS'summary_default' -p45737 -(dp45738 -S'editable' -p45739 -I01 -sS'value' -p45740 -S'none' -p45741 -ssS'valid_types' -p45742 -(dp45743 -S'editable' -p45744 -I01 -sS'value' -p45745 -(lp45746 -S'PermissionRuleSet' -p45747 -asssS'description' -p45748 -(dp45749 -S'editable' -p45750 -I01 -sS'value' -p45751 -g47 -sssS'cached_display_name' -p45752 -(dp45753 -S'mandatory' -p45754 -(dp45755 -S'editable' -p45756 -I00 -sS'value' -p45757 -I00 -ssS'name' -p45758 -(dp45759 -S'editable' -p45760 -I01 -sS'value' -p45761 -S'Cached Display Name' -p45762 -ssS'data_type' -p45763 -(dp45764 -S'editable' -p45765 -I00 -sS'value' -p45766 -S'text' -p45767 -ssS'entity_type' -p45768 -(dp45769 -S'editable' -p45770 -I00 -sS'value' -p45771 -S'PermissionRuleSet' -p45772 -ssS'editable' -p45773 -(dp45774 -S'editable' -p45775 -I00 -sS'value' -p45776 -I00 -ssS'unique' -p45777 -(dp45778 -S'editable' -p45779 -I00 -sS'value' -p45780 -I00 -ssS'properties' -p45781 -(dp45782 -S'default_value' -p45783 -(dp45784 -S'editable' -p45785 -I00 -sS'value' -p45786 -NssS'summary_default' -p45787 -(dp45788 -S'editable' -p45789 -I00 -sS'value' -p45790 -S'none' -p45791 -sssS'description' -p45792 -(dp45793 -S'editable' -p45794 -I01 -sS'value' -p45795 -g47 -sssS'id' -p45796 -(dp45797 -S'mandatory' -p45798 -(dp45799 -S'editable' -p45800 -I00 -sS'value' -p45801 -I00 -ssS'name' -p45802 -(dp45803 -S'editable' -p45804 -I01 -sS'value' -p45805 -S'ID' -p45806 -ssS'data_type' -p45807 -(dp45808 -S'editable' -p45809 -I00 -sS'value' -p45810 -S'number' -p45811 -ssS'entity_type' -p45812 -(dp45813 -S'editable' -p45814 -I00 -sS'value' -p45815 -S'PermissionRuleSet' -p45816 -ssS'editable' -p45817 -(dp45818 -S'editable' -p45819 -I00 -sS'value' -p45820 -I00 -ssS'unique' -p45821 -(dp45822 -S'editable' -p45823 -I00 -sS'value' -p45824 -I00 -ssS'properties' -p45825 -(dp45826 -S'default_value' -p45827 -(dp45828 -S'editable' -p45829 -I00 -sS'value' -p45830 -NssS'summary_default' -p45831 -(dp45832 -S'editable' -p45833 -I00 -sS'value' -p45834 -S'none' -p45835 -sssS'description' -p45836 -(dp45837 -S'editable' -p45838 -I01 -sS'value' -p45839 -g47 -ssssS'EventLogEntry' -p45840 -(dp45841 -S'attribute_name' -p45842 -(dp45843 -S'mandatory' -p45844 -(dp45845 -S'editable' -p45846 -I00 -sS'value' -p45847 -I00 -ssS'name' -p45848 -(dp45849 -S'editable' -p45850 -I01 -sS'value' -p45851 -S'Attribute Name' -p45852 -ssS'data_type' -p45853 -(dp45854 -S'editable' -p45855 -I00 -sS'value' -p45856 -S'text' -p45857 -ssS'entity_type' -p45858 -(dp45859 -S'editable' -p45860 -I00 -sS'value' -p45861 -S'EventLogEntry' -p45862 -ssS'editable' -p45863 -(dp45864 -S'editable' -p45865 -I00 -sS'value' -p45866 -I00 -ssS'unique' -p45867 -(dp45868 -S'editable' -p45869 -I00 -sS'value' -p45870 -I00 -ssS'properties' -p45871 -(dp45872 -S'default_value' -p45873 -(dp45874 -S'editable' -p45875 -I00 -sS'value' -p45876 -NssS'summary_default' -p45877 -(dp45878 -S'editable' -p45879 -I01 -sS'value' -p45880 -S'none' -p45881 -sssS'description' -p45882 -(dp45883 -S'editable' -p45884 -I01 -sS'value' -p45885 -g47 -sssS'description' -p45886 -(dp45887 -S'mandatory' -p45888 -(dp45889 -S'editable' -p45890 -I00 -sS'value' -p45891 -I01 -ssS'name' -p45892 -(dp45893 -S'editable' -p45894 -I01 -sS'value' -p45895 -S'Event Summary' -p45896 -ssS'data_type' -p45897 -(dp45898 -S'editable' -p45899 -I00 -sS'value' -p45900 -S'text' -p45901 -ssS'entity_type' -p45902 -(dp45903 -S'editable' -p45904 -I00 -sS'value' -p45905 -S'EventLogEntry' -p45906 -ssS'editable' -p45907 -(dp45908 -S'editable' -p45909 -I00 -sS'value' -p45910 -I00 -ssS'unique' -p45911 -(dp45912 -S'editable' -p45913 -I00 -sS'value' -p45914 -I00 -ssS'properties' -p45915 -(dp45916 -S'default_value' -p45917 -(dp45918 -S'editable' -p45919 -I00 -sS'value' -p45920 -NssS'summary_default' -p45921 -(dp45922 -S'editable' -p45923 -I01 -sS'value' -p45924 -S'none' -p45925 -sssS'description' -p45926 -(dp45927 -S'editable' -p45928 -I01 -sS'value' -p45929 -g47 -sssS'created_at' -p45930 -(dp45931 -S'mandatory' -p45932 -(dp45933 -S'editable' -p45934 -I00 -sS'value' -p45935 -I00 -ssS'name' -p45936 -(dp45937 -S'editable' -p45938 -I01 -sS'value' -p45939 -S'Date Created' -p45940 -ssS'data_type' -p45941 -(dp45942 -S'editable' -p45943 -I00 -sS'value' -p45944 -S'date_time' -p45945 -ssS'entity_type' -p45946 -(dp45947 -S'editable' -p45948 -I00 -sS'value' -p45949 -S'EventLogEntry' -p45950 -ssS'editable' -p45951 -(dp45952 -S'editable' -p45953 -I00 -sS'value' -p45954 -I00 -ssS'unique' -p45955 -(dp45956 -S'editable' -p45957 -I00 -sS'value' -p45958 -I00 -ssS'properties' -p45959 -(dp45960 -S'default_value' -p45961 -(dp45962 -S'editable' -p45963 -I00 -sS'value' -p45964 -NssS'summary_default' -p45965 -(dp45966 -S'editable' -p45967 -I01 -sS'value' -p45968 -S'latest' -p45969 -sssS'description' -p45970 -(dp45971 -S'editable' -p45972 -I01 -sS'value' -p45973 -g47 -sssS'entity' -p45974 -(dp45975 -S'mandatory' -p45976 -(dp45977 -S'editable' -p45978 -I00 -sS'value' -p45979 -I00 -ssS'name' -p45980 -(dp45981 -S'editable' -p45982 -I01 -sS'value' -p45983 -S'Link' -p45984 -ssS'data_type' -p45985 -(dp45986 -S'editable' -p45987 -I00 -sS'value' -p45988 -S'entity' -p45989 -ssS'entity_type' -p45990 -(dp45991 -S'editable' -p45992 -I00 -sS'value' -p45993 -S'EventLogEntry' -p45994 -ssS'editable' -p45995 -(dp45996 -S'editable' -p45997 -I00 -sS'value' -p45998 -I00 -ssS'unique' -p45999 -(dp46000 -S'editable' -p46001 -I00 -sS'value' -p46002 -I00 -ssS'properties' -p46003 -(dp46004 -S'default_value' -p46005 -(dp46006 -S'editable' -p46007 -I00 -sS'value' -p46008 -NssS'summary_default' -p46009 -(dp46010 -S'editable' -p46011 -I01 -sS'value' -p46012 -S'none' -p46013 -ssS'valid_types' -p46014 -(dp46015 -S'editable' -p46016 -I01 -sS'value' -p46017 -(lp46018 -S'ApiUser' -p46019 -aS'AppWelcome' -p46020 -aS'Asset' -p46021 -aS'AssetLibrary' -p46022 -aS'Attachment' -p46023 -aS'Banner' -p46024 -aS'Booking' -p46025 -aS'CustomEntity01' -p46026 -aS'CustomEntity02' -p46027 -aS'CustomEntity03' -p46028 -aS'CustomEntity04' -p46029 -aS'CustomEntity05' -p46030 -aS'CustomNonProjectEntity01' -p46031 -aS'CustomNonProjectEntity02' -p46032 -aS'CustomNonProjectEntity03' -p46033 -aS'Department' -p46034 -aS'Element' -p46035 -aS'Group' -p46036 -aS'HumanUser' -p46037 -aS'Icon' -p46038 -aS'LocalStorage' -p46039 -aS'Note' -p46040 -aS'Page' -p46041 -aS'PermissionRuleSet' -p46042 -aS'Phase' -p46043 -aS'PipelineConfiguration' -p46044 -aS'Playlist' -p46045 -aS'Project' -p46046 -aS'PublishedFile' -p46047 -aS'PublishedFileDependency' -p46048 -aS'PublishedFileType' -p46049 -aS'Scene' -p46050 -aS'Sequence' -p46051 -aS'Shot' -p46052 -aS'Status' -p46053 -aS'Step' -p46054 -aS'Tag' -p46055 -aS'TankDependency' -p46056 -aS'TankPublishedFile' -p46057 -aS'TankType' -p46058 -aS'Task' -p46059 -aS'TaskTemplate' -p46060 -aS'Version' -p46061 -asssS'description' -p46062 -(dp46063 -S'editable' -p46064 -I01 -sS'value' -p46065 -g47 -sssS'project' -p46066 -(dp46067 -S'mandatory' -p46068 -(dp46069 -S'editable' -p46070 -I00 -sS'value' -p46071 -I00 -ssS'name' -p46072 -(dp46073 -S'editable' -p46074 -I01 -sS'value' -p46075 -S'Project' -p46076 -ssS'data_type' -p46077 -(dp46078 -S'editable' -p46079 -I00 -sS'value' -p46080 -S'entity' -p46081 -ssS'entity_type' -p46082 -(dp46083 -S'editable' -p46084 -I00 -sS'value' -p46085 -S'EventLogEntry' -p46086 -ssS'editable' -p46087 -(dp46088 -S'editable' -p46089 -I00 -sS'value' -p46090 -I00 -ssS'unique' -p46091 -(dp46092 -S'editable' -p46093 -I00 -sS'value' -p46094 -I00 -ssS'properties' -p46095 -(dp46096 -S'default_value' -p46097 -(dp46098 -S'editable' -p46099 -I00 -sS'value' -p46100 -NssS'summary_default' -p46101 -(dp46102 -S'editable' -p46103 -I01 -sS'value' -p46104 -S'none' -p46105 -ssS'valid_types' -p46106 -(dp46107 -S'editable' -p46108 -I01 -sS'value' -p46109 -(lp46110 -S'Project' -p46111 -asssS'description' -p46112 -(dp46113 -S'editable' -p46114 -I01 -sS'value' -p46115 -g47 -sssS'filmstrip_image' -p46116 -(dp46117 -S'mandatory' -p46118 -(dp46119 -S'editable' -p46120 -I00 -sS'value' -p46121 -I00 -ssS'name' -p46122 -(dp46123 -S'editable' -p46124 -I01 -sS'value' -p46125 -S'Filmstrip Thumbnail' -p46126 -ssS'data_type' -p46127 -(dp46128 -S'editable' -p46129 -I00 -sS'value' -p46130 -S'image' -p46131 -ssS'entity_type' -p46132 -(dp46133 -S'editable' -p46134 -I00 -sS'value' -p46135 -S'EventLogEntry' -p46136 -ssS'editable' -p46137 -(dp46138 -S'editable' -p46139 -I00 -sS'value' -p46140 -I01 -ssS'unique' -p46141 -(dp46142 -S'editable' -p46143 -I00 -sS'value' -p46144 -I00 -ssS'properties' -p46145 -(dp46146 -S'default_value' -p46147 -(dp46148 -S'editable' -p46149 -I00 -sS'value' -p46150 -NssS'summary_default' -p46151 -(dp46152 -S'editable' -p46153 -I01 -sS'value' -p46154 -S'none' -p46155 -sssS'description' -p46156 -(dp46157 -S'editable' -p46158 -I01 -sS'value' -p46159 -g47 -sssS'meta' -p46160 -(dp46161 -S'mandatory' -p46162 -(dp46163 -S'editable' -p46164 -I00 -sS'value' -p46165 -I00 -ssS'name' -p46166 -(dp46167 -S'editable' -p46168 -I01 -sS'value' -p46169 -S'Meta Data' -p46170 -ssS'data_type' -p46171 -(dp46172 -S'editable' -p46173 -I00 -sS'value' -p46174 -S'serializable' -p46175 -ssS'entity_type' -p46176 -(dp46177 -S'editable' -p46178 -I00 -sS'value' -p46179 -S'EventLogEntry' -p46180 -ssS'editable' -p46181 -(dp46182 -S'editable' -p46183 -I00 -sS'value' -p46184 -I00 -ssS'unique' -p46185 -(dp46186 -S'editable' -p46187 -I00 -sS'value' -p46188 -I00 -ssS'properties' -p46189 -(dp46190 -S'default_value' -p46191 -(dp46192 -S'editable' -p46193 -I00 -sS'value' -p46194 -NssS'summary_default' -p46195 -(dp46196 -S'editable' -p46197 -I01 -sS'value' -p46198 -S'none' -p46199 -sssS'description' -p46200 -(dp46201 -S'editable' -p46202 -I01 -sS'value' -p46203 -g47 -sssS'user' -p46204 -(dp46205 -S'mandatory' -p46206 -(dp46207 -S'editable' -p46208 -I00 -sS'value' -p46209 -I00 -ssS'name' -p46210 -(dp46211 -S'editable' -p46212 -I01 -sS'value' -p46213 -S'Who' -p46214 -ssS'data_type' -p46215 -(dp46216 -S'editable' -p46217 -I00 -sS'value' -p46218 -S'entity' -p46219 -ssS'entity_type' -p46220 -(dp46221 -S'editable' -p46222 -I00 -sS'value' -p46223 -S'EventLogEntry' -p46224 -ssS'editable' -p46225 -(dp46226 -S'editable' -p46227 -I00 -sS'value' -p46228 -I00 -ssS'unique' -p46229 -(dp46230 -S'editable' -p46231 -I00 -sS'value' -p46232 -I00 -ssS'properties' -p46233 -(dp46234 -S'default_value' -p46235 -(dp46236 -S'editable' -p46237 -I00 -sS'value' -p46238 -NssS'summary_default' -p46239 -(dp46240 -S'editable' -p46241 -I01 -sS'value' -p46242 -S'none' -p46243 -ssS'valid_types' -p46244 -(dp46245 -S'editable' -p46246 -I01 -sS'value' -p46247 -(lp46248 -S'HumanUser' -p46249 -aS'ApiUser' -p46250 -asssS'description' -p46251 -(dp46252 -S'editable' -p46253 -I01 -sS'value' -p46254 -g47 -sssS'session_uuid' -p46255 -(dp46256 -S'mandatory' -p46257 -(dp46258 -S'editable' -p46259 -I00 -sS'value' -p46260 -I00 -ssS'name' -p46261 -(dp46262 -S'editable' -p46263 -I01 -sS'value' -p46264 -S'Session UUID' -p46265 -ssS'data_type' -p46266 -(dp46267 -S'editable' -p46268 -I00 -sS'value' -p46269 -S'uuid' -p46270 -ssS'entity_type' -p46271 -(dp46272 -S'editable' -p46273 -I00 -sS'value' -p46274 -S'EventLogEntry' -p46275 -ssS'editable' -p46276 -(dp46277 -S'editable' -p46278 -I00 -sS'value' -p46279 -I00 -ssS'unique' -p46280 -(dp46281 -S'editable' -p46282 -I00 -sS'value' -p46283 -I00 -ssS'properties' -p46284 -(dp46285 -S'default_value' -p46286 -(dp46287 -S'editable' -p46288 -I00 -sS'value' -p46289 -NssS'summary_default' -p46290 -(dp46291 -S'editable' -p46292 -I00 -sS'value' -p46293 -S'none' -p46294 -sssS'description' -p46295 -(dp46296 -S'editable' -p46297 -I01 -sS'value' -p46298 -g47 -sssS'cached_display_name' -p46299 -(dp46300 -S'mandatory' -p46301 -(dp46302 -S'editable' -p46303 -I00 -sS'value' -p46304 -I00 -ssS'name' -p46305 -(dp46306 -S'editable' -p46307 -I01 -sS'value' -p46308 -S'Cached Display Name' -p46309 -ssS'data_type' -p46310 -(dp46311 -S'editable' -p46312 -I00 -sS'value' -p46313 -S'text' -p46314 -ssS'entity_type' -p46315 -(dp46316 -S'editable' -p46317 -I00 -sS'value' -p46318 -S'EventLogEntry' -p46319 -ssS'editable' -p46320 -(dp46321 -S'editable' -p46322 -I00 -sS'value' -p46323 -I01 -ssS'unique' -p46324 -(dp46325 -S'editable' -p46326 -I00 -sS'value' -p46327 -I00 -ssS'properties' -p46328 -(dp46329 -S'default_value' -p46330 -(dp46331 -S'editable' -p46332 -I00 -sS'value' -p46333 -NssS'summary_default' -p46334 -(dp46335 -S'editable' -p46336 -I00 -sS'value' -p46337 -S'none' -p46338 -sssS'description' -p46339 -(dp46340 -S'editable' -p46341 -I01 -sS'value' -p46342 -g47 -sssS'image' -p46343 -(dp46344 -S'mandatory' -p46345 -(dp46346 -S'editable' -p46347 -I00 -sS'value' -p46348 -I00 -ssS'name' -p46349 -(dp46350 -S'editable' -p46351 -I01 -sS'value' -p46352 -S'Thumbnail' -p46353 -ssS'data_type' -p46354 -(dp46355 -S'editable' -p46356 -I00 -sS'value' -p46357 -S'image' -p46358 -ssS'entity_type' -p46359 -(dp46360 -S'editable' -p46361 -I00 -sS'value' -p46362 -S'EventLogEntry' -p46363 -ssS'editable' -p46364 -(dp46365 -S'editable' -p46366 -I00 -sS'value' -p46367 -I01 -ssS'unique' -p46368 -(dp46369 -S'editable' -p46370 -I00 -sS'value' -p46371 -I00 -ssS'properties' -p46372 -(dp46373 -S'default_value' -p46374 -(dp46375 -S'editable' -p46376 -I00 -sS'value' -p46377 -NssS'summary_default' -p46378 -(dp46379 -S'editable' -p46380 -I01 -sS'value' -p46381 -S'none' -p46382 -sssS'description' -p46383 -(dp46384 -S'editable' -p46385 -I01 -sS'value' -p46386 -g47 -sssS'id' -p46387 -(dp46388 -S'mandatory' -p46389 -(dp46390 -S'editable' -p46391 -I00 -sS'value' -p46392 -I00 -ssS'name' -p46393 -(dp46394 -S'editable' -p46395 -I01 -sS'value' -p46396 -S'Id' -p46397 -ssS'data_type' -p46398 -(dp46399 -S'editable' -p46400 -I00 -sS'value' -p46401 -S'number' -p46402 -ssS'entity_type' -p46403 -(dp46404 -S'editable' -p46405 -I00 -sS'value' -p46406 -S'EventLogEntry' -p46407 -ssS'editable' -p46408 -(dp46409 -S'editable' -p46410 -I00 -sS'value' -p46411 -I00 -ssS'unique' -p46412 -(dp46413 -S'editable' -p46414 -I00 -sS'value' -p46415 -I00 -ssS'properties' -p46416 -(dp46417 -S'default_value' -p46418 -(dp46419 -S'editable' -p46420 -I00 -sS'value' -p46421 -NssS'summary_default' -p46422 -(dp46423 -S'editable' -p46424 -I01 -sS'value' -p46425 -S'none' -p46426 -sssS'description' -p46427 -(dp46428 -S'editable' -p46429 -I01 -sS'value' -p46430 -g47 -sssS'event_type' -p46431 -(dp46432 -S'mandatory' -p46433 -(dp46434 -S'editable' -p46435 -I00 -sS'value' -p46436 -I00 -ssS'name' -p46437 -(dp46438 -S'editable' -p46439 -I01 -sS'value' -p46440 -S'Event Type' -p46441 -ssS'data_type' -p46442 -(dp46443 -S'editable' -p46444 -I00 -sS'value' -p46445 -S'text' -p46446 -ssS'entity_type' -p46447 -(dp46448 -S'editable' -p46449 -I00 -sS'value' -p46450 -S'EventLogEntry' -p46451 -ssS'editable' -p46452 -(dp46453 -S'editable' -p46454 -I00 -sS'value' -p46455 -I00 -ssS'unique' -p46456 -(dp46457 -S'editable' -p46458 -I00 -sS'value' -p46459 -I00 -ssS'properties' -p46460 -(dp46461 -S'default_value' -p46462 -(dp46463 -S'editable' -p46464 -I00 -sS'value' -p46465 -NssS'summary_default' -p46466 -(dp46467 -S'editable' -p46468 -I01 -sS'value' -p46469 -S'none' -p46470 -sssS'description' -p46471 -(dp46472 -S'editable' -p46473 -I01 -sS'value' -p46474 -g47 -ssssS'TankDependency' -p46475 -(dp46476 -S'id' -p46477 -(dp46478 -S'mandatory' -p46479 -(dp46480 -S'editable' -p46481 -I00 -sS'value' -p46482 -I00 -ssS'name' -p46483 -(dp46484 -S'editable' -p46485 -I01 -sS'value' -p46486 -S'Id' -p46487 -ssS'data_type' -p46488 -(dp46489 -S'editable' -p46490 -I00 -sS'value' -p46491 -S'number' -p46492 -ssS'entity_type' -p46493 -(dp46494 -S'editable' -p46495 -I00 -sS'value' -p46496 -S'TankDependency' -p46497 -ssS'editable' -p46498 -(dp46499 -S'editable' -p46500 -I00 -sS'value' -p46501 -I00 -ssS'unique' -p46502 -(dp46503 -S'editable' -p46504 -I00 -sS'value' -p46505 -I00 -ssS'properties' -p46506 -(dp46507 -S'default_value' -p46508 -(dp46509 -S'editable' -p46510 -I00 -sS'value' -p46511 -NssS'summary_default' -p46512 -(dp46513 -S'editable' -p46514 -I00 -sS'value' -p46515 -S'none' -p46516 -sssS'description' -p46517 -(dp46518 -S'editable' -p46519 -I01 -sS'value' -p46520 -g47 -sssS'cached_display_name' -p46521 -(dp46522 -S'mandatory' -p46523 -(dp46524 -S'editable' -p46525 -I00 -sS'value' -p46526 -I00 -ssS'name' -p46527 -(dp46528 -S'editable' -p46529 -I01 -sS'value' -p46530 -S'Cached Display Name' -p46531 -ssS'data_type' -p46532 -(dp46533 -S'editable' -p46534 -I00 -sS'value' -p46535 -S'text' -p46536 -ssS'entity_type' -p46537 -(dp46538 -S'editable' -p46539 -I00 -sS'value' -p46540 -S'TankDependency' -p46541 -ssS'editable' -p46542 -(dp46543 -S'editable' -p46544 -I00 -sS'value' -p46545 -I01 -ssS'unique' -p46546 -(dp46547 -S'editable' -p46548 -I00 -sS'value' -p46549 -I00 -ssS'properties' -p46550 -(dp46551 -S'default_value' -p46552 -(dp46553 -S'editable' -p46554 -I00 -sS'value' -p46555 -NssS'summary_default' -p46556 -(dp46557 -S'editable' -p46558 -I00 -sS'value' -p46559 -S'none' -p46560 -sssS'description' -p46561 -(dp46562 -S'editable' -p46563 -I01 -sS'value' -p46564 -g47 -sssS'dependent_tank_published_file' -p46565 -(dp46566 -S'mandatory' -p46567 -(dp46568 -S'editable' -p46569 -I00 -sS'value' -p46570 -I00 -ssS'name' -p46571 -(dp46572 -S'editable' -p46573 -I01 -sS'value' -p46574 -S'Dependent Tank Published File' -p46575 -ssS'data_type' -p46576 -(dp46577 -S'editable' -p46578 -I00 -sS'value' -p46579 -S'entity' -p46580 -ssS'entity_type' -p46581 -(dp46582 -S'editable' -p46583 -I00 -sS'value' -p46584 -S'TankDependency' -p46585 -ssS'editable' -p46586 -(dp46587 -S'editable' -p46588 -I00 -sS'value' -p46589 -I00 -ssS'unique' -p46590 -(dp46591 -S'editable' -p46592 -I00 -sS'value' -p46593 -I00 -ssS'properties' -p46594 -(dp46595 -S'default_value' -p46596 -(dp46597 -S'editable' -p46598 -I00 -sS'value' -p46599 -NssS'summary_default' -p46600 -(dp46601 -S'editable' -p46602 -I00 -sS'value' -p46603 -S'none' -p46604 -ssS'valid_types' -p46605 -(dp46606 -S'editable' -p46607 -I00 -sS'value' -p46608 -(lp46609 -S'TankPublishedFile' -p46610 -asssS'description' -p46611 -(dp46612 -S'editable' -p46613 -I01 -sS'value' -p46614 -g47 -sssS'tank_published_file' -p46615 -(dp46616 -S'mandatory' -p46617 -(dp46618 -S'editable' -p46619 -I00 -sS'value' -p46620 -I00 -ssS'name' -p46621 -(dp46622 -S'editable' -p46623 -I01 -sS'value' -p46624 -S'Tank Published File' -p46625 -ssS'data_type' -p46626 -(dp46627 -S'editable' -p46628 -I00 -sS'value' -p46629 -S'entity' -p46630 -ssS'entity_type' -p46631 -(dp46632 -S'editable' -p46633 -I00 -sS'value' -p46634 -S'TankDependency' -p46635 -ssS'editable' -p46636 -(dp46637 -S'editable' -p46638 -I00 -sS'value' -p46639 -I00 -ssS'unique' -p46640 -(dp46641 -S'editable' -p46642 -I00 -sS'value' -p46643 -I00 -ssS'properties' -p46644 -(dp46645 -S'default_value' -p46646 -(dp46647 -S'editable' -p46648 -I00 -sS'value' -p46649 -NssS'summary_default' -p46650 -(dp46651 -S'editable' -p46652 -I00 -sS'value' -p46653 -S'none' -p46654 -ssS'valid_types' -p46655 -(dp46656 -S'editable' -p46657 -I00 -sS'value' -p46658 -(lp46659 -S'TankPublishedFile' -p46660 -asssS'description' -p46661 -(dp46662 -S'editable' -p46663 -I01 -sS'value' -p46664 -g47 -ssssS'AssetShootDayConnection' -p46665 -(dp46666 -S'cached_display_name' -p46667 -(dp46668 -S'mandatory' -p46669 -(dp46670 -S'editable' -p46671 -I00 -sS'value' -p46672 -I00 -ssS'name' -p46673 -(dp46674 -S'editable' -p46675 -I01 -sS'value' -p46676 -S'Cached Display Name' -p46677 -ssS'data_type' -p46678 -(dp46679 -S'editable' -p46680 -I00 -sS'value' -p46681 -S'text' -p46682 -ssS'entity_type' -p46683 -(dp46684 -S'editable' -p46685 -I00 -sS'value' -p46686 -S'AssetShootDayConnection' -p46687 -ssS'editable' -p46688 -(dp46689 -S'editable' -p46690 -I00 -sS'value' -p46691 -I01 -ssS'unique' -p46692 -(dp46693 -S'editable' -p46694 -I00 -sS'value' -p46695 -I00 -ssS'properties' -p46696 -(dp46697 -S'default_value' -p46698 -(dp46699 -S'editable' -p46700 -I00 -sS'value' -p46701 -NssS'summary_default' -p46702 -(dp46703 -S'editable' -p46704 -I00 -sS'value' -p46705 -S'none' -p46706 -sssS'description' -p46707 -(dp46708 -S'editable' -p46709 -I01 -sS'value' -p46710 -g47 -sssS'asset' -p46711 -(dp46712 -S'mandatory' -p46713 -(dp46714 -S'editable' -p46715 -I00 -sS'value' -p46716 -I00 -ssS'name' -p46717 -(dp46718 -S'editable' -p46719 -I01 -sS'value' -p46720 -S'Asset' -p46721 -ssS'data_type' -p46722 -(dp46723 -S'editable' -p46724 -I00 -sS'value' -p46725 -S'entity' -p46726 -ssS'entity_type' -p46727 -(dp46728 -S'editable' -p46729 -I00 -sS'value' -p46730 -S'AssetShootDayConnection' -p46731 -ssS'editable' -p46732 -(dp46733 -S'editable' -p46734 -I00 -sS'value' -p46735 -I00 -ssS'unique' -p46736 -(dp46737 -S'editable' -p46738 -I00 -sS'value' -p46739 -I00 -ssS'properties' -p46740 -(dp46741 -S'default_value' -p46742 -(dp46743 -S'editable' -p46744 -I00 -sS'value' -p46745 -NssS'summary_default' -p46746 -(dp46747 -S'editable' -p46748 -I00 -sS'value' -p46749 -S'none' -p46750 -ssS'valid_types' -p46751 -(dp46752 -S'editable' -p46753 -I00 -sS'value' -p46754 -(lp46755 -S'Asset' -p46756 -asssS'description' -p46757 -(dp46758 -S'editable' -p46759 -I01 -sS'value' -p46760 -g47 -sssS'id' -p46761 -(dp46762 -S'mandatory' -p46763 -(dp46764 -S'editable' -p46765 -I00 -sS'value' -p46766 -I01 -ssS'name' -p46767 -(dp46768 -S'editable' -p46769 -I01 -sS'value' -p46770 -S'Id' -p46771 -ssS'data_type' -p46772 -(dp46773 -S'editable' -p46774 -I00 -sS'value' -p46775 -S'number' -p46776 -ssS'entity_type' -p46777 -(dp46778 -S'editable' -p46779 -I00 -sS'value' -p46780 -S'AssetShootDayConnection' -p46781 -ssS'editable' -p46782 -(dp46783 -S'editable' -p46784 -I00 -sS'value' -p46785 -I00 -ssS'unique' -p46786 -(dp46787 -S'editable' -p46788 -I00 -sS'value' -p46789 -I00 -ssS'properties' -p46790 -(dp46791 -S'default_value' -p46792 -(dp46793 -S'editable' -p46794 -I00 -sS'value' -p46795 -NssS'summary_default' -p46796 -(dp46797 -S'editable' -p46798 -I00 -sS'value' -p46799 -S'none' -p46800 -sssS'description' -p46801 -(dp46802 -S'editable' -p46803 -I01 -sS'value' -p46804 -g47 -sssS'shoot_day' -p46805 -(dp46806 -S'mandatory' -p46807 -(dp46808 -S'editable' -p46809 -I00 -sS'value' -p46810 -I00 -ssS'name' -p46811 -(dp46812 -S'editable' -p46813 -I01 -sS'value' -p46814 -S'Shoot Day' -p46815 -ssS'data_type' -p46816 -(dp46817 -S'editable' -p46818 -I00 -sS'value' -p46819 -S'entity' -p46820 -ssS'entity_type' -p46821 -(dp46822 -S'editable' -p46823 -I00 -sS'value' -p46824 -S'AssetShootDayConnection' -p46825 -ssS'editable' -p46826 -(dp46827 -S'editable' -p46828 -I00 -sS'value' -p46829 -I00 -ssS'unique' -p46830 -(dp46831 -S'editable' -p46832 -I00 -sS'value' -p46833 -I00 -ssS'properties' -p46834 -(dp46835 -S'default_value' -p46836 -(dp46837 -S'editable' -p46838 -I00 -sS'value' -p46839 -NssS'summary_default' -p46840 -(dp46841 -S'editable' -p46842 -I00 -sS'value' -p46843 -S'none' -p46844 -ssS'valid_types' -p46845 -(dp46846 -S'editable' -p46847 -I00 -sS'value' -p46848 -(lp46849 -S'ShootDay' -p46850 -asssS'description' -p46851 -(dp46852 -S'editable' -p46853 -I01 -sS'value' -p46854 -g47 -ssssS'Asset' -p46855 -(dp46856 -S'open_notes_count' -p46857 -(dp46858 -S'mandatory' -p46859 -(dp46860 -S'editable' -p46861 -I00 -sS'value' -p46862 -I00 -ssS'name' -p46863 -(dp46864 -S'editable' -p46865 -I01 -sS'value' -p46866 -S'Open Notes Count' -p46867 -ssS'data_type' -p46868 -(dp46869 -S'editable' -p46870 -I00 -sS'value' -p46871 -S'text' -p46872 -ssS'entity_type' -p46873 -(dp46874 -S'editable' -p46875 -I00 -sS'value' -p46876 -S'Asset' -p46877 -ssS'editable' -p46878 -(dp46879 -S'editable' -p46880 -I00 -sS'value' -p46881 -I00 -ssS'unique' -p46882 -(dp46883 -S'editable' -p46884 -I00 -sS'value' -p46885 -I00 -ssS'properties' -p46886 -(dp46887 -S'default_value' -p46888 -(dp46889 -S'editable' -p46890 -I00 -sS'value' -p46891 -NssS'summary_default' -p46892 -(dp46893 -S'editable' -p46894 -I01 -sS'value' -p46895 -S'none' -p46896 -sssS'description' -p46897 -(dp46898 -S'editable' -p46899 -I01 -sS'value' -p46900 -g47 -sssS'code' -p46901 -(dp46902 -S'mandatory' -p46903 -(dp46904 -S'editable' -p46905 -I00 -sS'value' -p46906 -I01 -ssS'name' -p46907 -(dp46908 -S'editable' -p46909 -I01 -sS'value' -p46910 -S'Asset Name' -p46911 -ssS'data_type' -p46912 -(dp46913 -S'editable' -p46914 -I00 -sS'value' -p46915 -S'text' -p46916 -ssS'entity_type' -p46917 -(dp46918 -S'editable' -p46919 -I00 -sS'value' -p46920 -S'Asset' -p46921 -ssS'editable' -p46922 -(dp46923 -S'editable' -p46924 -I00 -sS'value' -p46925 -I01 -ssS'unique' -p46926 -(dp46927 -S'editable' -p46928 -I00 -sS'value' -p46929 -I00 -ssS'properties' -p46930 -(dp46931 -S'default_value' -p46932 -(dp46933 -S'editable' -p46934 -I00 -sS'value' -p46935 -NssS'summary_default' -p46936 -(dp46937 -S'editable' -p46938 -I01 -sS'value' -p46939 -S'none' -p46940 -sssS'description' -p46941 -(dp46942 -S'editable' -p46943 -I01 -sS'value' -p46944 -g47 -sssS'step_11' -p46945 -(dp46946 -S'mandatory' -p46947 -(dp46948 -S'editable' -p46949 -I00 -sS'value' -p46950 -I00 -ssS'name' -p46951 -(dp46952 -S'editable' -p46953 -I01 -sS'value' -p46954 -S'Rig' -p46955 -ssS'data_type' -p46956 -(dp46957 -S'editable' -p46958 -I00 -sS'value' -p46959 -S'pivot_column' -p46960 -ssS'entity_type' -p46961 -(dp46962 -S'editable' -p46963 -I00 -sS'value' -p46964 -S'Asset' -p46965 -ssS'editable' -p46966 -(dp46967 -S'editable' -p46968 -I00 -sS'value' -p46969 -I00 -ssS'unique' -p46970 -(dp46971 -S'editable' -p46972 -I00 -sS'value' -p46973 -I00 -ssS'properties' -p46974 -(dp46975 -S'default_value' -p46976 -(dp46977 -S'editable' -p46978 -I00 -sS'value' -p46979 -NssS'summary_default' -p46980 -(dp46981 -S'editable' -p46982 -I00 -sS'value' -p46983 -S'none' -p46984 -sssS'description' -p46985 -(dp46986 -S'editable' -p46987 -I01 -sS'value' -p46988 -g47 -sssS'step_10' -p46989 -(dp46990 -S'mandatory' -p46991 -(dp46992 -S'editable' -p46993 -I00 -sS'value' -p46994 -I00 -ssS'name' -p46995 -(dp46996 -S'editable' -p46997 -I01 -sS'value' -p46998 -S'Model' -p46999 -ssS'data_type' -p47000 -(dp47001 -S'editable' -p47002 -I00 -sS'value' -p47003 -S'pivot_column' -p47004 -ssS'entity_type' -p47005 -(dp47006 -S'editable' -p47007 -I00 -sS'value' -p47008 -S'Asset' -p47009 -ssS'editable' -p47010 -(dp47011 -S'editable' -p47012 -I00 -sS'value' -p47013 -I00 -ssS'unique' -p47014 -(dp47015 -S'editable' -p47016 -I00 -sS'value' -p47017 -I00 -ssS'properties' -p47018 -(dp47019 -S'default_value' -p47020 -(dp47021 -S'editable' -p47022 -I00 -sS'value' -p47023 -NssS'summary_default' -p47024 -(dp47025 -S'editable' -p47026 -I00 -sS'value' -p47027 -S'none' -p47028 -sssS'description' -p47029 -(dp47030 -S'editable' -p47031 -I01 -sS'value' -p47032 -g47 -sssS'mocap_takes' -p47033 -(dp47034 -S'mandatory' -p47035 -(dp47036 -S'editable' -p47037 -I00 -sS'value' -p47038 -I00 -ssS'name' -p47039 -(dp47040 -S'editable' -p47041 -I01 -sS'value' -p47042 -S'Mocap Takes' -p47043 -ssS'data_type' -p47044 -(dp47045 -S'editable' -p47046 -I00 -sS'value' -p47047 -S'multi_entity' -p47048 -ssS'entity_type' -p47049 -(dp47050 -S'editable' -p47051 -I00 -sS'value' -p47052 -S'Asset' -p47053 -ssS'editable' -p47054 -(dp47055 -S'editable' -p47056 -I00 -sS'value' -p47057 -I01 -ssS'unique' -p47058 -(dp47059 -S'editable' -p47060 -I00 -sS'value' -p47061 -I00 -ssS'properties' -p47062 -(dp47063 -S'default_value' -p47064 -(dp47065 -S'editable' -p47066 -I00 -sS'value' -p47067 -NssS'summary_default' -p47068 -(dp47069 -S'editable' -p47070 -I01 -sS'value' -p47071 -S'none' -p47072 -ssS'valid_types' -p47073 -(dp47074 -S'editable' -p47075 -I01 -sS'value' -p47076 -(lp47077 -S'MocapTake' -p47078 -asssS'description' -p47079 -(dp47080 -S'editable' -p47081 -I01 -sS'value' -p47082 -g47 -sssS'step_12' -p47083 -(dp47084 -S'mandatory' -p47085 -(dp47086 -S'editable' -p47087 -I00 -sS'value' -p47088 -I00 -ssS'name' -p47089 -(dp47090 -S'editable' -p47091 -I01 -sS'value' -p47092 -S'Surface' -p47093 -ssS'data_type' -p47094 -(dp47095 -S'editable' -p47096 -I00 -sS'value' -p47097 -S'pivot_column' -p47098 -ssS'entity_type' -p47099 -(dp47100 -S'editable' -p47101 -I00 -sS'value' -p47102 -S'Asset' -p47103 -ssS'editable' -p47104 -(dp47105 -S'editable' -p47106 -I00 -sS'value' -p47107 -I00 -ssS'unique' -p47108 -(dp47109 -S'editable' -p47110 -I00 -sS'value' -p47111 -I00 -ssS'properties' -p47112 -(dp47113 -S'default_value' -p47114 -(dp47115 -S'editable' -p47116 -I00 -sS'value' -p47117 -NssS'summary_default' -p47118 -(dp47119 -S'editable' -p47120 -I00 -sS'value' -p47121 -S'none' -p47122 -sssS'description' -p47123 -(dp47124 -S'editable' -p47125 -I01 -sS'value' -p47126 -g47 -sssS'image' -p47127 -(dp47128 -S'mandatory' -p47129 -(dp47130 -S'editable' -p47131 -I00 -sS'value' -p47132 -I00 -ssS'name' -p47133 -(dp47134 -S'editable' -p47135 -I01 -sS'value' -p47136 -S'Thumbnail' -p47137 -ssS'data_type' -p47138 -(dp47139 -S'editable' -p47140 -I00 -sS'value' -p47141 -S'image' -p47142 -ssS'entity_type' -p47143 -(dp47144 -S'editable' -p47145 -I00 -sS'value' -p47146 -S'Asset' -p47147 -ssS'editable' -p47148 -(dp47149 -S'editable' -p47150 -I00 -sS'value' -p47151 -I01 -ssS'unique' -p47152 -(dp47153 -S'editable' -p47154 -I00 -sS'value' -p47155 -I00 -ssS'properties' -p47156 -(dp47157 -S'default_value' -p47158 -(dp47159 -S'editable' -p47160 -I00 -sS'value' -p47161 -NssS'summary_default' -p47162 -(dp47163 -S'editable' -p47164 -I01 -sS'value' -p47165 -S'none' -p47166 -sssS'description' -p47167 -(dp47168 -S'editable' -p47169 -I01 -sS'value' -p47170 -g47 -sssS'updated_at' -p47171 -(dp47172 -S'mandatory' -p47173 -(dp47174 -S'editable' -p47175 -I00 -sS'value' -p47176 -I00 -ssS'name' -p47177 -(dp47178 -S'editable' -p47179 -I01 -sS'value' -p47180 -S'Date Updated' -p47181 -ssS'data_type' -p47182 -(dp47183 -S'editable' -p47184 -I00 -sS'value' -p47185 -S'date_time' -p47186 -ssS'entity_type' -p47187 -(dp47188 -S'editable' -p47189 -I00 -sS'value' -p47190 -S'Asset' -p47191 -ssS'editable' -p47192 -(dp47193 -S'editable' -p47194 -I00 -sS'value' -p47195 -I00 -ssS'unique' -p47196 -(dp47197 -S'editable' -p47198 -I00 -sS'value' -p47199 -I00 -ssS'properties' -p47200 -(dp47201 -S'default_value' -p47202 -(dp47203 -S'editable' -p47204 -I00 -sS'value' -p47205 -NssS'summary_default' -p47206 -(dp47207 -S'editable' -p47208 -I01 -sS'value' -p47209 -S'none' -p47210 -sssS'description' -p47211 -(dp47212 -S'editable' -p47213 -I01 -sS'value' -p47214 -g47 -sssS'tasks' -p47215 -(dp47216 -S'mandatory' -p47217 -(dp47218 -S'editable' -p47219 -I00 -sS'value' -p47220 -I00 -ssS'name' -p47221 -(dp47222 -S'editable' -p47223 -I01 -sS'value' -p47224 -S'Tasks' -p47225 -ssS'data_type' -p47226 -(dp47227 -S'editable' -p47228 -I00 -sS'value' -p47229 -S'multi_entity' -p47230 -ssS'entity_type' -p47231 -(dp47232 -S'editable' -p47233 -I00 -sS'value' -p47234 -S'Asset' -p47235 -ssS'editable' -p47236 -(dp47237 -S'editable' -p47238 -I00 -sS'value' -p47239 -I01 -ssS'unique' -p47240 -(dp47241 -S'editable' -p47242 -I00 -sS'value' -p47243 -I00 -ssS'properties' -p47244 -(dp47245 -S'default_value' -p47246 -(dp47247 -S'editable' -p47248 -I00 -sS'value' -p47249 -NssS'summary_default' -p47250 -(dp47251 -S'editable' -p47252 -I01 -sS'value' -p47253 -S'none' -p47254 -ssS'valid_types' -p47255 -(dp47256 -S'editable' -p47257 -I01 -sS'value' -p47258 -(lp47259 -S'Task' -p47260 -asssS'description' -p47261 -(dp47262 -S'editable' -p47263 -I01 -sS'value' -p47264 -g47 -sssS'sequences' -p47265 -(dp47266 -S'mandatory' -p47267 -(dp47268 -S'editable' -p47269 -I00 -sS'value' -p47270 -I00 -ssS'name' -p47271 -(dp47272 -S'editable' -p47273 -I01 -sS'value' -p47274 -S'Sequences' -p47275 -ssS'data_type' -p47276 -(dp47277 -S'editable' -p47278 -I00 -sS'value' -p47279 -S'multi_entity' -p47280 -ssS'entity_type' -p47281 -(dp47282 -S'editable' -p47283 -I00 -sS'value' -p47284 -S'Asset' -p47285 -ssS'editable' -p47286 -(dp47287 -S'editable' -p47288 -I00 -sS'value' -p47289 -I01 -ssS'unique' -p47290 -(dp47291 -S'editable' -p47292 -I00 -sS'value' -p47293 -I00 -ssS'properties' -p47294 -(dp47295 -S'default_value' -p47296 -(dp47297 -S'editable' -p47298 -I00 -sS'value' -p47299 -NssS'summary_default' -p47300 -(dp47301 -S'editable' -p47302 -I01 -sS'value' -p47303 -S'none' -p47304 -ssS'valid_types' -p47305 -(dp47306 -S'editable' -p47307 -I01 -sS'value' -p47308 -(lp47309 -S'Sequence' -p47310 -asssS'description' -p47311 -(dp47312 -S'editable' -p47313 -I01 -sS'value' -p47314 -g47 -sssS'cached_display_name' -p47315 -(dp47316 -S'mandatory' -p47317 -(dp47318 -S'editable' -p47319 -I00 -sS'value' -p47320 -I00 -ssS'name' -p47321 -(dp47322 -S'editable' -p47323 -I01 -sS'value' -p47324 -S'Cached Display Name' -p47325 -ssS'data_type' -p47326 -(dp47327 -S'editable' -p47328 -I00 -sS'value' -p47329 -S'text' -p47330 -ssS'entity_type' -p47331 -(dp47332 -S'editable' -p47333 -I00 -sS'value' -p47334 -S'Asset' -p47335 -ssS'editable' -p47336 -(dp47337 -S'editable' -p47338 -I00 -sS'value' -p47339 -I01 -ssS'unique' -p47340 -(dp47341 -S'editable' -p47342 -I00 -sS'value' -p47343 -I00 -ssS'properties' -p47344 -(dp47345 -S'default_value' -p47346 -(dp47347 -S'editable' -p47348 -I00 -sS'value' -p47349 -NssS'summary_default' -p47350 -(dp47351 -S'editable' -p47352 -I00 -sS'value' -p47353 -S'none' -p47354 -sssS'description' -p47355 -(dp47356 -S'editable' -p47357 -I01 -sS'value' -p47358 -g47 -sssS'id' -p47359 -(dp47360 -S'mandatory' -p47361 -(dp47362 -S'editable' -p47363 -I00 -sS'value' -p47364 -I00 -ssS'name' -p47365 -(dp47366 -S'editable' -p47367 -I01 -sS'value' -p47368 -S'Id' -p47369 -ssS'data_type' -p47370 -(dp47371 -S'editable' -p47372 -I00 -sS'value' -p47373 -S'number' -p47374 -ssS'entity_type' -p47375 -(dp47376 -S'editable' -p47377 -I00 -sS'value' -p47378 -S'Asset' -p47379 -ssS'editable' -p47380 -(dp47381 -S'editable' -p47382 -I00 -sS'value' -p47383 -I00 -ssS'unique' -p47384 -(dp47385 -S'editable' -p47386 -I00 -sS'value' -p47387 -I00 -ssS'properties' -p47388 -(dp47389 -S'default_value' -p47390 -(dp47391 -S'editable' -p47392 -I00 -sS'value' -p47393 -NssS'summary_default' -p47394 -(dp47395 -S'editable' -p47396 -I01 -sS'value' -p47397 -S'none' -p47398 -sssS'description' -p47399 -(dp47400 -S'editable' -p47401 -I01 -sS'value' -p47402 -g47 -sssS'updated_by' -p47403 -(dp47404 -S'mandatory' -p47405 -(dp47406 -S'editable' -p47407 -I00 -sS'value' -p47408 -I00 -ssS'name' -p47409 -(dp47410 -S'editable' -p47411 -I01 -sS'value' -p47412 -S'Updated by' -p47413 -ssS'data_type' -p47414 -(dp47415 -S'editable' -p47416 -I00 -sS'value' -p47417 -S'entity' -p47418 -ssS'entity_type' -p47419 -(dp47420 -S'editable' -p47421 -I00 -sS'value' -p47422 -S'Asset' -p47423 -ssS'editable' -p47424 -(dp47425 -S'editable' -p47426 -I00 -sS'value' -p47427 -I00 -ssS'unique' -p47428 -(dp47429 -S'editable' -p47430 -I00 -sS'value' -p47431 -I00 -ssS'properties' -p47432 -(dp47433 -S'default_value' -p47434 -(dp47435 -S'editable' -p47436 -I00 -sS'value' -p47437 -NssS'summary_default' -p47438 -(dp47439 -S'editable' -p47440 -I01 -sS'value' -p47441 -S'none' -p47442 -ssS'valid_types' -p47443 -(dp47444 -S'editable' -p47445 -I01 -sS'value' -p47446 -(lp47447 -S'HumanUser' -p47448 -aS'ApiUser' -p47449 -asssS'description' -p47450 -(dp47451 -S'editable' -p47452 -I01 -sS'value' -p47453 -g47 -sssS'open_notes' -p47454 -(dp47455 -S'mandatory' -p47456 -(dp47457 -S'editable' -p47458 -I00 -sS'value' -p47459 -I00 -ssS'name' -p47460 -(dp47461 -S'editable' -p47462 -I01 -sS'value' -p47463 -S'Open Notes' -p47464 -ssS'data_type' -p47465 -(dp47466 -S'editable' -p47467 -I00 -sS'value' -p47468 -S'multi_entity' -p47469 -ssS'entity_type' -p47470 -(dp47471 -S'editable' -p47472 -I00 -sS'value' -p47473 -S'Asset' -p47474 -ssS'editable' -p47475 -(dp47476 -S'editable' -p47477 -I00 -sS'value' -p47478 -I00 -ssS'unique' -p47479 -(dp47480 -S'editable' -p47481 -I00 -sS'value' -p47482 -I00 -ssS'properties' -p47483 -(dp47484 -S'default_value' -p47485 -(dp47486 -S'editable' -p47487 -I00 -sS'value' -p47488 -NssS'summary_default' -p47489 -(dp47490 -S'editable' -p47491 -I01 -sS'value' -p47492 -S'none' -p47493 -ssS'valid_types' -p47494 -(dp47495 -S'editable' -p47496 -I01 -sS'value' -p47497 -(lp47498 -S'Note' -p47499 -asssS'description' -p47500 -(dp47501 -S'editable' -p47502 -I01 -sS'value' -p47503 -g47 -sssS'task_template' -p47504 -(dp47505 -S'mandatory' -p47506 -(dp47507 -S'editable' -p47508 -I00 -sS'value' -p47509 -I00 -ssS'name' -p47510 -(dp47511 -S'editable' -p47512 -I01 -sS'value' -p47513 -S'Task Template' -p47514 -ssS'data_type' -p47515 -(dp47516 -S'editable' -p47517 -I00 -sS'value' -p47518 -S'entity' -p47519 -ssS'entity_type' -p47520 -(dp47521 -S'editable' -p47522 -I00 -sS'value' -p47523 -S'Asset' -p47524 -ssS'editable' -p47525 -(dp47526 -S'editable' -p47527 -I00 -sS'value' -p47528 -I01 -ssS'unique' -p47529 -(dp47530 -S'editable' -p47531 -I00 -sS'value' -p47532 -I00 -ssS'properties' -p47533 -(dp47534 -S'default_value' -p47535 -(dp47536 -S'editable' -p47537 -I00 -sS'value' -p47538 -NssS'summary_default' -p47539 -(dp47540 -S'editable' -p47541 -I01 -sS'value' -p47542 -S'none' -p47543 -ssS'valid_types' -p47544 -(dp47545 -S'editable' -p47546 -I01 -sS'value' -p47547 -(lp47548 -S'TaskTemplate' -p47549 -asssS'description' -p47550 -(dp47551 -S'editable' -p47552 -I01 -sS'value' -p47553 -g47 -sssS'created_by' -p47554 -(dp47555 -S'mandatory' -p47556 -(dp47557 -S'editable' -p47558 -I00 -sS'value' -p47559 -I00 -ssS'name' -p47560 -(dp47561 -S'editable' -p47562 -I01 -sS'value' -p47563 -S'Created by' -p47564 -ssS'data_type' -p47565 -(dp47566 -S'editable' -p47567 -I00 -sS'value' -p47568 -S'entity' -p47569 -ssS'entity_type' -p47570 -(dp47571 -S'editable' -p47572 -I00 -sS'value' -p47573 -S'Asset' -p47574 -ssS'editable' -p47575 -(dp47576 -S'editable' -p47577 -I00 -sS'value' -p47578 -I00 -ssS'unique' -p47579 -(dp47580 -S'editable' -p47581 -I00 -sS'value' -p47582 -I00 -ssS'properties' -p47583 -(dp47584 -S'default_value' -p47585 -(dp47586 -S'editable' -p47587 -I00 -sS'value' -p47588 -NssS'summary_default' -p47589 -(dp47590 -S'editable' -p47591 -I01 -sS'value' -p47592 -S'none' -p47593 -ssS'valid_types' -p47594 -(dp47595 -S'editable' -p47596 -I01 -sS'value' -p47597 -(lp47598 -S'HumanUser' -p47599 -aS'ApiUser' -p47600 -asssS'description' -p47601 -(dp47602 -S'editable' -p47603 -I01 -sS'value' -p47604 -g47 -sssS'parents' -p47605 -(dp47606 -S'mandatory' -p47607 -(dp47608 -S'editable' -p47609 -I00 -sS'value' -p47610 -I00 -ssS'name' -p47611 -(dp47612 -S'editable' -p47613 -I01 -sS'value' -p47614 -S'Parent Assets' -p47615 -ssS'data_type' -p47616 -(dp47617 -S'editable' -p47618 -I00 -sS'value' -p47619 -S'multi_entity' -p47620 -ssS'entity_type' -p47621 -(dp47622 -S'editable' -p47623 -I00 -sS'value' -p47624 -S'Asset' -p47625 -ssS'editable' -p47626 -(dp47627 -S'editable' -p47628 -I00 -sS'value' -p47629 -I01 -ssS'unique' -p47630 -(dp47631 -S'editable' -p47632 -I00 -sS'value' -p47633 -I00 -ssS'properties' -p47634 -(dp47635 -S'default_value' -p47636 -(dp47637 -S'editable' -p47638 -I00 -sS'value' -p47639 -NssS'summary_default' -p47640 -(dp47641 -S'editable' -p47642 -I01 -sS'value' -p47643 -S'none' -p47644 -ssS'valid_types' -p47645 -(dp47646 -S'editable' -p47647 -I01 -sS'value' -p47648 -(lp47649 -S'Asset' -p47650 -asssS'description' -p47651 -(dp47652 -S'editable' -p47653 -I01 -sS'value' -p47654 -g47 -sssS'sg_status_list' -p47655 -(dp47656 -S'mandatory' -p47657 -(dp47658 -S'editable' -p47659 -I00 -sS'value' -p47660 -I00 -ssS'name' -p47661 -(dp47662 -S'editable' -p47663 -I01 -sS'value' -p47664 -S'Status' -p47665 -ssS'data_type' -p47666 -(dp47667 -S'editable' -p47668 -I00 -sS'value' -p47669 -S'status_list' -p47670 -ssS'entity_type' -p47671 -(dp47672 -S'editable' -p47673 -I00 -sS'value' -p47674 -S'Asset' -p47675 -ssS'editable' -p47676 -(dp47677 -S'editable' -p47678 -I00 -sS'value' -p47679 -I01 -ssS'unique' -p47680 -(dp47681 -S'editable' -p47682 -I00 -sS'value' -p47683 -I00 -ssS'properties' -p47684 -(dp47685 -S'default_value' -p47686 -(dp47687 -S'editable' -p47688 -I01 -sS'value' -p47689 -S'wtg' -p47690 -ssS'valid_values' -p47691 -(dp47692 -S'editable' -p47693 -I01 -sS'value' -p47694 -(lp47695 -S'fin' -p47696 -aS'ip' -p47697 -aS'omt' -p47698 -aS'hld' -p47699 -aS'rdy' -p47700 -aS'wtg' -p47701 -assS'summary_default' -p47702 -(dp47703 -S'editable' -p47704 -I01 -sS'value' -p47705 -S'status_list' -p47706 -sssS'description' -p47707 -(dp47708 -S'editable' -p47709 -I01 -sS'value' -p47710 -g47 -sssS'elements' -p47711 -(dp47712 -S'mandatory' -p47713 -(dp47714 -S'editable' -p47715 -I00 -sS'value' -p47716 -I00 -ssS'name' -p47717 -(dp47718 -S'editable' -p47719 -I01 -sS'value' -p47720 -S'Elements' -p47721 -ssS'data_type' -p47722 -(dp47723 -S'editable' -p47724 -I00 -sS'value' -p47725 -S'multi_entity' -p47726 -ssS'entity_type' -p47727 -(dp47728 -S'editable' -p47729 -I00 -sS'value' -p47730 -S'Asset' -p47731 -ssS'editable' -p47732 -(dp47733 -S'editable' -p47734 -I00 -sS'value' -p47735 -I01 -ssS'unique' -p47736 -(dp47737 -S'editable' -p47738 -I00 -sS'value' -p47739 -I00 -ssS'properties' -p47740 -(dp47741 -S'default_value' -p47742 -(dp47743 -S'editable' -p47744 -I00 -sS'value' -p47745 -NssS'summary_default' -p47746 -(dp47747 -S'editable' -p47748 -I00 -sS'value' -p47749 -S'none' -p47750 -ssS'valid_types' -p47751 -(dp47752 -S'editable' -p47753 -I00 -sS'value' -p47754 -(lp47755 -S'Element' -p47756 -asssS'description' -p47757 -(dp47758 -S'editable' -p47759 -I01 -sS'value' -p47760 -g47 -sssS'description' -p47761 -(dp47762 -S'mandatory' -p47763 -(dp47764 -S'editable' -p47765 -I00 -sS'value' -p47766 -I00 -ssS'name' -p47767 -(dp47768 -S'editable' -p47769 -I01 -sS'value' -p47770 -S'Description' -p47771 -ssS'data_type' -p47772 -(dp47773 -S'editable' -p47774 -I00 -sS'value' -p47775 -S'text' -p47776 -ssS'entity_type' -p47777 -(dp47778 -S'editable' -p47779 -I00 -sS'value' -p47780 -S'Asset' -p47781 -ssS'editable' -p47782 -(dp47783 -S'editable' -p47784 -I00 -sS'value' -p47785 -I01 -ssS'unique' -p47786 -(dp47787 -S'editable' -p47788 -I00 -sS'value' -p47789 -I00 -ssS'properties' -p47790 -(dp47791 -S'default_value' -p47792 -(dp47793 -S'editable' -p47794 -I00 -sS'value' -p47795 -NssS'summary_default' -p47796 -(dp47797 -S'editable' -p47798 -I01 -sS'value' -p47799 -S'none' -p47800 -sssS'description' -p47801 -(dp47802 -S'editable' -p47803 -I01 -sS'value' -p47804 -g47 -sssS'addressings_cc' -p47805 -(dp47806 -S'mandatory' -p47807 -(dp47808 -S'editable' -p47809 -I00 -sS'value' -p47810 -I00 -ssS'name' -p47811 -(dp47812 -S'editable' -p47813 -I01 -sS'value' -p47814 -S'Cc' -p47815 -ssS'data_type' -p47816 -(dp47817 -S'editable' -p47818 -I00 -sS'value' -p47819 -S'multi_entity' -p47820 -ssS'entity_type' -p47821 -(dp47822 -S'editable' -p47823 -I00 -sS'value' -p47824 -S'Asset' -p47825 -ssS'editable' -p47826 -(dp47827 -S'editable' -p47828 -I00 -sS'value' -p47829 -I01 -ssS'unique' -p47830 -(dp47831 -S'editable' -p47832 -I00 -sS'value' -p47833 -I00 -ssS'properties' -p47834 -(dp47835 -S'default_value' -p47836 -(dp47837 -S'editable' -p47838 -I00 -sS'value' -p47839 -NssS'summary_default' -p47840 -(dp47841 -S'editable' -p47842 -I01 -sS'value' -p47843 -S'none' -p47844 -ssS'valid_types' -p47845 -(dp47846 -S'editable' -p47847 -I01 -sS'value' -p47848 -(lp47849 -S'Group' -p47850 -aS'HumanUser' -p47851 -asssS'description' -p47852 -(dp47853 -S'editable' -p47854 -I01 -sS'value' -p47855 -g47 -sssS'shoot_days' -p47856 -(dp47857 -S'mandatory' -p47858 -(dp47859 -S'editable' -p47860 -I00 -sS'value' -p47861 -I00 -ssS'name' -p47862 -(dp47863 -S'editable' -p47864 -I01 -sS'value' -p47865 -S'Shoot Days' -p47866 -ssS'data_type' -p47867 -(dp47868 -S'editable' -p47869 -I00 -sS'value' -p47870 -S'multi_entity' -p47871 -ssS'entity_type' -p47872 -(dp47873 -S'editable' -p47874 -I00 -sS'value' -p47875 -S'Asset' -p47876 -ssS'editable' -p47877 -(dp47878 -S'editable' -p47879 -I00 -sS'value' -p47880 -I01 -ssS'unique' -p47881 -(dp47882 -S'editable' -p47883 -I00 -sS'value' -p47884 -I00 -ssS'properties' -p47885 -(dp47886 -S'default_value' -p47887 -(dp47888 -S'editable' -p47889 -I00 -sS'value' -p47890 -NssS'summary_default' -p47891 -(dp47892 -S'editable' -p47893 -I01 -sS'value' -p47894 -S'none' -p47895 -ssS'valid_types' -p47896 -(dp47897 -S'editable' -p47898 -I01 -sS'value' -p47899 -(lp47900 -S'ShootDay' -p47901 -asssS'description' -p47902 -(dp47903 -S'editable' -p47904 -I01 -sS'value' -p47905 -g47 -sssS'step_0' -p47906 -(dp47907 -S'mandatory' -p47908 -(dp47909 -S'editable' -p47910 -I00 -sS'value' -p47911 -I00 -ssS'name' -p47912 -(dp47913 -S'editable' -p47914 -I01 -sS'value' -p47915 -S'ALL TASKS' -p47916 -ssS'data_type' -p47917 -(dp47918 -S'editable' -p47919 -I00 -sS'value' -p47920 -S'pivot_column' -p47921 -ssS'entity_type' -p47922 -(dp47923 -S'editable' -p47924 -I00 -sS'value' -p47925 -S'Asset' -p47926 -ssS'editable' -p47927 -(dp47928 -S'editable' -p47929 -I00 -sS'value' -p47930 -I00 -ssS'unique' -p47931 -(dp47932 -S'editable' -p47933 -I00 -sS'value' -p47934 -I00 -ssS'properties' -p47935 -(dp47936 -S'default_value' -p47937 -(dp47938 -S'editable' -p47939 -I00 -sS'value' -p47940 -NssS'summary_default' -p47941 -(dp47942 -S'editable' -p47943 -I00 -sS'value' -p47944 -S'none' -p47945 -sssS'description' -p47946 -(dp47947 -S'editable' -p47948 -I01 -sS'value' -p47949 -g47 -sssS'tag_list' -p47950 -(dp47951 -S'mandatory' -p47952 -(dp47953 -S'editable' -p47954 -I00 -sS'value' -p47955 -I00 -ssS'name' -p47956 -(dp47957 -S'editable' -p47958 -I01 -sS'value' -p47959 -S'Tags' -p47960 -ssS'data_type' -p47961 -(dp47962 -S'editable' -p47963 -I00 -sS'value' -p47964 -S'tag_list' -p47965 -ssS'entity_type' -p47966 -(dp47967 -S'editable' -p47968 -I00 -sS'value' -p47969 -S'Asset' -p47970 -ssS'editable' -p47971 -(dp47972 -S'editable' -p47973 -I00 -sS'value' -p47974 -I01 -ssS'unique' -p47975 -(dp47976 -S'editable' -p47977 -I00 -sS'value' -p47978 -I00 -ssS'properties' -p47979 -(dp47980 -S'default_value' -p47981 -(dp47982 -S'editable' -p47983 -I00 -sS'value' -p47984 -NssS'summary_default' -p47985 -(dp47986 -S'editable' -p47987 -I01 -sS'value' -p47988 -S'none' -p47989 -ssS'valid_types' -p47990 -(dp47991 -S'editable' -p47992 -I01 -sS'value' -p47993 -(lp47994 -S'Tag' -p47995 -asssS'description' -p47996 -(dp47997 -S'editable' -p47998 -I01 -sS'value' -p47999 -g47 -sssS'assets' -p48000 -(dp48001 -S'mandatory' -p48002 -(dp48003 -S'editable' -p48004 -I00 -sS'value' -p48005 -I00 -ssS'name' -p48006 -(dp48007 -S'editable' -p48008 -I01 -sS'value' -p48009 -S'Sub Assets' -p48010 -ssS'data_type' -p48011 -(dp48012 -S'editable' -p48013 -I00 -sS'value' -p48014 -S'multi_entity' -p48015 -ssS'entity_type' -p48016 -(dp48017 -S'editable' -p48018 -I00 -sS'value' -p48019 -S'Asset' -p48020 -ssS'editable' -p48021 -(dp48022 -S'editable' -p48023 -I00 -sS'value' -p48024 -I01 -ssS'unique' -p48025 -(dp48026 -S'editable' -p48027 -I00 -sS'value' -p48028 -I00 -ssS'properties' -p48029 -(dp48030 -S'default_value' -p48031 -(dp48032 -S'editable' -p48033 -I00 -sS'value' -p48034 -NssS'summary_default' -p48035 -(dp48036 -S'editable' -p48037 -I01 -sS'value' -p48038 -S'none' -p48039 -ssS'valid_types' -p48040 -(dp48041 -S'editable' -p48042 -I01 -sS'value' -p48043 -(lp48044 -S'Asset' -p48045 -asssS'description' -p48046 -(dp48047 -S'editable' -p48048 -I01 -sS'value' -p48049 -g47 -sssS'step_9' -p48050 -(dp48051 -S'mandatory' -p48052 -(dp48053 -S'editable' -p48054 -I00 -sS'value' -p48055 -I00 -ssS'name' -p48056 -(dp48057 -S'editable' -p48058 -I01 -sS'value' -p48059 -S'Art' -p48060 -ssS'data_type' -p48061 -(dp48062 -S'editable' -p48063 -I00 -sS'value' -p48064 -S'pivot_column' -p48065 -ssS'entity_type' -p48066 -(dp48067 -S'editable' -p48068 -I00 -sS'value' -p48069 -S'Asset' -p48070 -ssS'editable' -p48071 -(dp48072 -S'editable' -p48073 -I00 -sS'value' -p48074 -I00 -ssS'unique' -p48075 -(dp48076 -S'editable' -p48077 -I00 -sS'value' -p48078 -I00 -ssS'properties' -p48079 -(dp48080 -S'default_value' -p48081 -(dp48082 -S'editable' -p48083 -I00 -sS'value' -p48084 -NssS'summary_default' -p48085 -(dp48086 -S'editable' -p48087 -I00 -sS'value' -p48088 -S'none' -p48089 -sssS'description' -p48090 -(dp48091 -S'editable' -p48092 -I01 -sS'value' -p48093 -g47 -sssS'notes' -p48094 -(dp48095 -S'mandatory' -p48096 -(dp48097 -S'editable' -p48098 -I00 -sS'value' -p48099 -I00 -ssS'name' -p48100 -(dp48101 -S'editable' -p48102 -I01 -sS'value' -p48103 -S'Notes' -p48104 -ssS'data_type' -p48105 -(dp48106 -S'editable' -p48107 -I00 -sS'value' -p48108 -S'multi_entity' -p48109 -ssS'entity_type' -p48110 -(dp48111 -S'editable' -p48112 -I00 -sS'value' -p48113 -S'Asset' -p48114 -ssS'editable' -p48115 -(dp48116 -S'editable' -p48117 -I00 -sS'value' -p48118 -I01 -ssS'unique' -p48119 -(dp48120 -S'editable' -p48121 -I00 -sS'value' -p48122 -I00 -ssS'properties' -p48123 -(dp48124 -S'default_value' -p48125 -(dp48126 -S'editable' -p48127 -I00 -sS'value' -p48128 -NssS'summary_default' -p48129 -(dp48130 -S'editable' -p48131 -I01 -sS'value' -p48132 -S'none' -p48133 -ssS'valid_types' -p48134 -(dp48135 -S'editable' -p48136 -I01 -sS'value' -p48137 -(lp48138 -S'Note' -p48139 -asssS'description' -p48140 -(dp48141 -S'editable' -p48142 -I01 -sS'value' -p48143 -g47 -sssS'scenes' -p48144 -(dp48145 -S'mandatory' -p48146 -(dp48147 -S'editable' -p48148 -I00 -sS'value' -p48149 -I00 -ssS'name' -p48150 -(dp48151 -S'editable' -p48152 -I01 -sS'value' -p48153 -S'Scenes' -p48154 -ssS'data_type' -p48155 -(dp48156 -S'editable' -p48157 -I00 -sS'value' -p48158 -S'multi_entity' -p48159 -ssS'entity_type' -p48160 -(dp48161 -S'editable' -p48162 -I00 -sS'value' -p48163 -S'Asset' -p48164 -ssS'editable' -p48165 -(dp48166 -S'editable' -p48167 -I00 -sS'value' -p48168 -I01 -ssS'unique' -p48169 -(dp48170 -S'editable' -p48171 -I00 -sS'value' -p48172 -I00 -ssS'properties' -p48173 -(dp48174 -S'default_value' -p48175 -(dp48176 -S'editable' -p48177 -I00 -sS'value' -p48178 -NssS'summary_default' -p48179 -(dp48180 -S'editable' -p48181 -I01 -sS'value' -p48182 -S'none' -p48183 -ssS'valid_types' -p48184 -(dp48185 -S'editable' -p48186 -I01 -sS'value' -p48187 -(lp48188 -S'Scene' -p48189 -asssS'description' -p48190 -(dp48191 -S'editable' -p48192 -I01 -sS'value' -p48193 -g47 -sssS'project' -p48194 -(dp48195 -S'mandatory' -p48196 -(dp48197 -S'editable' -p48198 -I00 -sS'value' -p48199 -I00 -ssS'name' -p48200 -(dp48201 -S'editable' -p48202 -I01 -sS'value' -p48203 -S'Project' -p48204 -ssS'data_type' -p48205 -(dp48206 -S'editable' -p48207 -I00 -sS'value' -p48208 -S'entity' -p48209 -ssS'entity_type' -p48210 -(dp48211 -S'editable' -p48212 -I00 -sS'value' -p48213 -S'Asset' -p48214 -ssS'editable' -p48215 -(dp48216 -S'editable' -p48217 -I00 -sS'value' -p48218 -I01 -ssS'unique' -p48219 -(dp48220 -S'editable' -p48221 -I00 -sS'value' -p48222 -I00 -ssS'properties' -p48223 -(dp48224 -S'default_value' -p48225 -(dp48226 -S'editable' -p48227 -I00 -sS'value' -p48228 -NssS'summary_default' -p48229 -(dp48230 -S'editable' -p48231 -I01 -sS'value' -p48232 -S'none' -p48233 -ssS'valid_types' -p48234 -(dp48235 -S'editable' -p48236 -I01 -sS'value' -p48237 -(lp48238 -S'Project' -p48239 -asssS'description' -p48240 -(dp48241 -S'editable' -p48242 -I01 -sS'value' -p48243 -g47 -sssS'filmstrip_image' -p48244 -(dp48245 -S'mandatory' -p48246 -(dp48247 -S'editable' -p48248 -I00 -sS'value' -p48249 -I00 -ssS'name' -p48250 -(dp48251 -S'editable' -p48252 -I01 -sS'value' -p48253 -S'Filmstrip Thumbnail' -p48254 -ssS'data_type' -p48255 -(dp48256 -S'editable' -p48257 -I00 -sS'value' -p48258 -S'image' -p48259 -ssS'entity_type' -p48260 -(dp48261 -S'editable' -p48262 -I00 -sS'value' -p48263 -S'Asset' -p48264 -ssS'editable' -p48265 -(dp48266 -S'editable' -p48267 -I00 -sS'value' -p48268 -I01 -ssS'unique' -p48269 -(dp48270 -S'editable' -p48271 -I00 -sS'value' -p48272 -I00 -ssS'properties' -p48273 -(dp48274 -S'default_value' -p48275 -(dp48276 -S'editable' -p48277 -I00 -sS'value' -p48278 -NssS'summary_default' -p48279 -(dp48280 -S'editable' -p48281 -I01 -sS'value' -p48282 -S'none' -p48283 -sssS'description' -p48284 -(dp48285 -S'editable' -p48286 -I01 -sS'value' -p48287 -g47 -sssS'shots' -p48288 -(dp48289 -S'mandatory' -p48290 -(dp48291 -S'editable' -p48292 -I00 -sS'value' -p48293 -I00 -ssS'name' -p48294 -(dp48295 -S'editable' -p48296 -I01 -sS'value' -p48297 -S'Shots' -p48298 -ssS'data_type' -p48299 -(dp48300 -S'editable' -p48301 -I00 -sS'value' -p48302 -S'multi_entity' -p48303 -ssS'entity_type' -p48304 -(dp48305 -S'editable' -p48306 -I00 -sS'value' -p48307 -S'Asset' -p48308 -ssS'editable' -p48309 -(dp48310 -S'editable' -p48311 -I00 -sS'value' -p48312 -I01 -ssS'unique' -p48313 -(dp48314 -S'editable' -p48315 -I00 -sS'value' -p48316 -I00 -ssS'properties' -p48317 -(dp48318 -S'default_value' -p48319 -(dp48320 -S'editable' -p48321 -I00 -sS'value' -p48322 -NssS'summary_default' -p48323 -(dp48324 -S'editable' -p48325 -I01 -sS'value' -p48326 -S'none' -p48327 -ssS'valid_types' -p48328 -(dp48329 -S'editable' -p48330 -I01 -sS'value' -p48331 -(lp48332 -S'Shot' -p48333 -asssS'description' -p48334 -(dp48335 -S'editable' -p48336 -I01 -sS'value' -p48337 -g47 -sssS'sg_asset_library' -p48338 -(dp48339 -S'mandatory' -p48340 -(dp48341 -S'editable' -p48342 -I00 -sS'value' -p48343 -I00 -ssS'name' -p48344 -(dp48345 -S'editable' -p48346 -I01 -sS'value' -p48347 -S'Asset Library' -p48348 -ssS'data_type' -p48349 -(dp48350 -S'editable' -p48351 -I00 -sS'value' -p48352 -S'entity' -p48353 -ssS'entity_type' -p48354 -(dp48355 -S'editable' -p48356 -I00 -sS'value' -p48357 -S'Asset' -p48358 -ssS'editable' -p48359 -(dp48360 -S'editable' -p48361 -I00 -sS'value' -p48362 -I01 -ssS'unique' -p48363 -(dp48364 -S'editable' -p48365 -I00 -sS'value' -p48366 -I00 -ssS'properties' -p48367 -(dp48368 -S'default_value' -p48369 -(dp48370 -S'editable' -p48371 -I00 -sS'value' -p48372 -NssS'summary_default' -p48373 -(dp48374 -S'editable' -p48375 -I01 -sS'value' -p48376 -S'none' -p48377 -ssS'valid_types' -p48378 -(dp48379 -S'editable' -p48380 -I01 -sS'value' -p48381 -(lp48382 -S'AssetLibrary' -p48383 -asssS'description' -p48384 -(dp48385 -S'editable' -p48386 -I01 -sS'value' -p48387 -g47 -sssS'sg_asset_type' -p48388 -(dp48389 -S'mandatory' -p48390 -(dp48391 -S'editable' -p48392 -I00 -sS'value' -p48393 -I00 -ssS'name' -p48394 -(dp48395 -S'editable' -p48396 -I01 -sS'value' -p48397 -S'Type' -p48398 -ssS'data_type' -p48399 -(dp48400 -S'editable' -p48401 -I00 -sS'value' -p48402 -S'list' -p48403 -ssS'entity_type' -p48404 -(dp48405 -S'editable' -p48406 -I00 -sS'value' -p48407 -S'Asset' -p48408 -ssS'editable' -p48409 -(dp48410 -S'editable' -p48411 -I00 -sS'value' -p48412 -I01 -ssS'unique' -p48413 -(dp48414 -S'editable' -p48415 -I00 -sS'value' -p48416 -I00 -ssS'properties' -p48417 -(dp48418 -S'default_value' -p48419 -(dp48420 -S'editable' -p48421 -I00 -sS'value' -p48422 -NssS'valid_values' -p48423 -(dp48424 -S'editable' -p48425 -I01 -sS'value' -p48426 -(lp48427 -S'Character' -p48428 -aS'Vehicle' -p48429 -aS'Prop' -p48430 -aS'Environment' -p48431 -aS'Matte Painting' -p48432 -assS'summary_default' -p48433 -(dp48434 -S'editable' -p48435 -I01 -sS'value' -p48436 -S'none' -p48437 -sssS'description' -p48438 -(dp48439 -S'editable' -p48440 -I01 -sS'value' -p48441 -g47 -sssS'sg_library' -p48442 -(dp48443 -S'mandatory' -p48444 -(dp48445 -S'editable' -p48446 -I00 -sS'value' -p48447 -I00 -ssS'name' -p48448 -(dp48449 -S'editable' -p48450 -I01 -sS'value' -p48451 -S'Library' -p48452 -ssS'data_type' -p48453 -(dp48454 -S'editable' -p48455 -I00 -sS'value' -p48456 -S'entity' -p48457 -ssS'entity_type' -p48458 -(dp48459 -S'editable' -p48460 -I00 -sS'value' -p48461 -S'Asset' -p48462 -ssS'editable' -p48463 -(dp48464 -S'editable' -p48465 -I00 -sS'value' -p48466 -I01 -ssS'unique' -p48467 -(dp48468 -S'editable' -p48469 -I00 -sS'value' -p48470 -I00 -ssS'properties' -p48471 -(dp48472 -S'default_value' -p48473 -(dp48474 -S'editable' -p48475 -I00 -sS'value' -p48476 -NssS'summary_default' -p48477 -(dp48478 -S'editable' -p48479 -I01 -sS'value' -p48480 -S'none' -p48481 -ssS'valid_types' -p48482 -(dp48483 -S'editable' -p48484 -I01 -sS'value' -p48485 -(lp48486 -S'AssetLibrary' -p48487 -asssS'description' -p48488 -(dp48489 -S'editable' -p48490 -I01 -sS'value' -p48491 -g47 -sssS'created_at' -p48492 -(dp48493 -S'mandatory' -p48494 -(dp48495 -S'editable' -p48496 -I00 -sS'value' -p48497 -I00 -ssS'name' -p48498 -(dp48499 -S'editable' -p48500 -I01 -sS'value' -p48501 -S'Date Created' -p48502 -ssS'data_type' -p48503 -(dp48504 -S'editable' -p48505 -I00 -sS'value' -p48506 -S'date_time' -p48507 -ssS'entity_type' -p48508 -(dp48509 -S'editable' -p48510 -I00 -sS'value' -p48511 -S'Asset' -p48512 -ssS'editable' -p48513 -(dp48514 -S'editable' -p48515 -I00 -sS'value' -p48516 -I00 -ssS'unique' -p48517 -(dp48518 -S'editable' -p48519 -I00 -sS'value' -p48520 -I00 -ssS'properties' -p48521 -(dp48522 -S'default_value' -p48523 -(dp48524 -S'editable' -p48525 -I00 -sS'value' -p48526 -NssS'summary_default' -p48527 -(dp48528 -S'editable' -p48529 -I01 -sS'value' -p48530 -S'none' -p48531 -sssS'description' -p48532 -(dp48533 -S'editable' -p48534 -I01 -sS'value' -p48535 -g47 -ssss. diff --git a/tests/mockgun/schema_entity.pickle b/tests/mockgun/schema_entity.pickle deleted file mode 100644 index 916d1d382..000000000 --- a/tests/mockgun/schema_entity.pickle +++ /dev/null @@ -1,1003 +0,0 @@ -(dp0 -S'Playlist' -p1 -(dp2 -S'name' -p3 -(dp4 -S'editable' -p5 -I00 -sS'value' -p6 -S'Playlist' -p7 -sssS'AppWelcomeUserConnection' -p8 -(dp9 -S'name' -p10 -(dp11 -S'editable' -p12 -I00 -sS'value' -p13 -S'App Welcome User Connection' -p14 -sssS'Group' -p15 -(dp16 -S'name' -p17 -(dp18 -S'editable' -p19 -I00 -sS'value' -p20 -S'Group' -p21 -sssS'PhysicalAssetMocapTakeConnection' -p22 -(dp23 -S'name' -p24 -(dp25 -S'editable' -p26 -I00 -sS'value' -p27 -S'Physical Asset Mocap Take Connection' -p28 -sssS'CustomEntity05' -p29 -(dp30 -S'name' -p31 -(dp32 -S'editable' -p33 -I00 -sS'value' -p34 -S'Custom Entity05' -p35 -sssS'Note' -p36 -(dp37 -S'name' -p38 -(dp39 -S'editable' -p40 -I00 -sS'value' -p41 -S'Note' -p42 -sssS'TaskDependency' -p43 -(dp44 -S'name' -p45 -(dp46 -S'editable' -p47 -I00 -sS'value' -p48 -S'Task Dependency' -p49 -sssS'PageHit' -p50 -(dp51 -S'name' -p52 -(dp53 -S'editable' -p54 -I00 -sS'value' -p55 -S'Page Hit' -p56 -sssS'ActionMenuItem' -p57 -(dp58 -S'name' -p59 -(dp60 -S'editable' -p61 -I00 -sS'value' -p62 -S'Action Menu Item' -p63 -sssS'Attachment' -p64 -(dp65 -S'name' -p66 -(dp67 -S'editable' -p68 -I00 -sS'value' -p69 -S'File' -p70 -sssS'AssetMocapTakeConnection' -p71 -(dp72 -S'name' -p73 -(dp74 -S'editable' -p75 -I00 -sS'value' -p76 -S'Asset Mocap Take Connection' -p77 -sssS'Department' -p78 -(dp79 -S'name' -p80 -(dp81 -S'editable' -p82 -I00 -sS'value' -p83 -S'Department' -p84 -sssS'AssetSceneConnection' -p85 -(dp86 -S'name' -p87 -(dp88 -S'editable' -p89 -I00 -sS'value' -p90 -S'Asset Scene Connection' -p91 -sssS'CameraMocapTakeConnection' -p92 -(dp93 -S'name' -p94 -(dp95 -S'editable' -p96 -I00 -sS'value' -p97 -S'Camera Mocap Take Connection' -p98 -sssS'Booking' -p99 -(dp100 -S'name' -p101 -(dp102 -S'editable' -p103 -I00 -sS'value' -p104 -S'Booking' -p105 -sssS'CutVersionConnection' -p106 -(dp107 -S'name' -p108 -(dp109 -S'editable' -p110 -I00 -sS'value' -p111 -S'Cut Version Connection' -p112 -sssS'TimeLog' -p113 -(dp114 -S'name' -p115 -(dp116 -S'editable' -p117 -I00 -sS'value' -p118 -S'Time Log' -p119 -sssS'PlaylistVersionConnection' -p120 -(dp121 -S'name' -p122 -(dp123 -S'editable' -p124 -I00 -sS'value' -p125 -S'Playlist Version Connection' -p126 -sssS'CustomNonProjectEntity02' -p127 -(dp128 -S'name' -p129 -(dp130 -S'editable' -p131 -I00 -sS'value' -p132 -S'Custom Non Project Entity02' -p133 -sssS'AssetElementConnection' -p134 -(dp135 -S'name' -p136 -(dp137 -S'editable' -p138 -I00 -sS'value' -p139 -S'Asset Element Connection' -p140 -sssS'ReleaseTicketConnection' -p141 -(dp142 -S'name' -p143 -(dp144 -S'editable' -p145 -I00 -sS'value' -p146 -S'Release Ticket Connection' -p147 -sssS'RevisionRevisionConnection' -p148 -(dp149 -S'name' -p150 -(dp151 -S'editable' -p152 -I00 -sS'value' -p153 -S'Revision Revision Connection' -p154 -sssS'ProjectUserConnection' -p155 -(dp156 -S'name' -p157 -(dp158 -S'editable' -p159 -I00 -sS'value' -p160 -S'Project User Connection' -p161 -sssS'MocapTakeRangeShotConnection' -p162 -(dp163 -S'name' -p164 -(dp165 -S'editable' -p166 -I00 -sS'value' -p167 -S'Mocap Take Range Shot Connection' -p168 -sssS'PublishedFileDependency' -p169 -(dp170 -S'name' -p171 -(dp172 -S'editable' -p173 -I00 -sS'value' -p174 -S'Published File Dependency' -p175 -sssS'Step' -p176 -(dp177 -S'name' -p178 -(dp179 -S'editable' -p180 -I00 -sS'value' -p181 -S'Step' -p182 -sssS'AssetLibrary' -p183 -(dp184 -S'name' -p185 -(dp186 -S'editable' -p187 -I00 -sS'value' -p188 -S'Asset Library' -p189 -sssS'PerformerMocapTakeConnection' -p190 -(dp191 -S'name' -p192 -(dp193 -S'editable' -p194 -I00 -sS'value' -p195 -S'Performer Mocap Take Connection' -p196 -sssS'Phase' -p197 -(dp198 -S'name' -p199 -(dp200 -S'editable' -p201 -I00 -sS'value' -p202 -S'Phase' -p203 -sssS'PublishedFile' -p204 -(dp205 -S'name' -p206 -(dp207 -S'editable' -p208 -I00 -sS'value' -p209 -S'Published File' -p210 -sssS'ShootDaySceneConnection' -p211 -(dp212 -S'name' -p213 -(dp214 -S'editable' -p215 -I00 -sS'value' -p216 -S'Shoot Day Scene Connection' -p217 -sssS'AssetShotConnection' -p218 -(dp219 -S'name' -p220 -(dp221 -S'editable' -p222 -I00 -sS'value' -p223 -S'Asset Shot Connection' -p224 -sssS'TicketTicketConnection' -p225 -(dp226 -S'name' -p227 -(dp228 -S'editable' -p229 -I00 -sS'value' -p230 -S'Ticket Ticket Connection' -p231 -sssS'AssetBlendshapeConnection' -p232 -(dp233 -S'name' -p234 -(dp235 -S'editable' -p236 -I00 -sS'value' -p237 -S'Asset Blendshape Connection' -p238 -sssS'PageSetting' -p239 -(dp240 -S'name' -p241 -(dp242 -S'editable' -p243 -I00 -sS'value' -p244 -S'Page Setting' -p245 -sssS'Status' -p246 -(dp247 -S'name' -p248 -(dp249 -S'editable' -p250 -I00 -sS'value' -p251 -S'Status' -p252 -sssS'Reply' -p253 -(dp254 -S'name' -p255 -(dp256 -S'editable' -p257 -I00 -sS'value' -p258 -S'Reply' -p259 -sssS'Task' -p260 -(dp261 -S'name' -p262 -(dp263 -S'editable' -p264 -I00 -sS'value' -p265 -S'Task' -p266 -sssS'CustomNonProjectEntity01' -p267 -(dp268 -S'name' -p269 -(dp270 -S'editable' -p271 -I00 -sS'value' -p272 -S'Custom Non Project Entity01' -p273 -sssS'ApiUser' -p274 -(dp275 -S'name' -p276 -(dp277 -S'editable' -p278 -I00 -sS'value' -p279 -S'Script' -p280 -sssS'CustomNonProjectEntity03' -p281 -(dp282 -S'name' -p283 -(dp284 -S'editable' -p285 -I00 -sS'value' -p286 -S'Custom Non Project Entity03' -p287 -sssS'LaunchShotConnection' -p288 -(dp289 -S'name' -p290 -(dp291 -S'editable' -p292 -I00 -sS'value' -p293 -S'Launch Shot Connection' -p294 -sssS'ShotShotConnection' -p295 -(dp296 -S'name' -p297 -(dp298 -S'editable' -p299 -I00 -sS'value' -p300 -S'Shot Shot Connection' -p301 -sssS'PerformerRoutineConnection' -p302 -(dp303 -S'name' -p304 -(dp305 -S'editable' -p306 -I00 -sS'value' -p307 -S'Performer Routine Connection' -p308 -sssS'PublishedFileType' -p309 -(dp310 -S'name' -p311 -(dp312 -S'editable' -p313 -I00 -sS'value' -p314 -S'Published File Type' -p315 -sssS'Element' -p316 -(dp317 -S'name' -p318 -(dp319 -S'editable' -p320 -I00 -sS'value' -p321 -S'Element' -p322 -sssS'TankType' -p323 -(dp324 -S'name' -p325 -(dp326 -S'editable' -p327 -I00 -sS'value' -p328 -S'Tank Type' -p329 -sssS'Icon' -p330 -(dp331 -S'name' -p332 -(dp333 -S'editable' -p334 -I00 -sS'value' -p335 -S'Icon' -p336 -sssS'LocalStorage' -p337 -(dp338 -S'name' -p339 -(dp340 -S'editable' -p341 -I00 -sS'value' -p342 -S'Local Storage' -p343 -sssS'TaskTemplate' -p344 -(dp345 -S'name' -p346 -(dp347 -S'editable' -p348 -I00 -sS'value' -p349 -S'Task Template' -p350 -sssS'RevisionTicketConnection' -p351 -(dp352 -S'name' -p353 -(dp354 -S'editable' -p355 -I00 -sS'value' -p356 -S'Revision Ticket Connection' -p357 -sssS'PerformerShootDayConnection' -p358 -(dp359 -S'name' -p360 -(dp361 -S'editable' -p362 -I00 -sS'value' -p363 -S'Performer Shoot Day Connection' -p364 -sssS'PipelineConfiguration' -p365 -(dp366 -S'name' -p367 -(dp368 -S'editable' -p369 -I00 -sS'value' -p370 -S'Pipeline Configuration' -p371 -sssS'LaunchSceneConnection' -p372 -(dp373 -S'name' -p374 -(dp375 -S'editable' -p376 -I00 -sS'value' -p377 -S'Launch Scene Connection' -p378 -sssS'GroupUserConnection' -p379 -(dp380 -S'name' -p381 -(dp382 -S'editable' -p383 -I00 -sS'value' -p384 -S'Group User Connection' -p385 -sssS'AssetSequenceConnection' -p386 -(dp387 -S'name' -p388 -(dp389 -S'editable' -p390 -I00 -sS'value' -p391 -S'Asset Sequence Connection' -p392 -sssS'Page' -p393 -(dp394 -S'name' -p395 -(dp396 -S'editable' -p397 -I00 -sS'value' -p398 -S'Page' -p399 -sssS'CustomEntity02' -p400 -(dp401 -S'name' -p402 -(dp403 -S'editable' -p404 -I00 -sS'value' -p405 -S'Custom Entity02' -p406 -sssS'CustomEntity03' -p407 -(dp408 -S'name' -p409 -(dp410 -S'editable' -p411 -I00 -sS'value' -p412 -S'Custom Entity03' -p413 -sssS'FilesystemLocation' -p414 -(dp415 -S'name' -p416 -(dp417 -S'editable' -p418 -I00 -sS'value' -p419 -S'Filesystem Location' -p420 -sssS'CustomEntity01' -p421 -(dp422 -S'name' -p423 -(dp424 -S'editable' -p425 -I00 -sS'value' -p426 -S'Disk Location' -p427 -sssS'Shot' -p428 -(dp429 -S'name' -p430 -(dp431 -S'editable' -p432 -I00 -sS'value' -p433 -S'Shot' -p434 -sssS'TankPublishedFile' -p435 -(dp436 -S'name' -p437 -(dp438 -S'editable' -p439 -I00 -sS'value' -p440 -S'Tank Published File' -p441 -sssS'CustomEntity04' -p442 -(dp443 -S'name' -p444 -(dp445 -S'editable' -p446 -I00 -sS'value' -p447 -S'Custom Entity04' -p448 -sssS'Sequence' -p449 -(dp450 -S'name' -p451 -(dp452 -S'editable' -p453 -I00 -sS'value' -p454 -S'Sequence' -p455 -sssS'BannerUserConnection' -p456 -(dp457 -S'name' -p458 -(dp459 -S'editable' -p460 -I00 -sS'value' -p461 -S'Banner User Connection' -p462 -sssS'AssetAssetConnection' -p463 -(dp464 -S'name' -p465 -(dp466 -S'editable' -p467 -I00 -sS'value' -p468 -S'Asset Asset Connection' -p469 -sssS'Scene' -p470 -(dp471 -S'name' -p472 -(dp473 -S'editable' -p474 -I00 -sS'value' -p475 -S'Scene' -p476 -sssS'Project' -p477 -(dp478 -S'name' -p479 -(dp480 -S'editable' -p481 -I00 -sS'value' -p482 -S'Project' -p483 -sssS'Version' -p484 -(dp485 -S'name' -p486 -(dp487 -S'editable' -p488 -I00 -sS'value' -p489 -S'Version' -p490 -sssS'ElementShotConnection' -p491 -(dp492 -S'name' -p493 -(dp494 -S'editable' -p495 -I00 -sS'value' -p496 -S'Element Shot Connection' -p497 -sssS'HumanUser' -p498 -(dp499 -S'name' -p500 -(dp501 -S'editable' -p502 -I00 -sS'value' -p503 -S'Person' -p504 -sssS'PermissionRuleSet' -p505 -(dp506 -S'name' -p507 -(dp508 -S'editable' -p509 -I00 -sS'value' -p510 -S'Permission Rule Set' -p511 -sssS'EventLogEntry' -p512 -(dp513 -S'name' -p514 -(dp515 -S'editable' -p516 -I00 -sS'value' -p517 -S'Event Log Entry' -p518 -sssS'TankDependency' -p519 -(dp520 -S'name' -p521 -(dp522 -S'editable' -p523 -I00 -sS'value' -p524 -S'Tank Dependency' -p525 -sssS'AssetShootDayConnection' -p526 -(dp527 -S'name' -p528 -(dp529 -S'editable' -p530 -I00 -sS'value' -p531 -S'Asset Shoot Day Connection' -p532 -sssS'Asset' -p533 -(dp534 -S'name' -p535 -(dp536 -S'editable' -p537 -I00 -sS'value' -p538 -S'Asset' -p539 -sss. diff --git a/tests/run_appveyor.bat b/tests/run_appveyor.bat deleted file mode 100644 index 8cfb8b06d..000000000 --- a/tests/run_appveyor.bat +++ /dev/null @@ -1,19 +0,0 @@ -:: Copyright (c) 2018 Shotgun Software Inc. -:: -:: CONFIDENTIAL AND PROPRIETARY -:: -:: This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -:: Source Code License included in this distribution package. See LICENSE. -:: By accessing, using, copying or modifying this work you indicate your -:: agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -:: not expressly granted therein are reserved by Shotgun Software Inc. - -:: -:: This file is run by the appveyor builds. -:: - -copy tests\example_config tests\config -%PYTHON%\Scripts\pip install -r tests/ci_requirements.txt -%PYTHON%\Scripts\pip install . -U -cd tests -%PYTHON%\Scripts\nosetests.exe -v --no-path-adjustment diff --git a/tests/sg_logo.jpg b/tests/sg_logo.jpg deleted file mode 100644 index dfc5fc49d..000000000 Binary files a/tests/sg_logo.jpg and /dev/null differ diff --git a/tests/test_api.py b/tests/test_api.py deleted file mode 100644 index 788c9751b..000000000 --- a/tests/test_api.py +++ /dev/null @@ -1,3530 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -"""Test calling the Shotgun API functions. - -Includes short run tests, like simple crud and single finds. See -test_api_long for other tests. -""" - -from __future__ import print_function -import datetime -import sys -import os -from . import mock -from .mock import patch, MagicMock -import ssl -import time -import types -import uuid -import unittest -from shotgun_api3.lib.six.moves import range, urllib -import warnings -import glob - -import shotgun_api3 -from shotgun_api3.lib.httplib2 import Http -from shotgun_api3.lib import six - -# To mock the correct exception when testion on Python 2 and 3, use the -# ShotgunSSLError variable from sgsix that contains the appropriate exception -# class for the current Python version. -from shotgun_api3.lib.sgsix import ShotgunSSLError - -from . import base - - -class TestShotgunApi(base.LiveTestBase): - def setUp(self): - super(TestShotgunApi, self).setUp() - # give note unicode content - self.sg.update("Note", self.note["id"], {"content": "La Pe\xf1a"}) - - def test_info(self): - """Called info""" - # TODO do more to check results - self.sg.info() - - def test_server_dates(self): - """Pass datetimes to the server""" - # TODO check results - t = {"project": self.project, "start_date": datetime.date.today()} - self.sg.create("Task", t, ["content", "sg_status_list"]) - - def test_batch(self): - """Batched create, update, delete""" - - requests = [ - { - "request_type": "create", - "entity_type": "Shot", - "data": {"code": "New Shot 5", "project": self.project}, - }, - { - "request_type": "update", - "entity_type": "Shot", - "entity_id": self.shot["id"], - "data": {"code": "Changed 1"}, - }, - ] - - new_shot, updated_shot = self.sg.batch(requests) - - self.assertEqual(self.shot["id"], updated_shot["id"]) - self.assertTrue(new_shot.get("id")) - - new_shot_id = new_shot["id"] - requests = [ - {"request_type": "delete", "entity_type": "Shot", "entity_id": new_shot_id}, - { - "request_type": "update", - "entity_type": "Shot", - "entity_id": self.shot["id"], - "data": {"code": self.shot["code"]}, - }, - ] - - result = self.sg.batch(requests)[0] - self.assertEqual(True, result) - - def test_empty_batch(self): - """Empty list sent to .batch()""" - result = self.sg.batch([]) - self.assertEqual([], result) - - def test_create_update_delete(self): - """Called create, update, delete, revive""" - data = { - "project": self.project, - "code": "JohnnyApple_Design01_FaceFinal", - "description": "fixed rig per director final notes", - "sg_status_list": "rev", - "entity": self.asset, - "user": self.human_user, - } - - version = self.sg.create("Version", data, return_fields=["id"]) - self.assertTrue(isinstance(version, dict)) - self.assertTrue("id" in version) - # TODO check results more thoroughly - # TODO: test returned fields are requested fields - - data = data = {"description": "updated test"} - version = self.sg.update("Version", version["id"], data) - self.assertTrue(isinstance(version, dict)) - self.assertTrue("id" in version) - - rv = self.sg.delete("Version", version["id"]) - self.assertEqual(True, rv) - rv = self.sg.delete("Version", version["id"]) - self.assertEqual(False, rv) - - rv = self.sg.revive("Version", version["id"]) - self.assertEqual(True, rv) - rv = self.sg.revive("Version", version["id"]) - self.assertEqual(False, rv) - - def test_last_accessed(self): - page = self.sg.find("Page", [], fields=["last_accessed"], limit=1) - self.assertEqual("Page", page[0]["type"]) - self.assertEqual(datetime.datetime, type(page[0]["last_accessed"])) - - def test_get_session_token(self): - """Got session UUID""" - # TODO test results - rv = self.sg.get_session_token() - self.assertTrue(rv) - - def test_upload_download(self): - """Upload and download an attachment tests""" - # upload / download only works against a live server because it does - # not use the standard http interface - if "localhost" in self.server_url: - print("upload / down tests skipped for localhost") - return - - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - size = os.stat(path).st_size - - attach_id = self.sg.upload( - "Version", - self.version["id"], - path, - "sg_uploaded_movie", - tag_list="monkeys, everywhere, send, help", - ) - - # test download with attachment_id - attach_file = self.sg.download_attachment(attach_id) - self.assertTrue(attach_file is not None) - self.assertEqual(size, len(attach_file)) - orig_file = open(path, "rb").read() - self.assertEqual(orig_file, attach_file) - - # test download with attachment_id as keyword - attach_file = self.sg.download_attachment(attachment_id=attach_id) - self.assertTrue(attach_file is not None) - self.assertEqual(size, len(attach_file)) - orig_file = open(path, "rb").read() - self.assertEqual(orig_file, attach_file) - - # test download with attachment_id (write to disk) - file_path = os.path.join( - os.path.dirname(os.path.realpath(__file__)), "sg_logo_download.jpg" - ) - result = self.sg.download_attachment(attach_id, file_path=file_path) - self.assertEqual(result, file_path) - # On windows read may not read to end of file unless opened 'rb' - fp = open(file_path, "rb") - attach_file = fp.read() - fp.close() - self.assertEqual(size, len(attach_file)) - self.assertEqual(orig_file, attach_file) - - # test download with attachment hash - version = self.sg.find_one( - "Version", [["id", "is", self.version["id"]]], ["sg_uploaded_movie"] - ) - - # Look for the attachment we just uploaded, the attachments are not returned from latest - # to earliest. - attachment = [ - v - for k, v in version["sg_uploaded_movie"].items() - if (k, v) == ("id", attach_id) - ] - self.assertEqual(len(attachment), 1) - - attachment = attachment[0] - attach_file = self.sg.download_attachment(attachment) - - self.assertTrue(attach_file is not None) - self.assertEqual(size, len(attach_file)) - self.assertEqual(orig_file, attach_file) - - # test download with attachment hash (write to disk) - result = self.sg.download_attachment(attachment, file_path=file_path) - self.assertEqual(result, file_path) - fp = open(file_path, "rb") - attach_file = fp.read() - fp.close() - self.assertTrue(attach_file is not None) - self.assertEqual(size, len(attach_file)) - self.assertEqual(orig_file, attach_file) - - # test invalid requests - INVALID_S3_URL = "https://sg-media-usor-01.s3.amazonaws.com/ada3de3ee3873875e1dd44f2eb0882c75ae36a4a/cd31346421dbeef781e0e480f259a3d36652d7f2/IMG_0465.MOV?AWSAccessKeyId=AKIAIQGOBSVN3FSQ5QFA&Expires=1371789959&Signature=SLbzv7DuVlZ8XAoOSQQAiGpF3u8%3D" # noqa - self.assertRaises( - shotgun_api3.ShotgunFileDownloadError, - self.sg.download_attachment, - {"url": INVALID_S3_URL}, - ) - INVALID_ATTACHMENT_ID = 99999999 - self.assertRaises( - shotgun_api3.ShotgunFileDownloadError, - self.sg.download_attachment, - INVALID_ATTACHMENT_ID, - ) - self.assertRaises( - TypeError, self.sg.download_attachment, "/path/to/some/file.jpg" - ) - self.assertRaises( - ValueError, self.sg.download_attachment, {"id": 123, "type": "Shot"} - ) - self.assertRaises(TypeError, self.sg.download_attachment) - - # test upload of non-ascii, unicode path - u_path = os.path.abspath( - os.path.expanduser( - glob.glob(os.path.join(six.text_type(this_dir), "Noëlご.jpg"))[0] - ) - ) - - # If this is a problem, it'll raise with a UnicodeEncodeError. We - # don't need to check the results of the upload itself -- we're - # only checking that the non-ascii string encoding doesn't trip - # us up the way it used to. - self.sg.upload( - "Version", - self.version["id"], - u_path, - "sg_uploaded_movie", - tag_list="monkeys, everywhere, send, help", - ) - - # Also make sure that we can pass in a utf-8 encoded string path - # with non-ascii characters and have it work properly. This is - # primarily a concern on Windows, as it doesn't handle that - # situation as well as OS X and Linux. - self.sg.upload( - "Version", - self.version["id"], - u_path.encode("utf-8"), - "sg_uploaded_movie", - tag_list="monkeys, everywhere, send, help", - ) - if six.PY2: - # In Python2, make sure that non-utf-8 encoded paths raise when they - # can't be converted to utf-8. For Python3, we'll skip these tests - # since string encoding is handled differently. - - # We need to touch the file we're going to test with first. We can't - # bundle a file with this filename in the repo due to some pip install - # problems on Windows. Note that the path below is utf-8 encoding of - # what we'll eventually encode as shift-jis. - file_path_s = os.path.join(this_dir, "./\xe3\x81\x94.shift-jis") - file_path_u = file_path_s.decode("utf-8") - - with open( - file_path_u if sys.platform.startswith("win") else file_path_s, "w" - ) as fh: - fh.write("This is just a test file with some random data in it.") - - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.upload, - "Version", - self.version["id"], - file_path_u.encode("shift-jis"), - "sg_uploaded_movie", - tag_list="monkeys, everywhere, send, help", - ) - - # But it should work in all cases if a unicode string is used. - self.sg.upload( - "Version", - self.version["id"], - file_path_u, - "sg_uploaded_movie", - tag_list="monkeys, everywhere, send, help", - ) - - # cleanup - os.remove(file_path_u) - - # cleanup - os.remove(file_path) - - @patch("shotgun_api3.Shotgun._send_form") - def test_upload_to_sg(self, mock_send_form): - """ - Upload an attachment tests for _upload_to_sg() - """ - self.sg.server_info["s3_direct_uploads_enabled"] = False - mock_send_form.method.assert_called_once() - mock_send_form.return_value = "1\n:123\nasd" - this_dir, _ = os.path.split(__file__) - u_path = os.path.abspath( - os.path.expanduser( - glob.glob(os.path.join(six.text_type(this_dir), "Noëlご.jpg"))[0] - ) - ) - upload_id = self.sg.upload( - "Version", - self.version["id"], - u_path, - "attachments", - tag_list="monkeys, everywhere, send, help", - ) - mock_send_form_args, _ = mock_send_form.call_args - display_name_to_send = mock_send_form_args[1].get("display_name", "") - self.assertTrue(isinstance(upload_id, int)) - self.assertFalse( - display_name_to_send.startswith("b'") and display_name_to_send.endswith("'") - ) - - upload_id = self.sg.upload( - "Version", - self.version["id"], - u_path, - "filmstrip_image", - tag_list="monkeys, everywhere, send, help", - ) - self.assertTrue(isinstance(upload_id, int)) - mock_send_form_args, _ = mock_send_form.call_args - display_name_to_send = mock_send_form_args[1].get("display_name", "") - self.assertTrue(isinstance(upload_id, int)) - self.assertFalse( - display_name_to_send.startswith("b'") and display_name_to_send.endswith("'") - ) - - mock_send_form.method.assert_called_once() - mock_send_form.return_value = "2\nIt can't be upload" - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.upload, - "Version", - self.version["id"], - u_path, - "attachments", - tag_list="monkeys, everywhere, send, help", - ) - self.sg.server_info["s3_direct_uploads_enabled"] = True - - def test_upload_thumbnail_in_create(self): - """Upload a thumbnail via the create method""" - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - # test thumbnail upload - data = {"image": path, "code": "Test Version", "project": self.project} - new_version = self.sg.create("Version", data, return_fields=["image"]) - new_version = self.find_one_await_thumbnail( - "Version", - [["id", "is", new_version["id"]]], - fields=["image", "project", "type", "id"], - ) - - self.assertTrue(new_version is not None) - self.assertTrue(isinstance(new_version, dict)) - self.assertTrue(isinstance(new_version.get("id"), int)) - self.assertEqual(new_version.get("type"), "Version") - self.assertEqual(new_version.get("project"), self.project) - self.assertTrue(new_version.get("image") is not None) - - h = Http(".cache") - thumb_resp, content = h.request(new_version.get("image"), "GET") - self.assertIn(thumb_resp["status"], ["200", "304"]) - self.assertIn(thumb_resp["content-type"], ["image/jpeg", "image/png"]) - - self.sg.delete("Version", new_version["id"]) - - # test filmstrip image upload - data = { - "filmstrip_image": path, - "code": "Test Version", - "project": self.project, - } - new_version = self.sg.create("Version", data, return_fields=["filmstrip_image"]) - self.assertTrue(new_version is not None) - self.assertTrue(isinstance(new_version, dict)) - self.assertTrue(isinstance(new_version.get("id"), int)) - self.assertEqual(new_version.get("type"), "Version") - self.assertEqual(new_version.get("project"), self.project) - self.assertTrue(new_version.get("filmstrip_image") is not None) - - url = new_version.get("filmstrip_image") - data = self.sg.download_attachment({"url": url}) - self.assertTrue(isinstance(data, six.binary_type)) - - self.sg.delete("Version", new_version["id"]) - - # end test_upload_thumbnail_in_create - - def test_upload_thumbnail_for_version(self): - """simple upload thumbnail for version test.""" - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - # upload thumbnail - thumb_id = self.sg.upload_thumbnail("Version", self.version["id"], path) - self.assertTrue(isinstance(thumb_id, int)) - - # check result on version - version_with_thumbnail = self.sg.find_one( - "Version", [["id", "is", self.version["id"]]] - ) - version_with_thumbnail = self.find_one_await_thumbnail( - "Version", [["id", "is", self.version["id"]]] - ) - - self.assertEqual(version_with_thumbnail.get("type"), "Version") - self.assertEqual(version_with_thumbnail.get("id"), self.version["id"]) - - h = Http(".cache") - thumb_resp, content = h.request(version_with_thumbnail.get("image"), "GET") - self.assertIn(thumb_resp["status"], ["200", "304"]) - self.assertIn(thumb_resp["content-type"], ["image/jpeg", "image/png"]) - - # clear thumbnail - response_clear_thumbnail = self.sg.update( - "Version", self.version["id"], {"image": None} - ) - expected_clear_thumbnail = { - "id": self.version["id"], - "image": None, - "type": "Version", - } - self.assertEqual(expected_clear_thumbnail, response_clear_thumbnail) - - def test_upload_thumbnail_for_task(self): - """simple upload thumbnail for task test.""" - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - # upload thumbnail - thumb_id = self.sg.upload_thumbnail("Task", self.task["id"], path) - self.assertTrue(isinstance(thumb_id, int)) - - # check result on version - task_with_thumbnail = self.sg.find_one("Task", [["id", "is", self.task["id"]]]) - task_with_thumbnail = self.find_one_await_thumbnail( - "Task", [["id", "is", self.task["id"]]] - ) - - self.assertEqual(task_with_thumbnail.get("type"), "Task") - self.assertEqual(task_with_thumbnail.get("id"), self.task["id"]) - - h = Http(".cache") - thumb_resp, content = h.request(task_with_thumbnail.get("image"), "GET") - self.assertIn(thumb_resp["status"], ["200", "304"]) - self.assertIn(thumb_resp["content-type"], ["image/jpeg", "image/png"]) - - # clear thumbnail - response_clear_thumbnail = self.sg.update( - "Version", self.version["id"], {"image": None} - ) - expected_clear_thumbnail = { - "id": self.version["id"], - "image": None, - "type": "Version", - } - self.assertEqual(expected_clear_thumbnail, response_clear_thumbnail) - - def test_upload_thumbnail_with_upload_function(self): - """Upload thumbnail via upload function test""" - path = os.path.abspath( - os.path.expanduser(os.path.join(os.path.dirname(__file__), "sg_logo.jpg")) - ) - - # upload thumbnail - thumb_id = self.sg.upload("Task", self.task["id"], path, "image") - self.assertTrue(isinstance(thumb_id, int)) - - # upload filmstrip thumbnail - f_thumb_id = self.sg.upload("Task", self.task["id"], path, "filmstrip_image") - self.assertTrue(isinstance(f_thumb_id, int)) - - def test_requires_direct_s3_upload(self): - """Test _requires_direct_s3_upload""" - - upload_types = self.sg.server_info.get("s3_enabled_upload_types") - direct_uploads_enabled = self.sg.server_info.get("s3_direct_uploads_enabled") - - self.sg.server_info["s3_enabled_upload_types"] = None - self.sg.server_info["s3_direct_uploads_enabled"] = None - - # Test s3_enabled_upload_types and s3_direct_uploads_enabled not set - self.assertFalse( - self.sg._requires_direct_s3_upload("Version", "sg_uploaded_movie") - ) - - self.sg.server_info["s3_enabled_upload_types"] = { - "Version": ["sg_uploaded_movie"] - } - - # Test direct_uploads_enabled not set - self.assertFalse( - self.sg._requires_direct_s3_upload("Version", "sg_uploaded_movie") - ) - - self.sg.server_info["s3_direct_uploads_enabled"] = True - - # Test regular path - self.assertTrue( - self.sg._requires_direct_s3_upload("Version", "sg_uploaded_movie") - ) - self.assertFalse(self.sg._requires_direct_s3_upload("Version", "abc")) - self.assertFalse(self.sg._requires_direct_s3_upload("Abc", "abc")) - - # Test star field wildcard and arrays of fields - self.sg.server_info["s3_enabled_upload_types"] = { - "Version": ["sg_uploaded_movie", "test", "other"], - "Test": ["*"], - "Asset": "*", - } - - self.assertTrue( - self.sg._requires_direct_s3_upload("Version", "sg_uploaded_movie") - ) - self.assertTrue(self.sg._requires_direct_s3_upload("Version", "test")) - self.assertTrue(self.sg._requires_direct_s3_upload("Version", "other")) - self.assertTrue(self.sg._requires_direct_s3_upload("Test", "abc")) - self.assertTrue(self.sg._requires_direct_s3_upload("Asset", "test")) - - # Test default allowed upload type - self.sg.server_info["s3_enabled_upload_types"] = None - self.assertTrue( - self.sg._requires_direct_s3_upload("Version", "sg_uploaded_movie") - ) - self.assertFalse(self.sg._requires_direct_s3_upload("Version", "test")) - - # Test star entity_type - self.sg.server_info["s3_enabled_upload_types"] = { - "*": ["sg_uploaded_movie", "test"] - } - self.assertTrue( - self.sg._requires_direct_s3_upload("Something", "sg_uploaded_movie") - ) - self.assertTrue(self.sg._requires_direct_s3_upload("Version", "test")) - self.assertFalse(self.sg._requires_direct_s3_upload("Version", "other")) - - # Test entity_type and field_name wildcard - self.sg.server_info["s3_enabled_upload_types"] = {"*": "*"} - self.assertTrue( - self.sg._requires_direct_s3_upload("Something", "sg_uploaded_movie") - ) - self.assertTrue(self.sg._requires_direct_s3_upload("Version", "abc")) - - self.sg.server_info["s3_enabled_upload_types"] = upload_types - self.sg.server_info["s3_direct_uploads_enabled"] = direct_uploads_enabled - - def test_linked_thumbnail_url(self): - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - thumb_id = self.sg.upload_thumbnail( - "Project", self.version["project"]["id"], path - ) - - response_version_with_project = self.find_one_await_thumbnail( - "Version", - [["id", "is", self.version["id"]]], - fields=["id", "code", "project.Project.image"], - thumbnail_field_name="project.Project.image", - ) - - if self.sg.server_caps.version and self.sg.server_caps.version >= (3, 3, 0): - - self.assertEqual(response_version_with_project.get("type"), "Version") - self.assertEqual( - response_version_with_project.get("id"), self.version["id"] - ) - self.assertEqual( - response_version_with_project.get("code"), self.config.version_code - ) - - h = Http(".cache") - thumb_resp, content = h.request( - response_version_with_project.get("project.Project.image"), "GET" - ) - self.assertIn(thumb_resp["status"], ["200", "304"]) - self.assertIn(thumb_resp["content-type"], ["image/jpeg", "image/png"]) - - else: - expected_version_with_project = { - "code": self.config.version_code, - "type": "Version", - "id": self.version["id"], - "project.Project.image": thumb_id, - } - self.assertEqual( - expected_version_with_project, response_version_with_project - ) - - # For now skip tests that are erroneously failling on some sites to - # allow CI to pass until the known issue causing this is resolved. - @base.skip("Skipping test that erroneously fails on some sites.") - def test_share_thumbnail(self): - """share thumbnail between two entities""" - - def share_thumbnail_retry(*args, **kwargs): - # Since share_thumbnail raises a ShotgunError if the thumbnail is still - # pending, sleep and retry if this exception is raised, to allow time for - # the thumbnail to finish processing. - thumbnail_id = None - attempts = 0 - while attempts < base.THUMBNAIL_MAX_ATTEMPTS and thumbnail_id is None: - try: - thumbnail_id = self.sg.share_thumbnail(*args, **kwargs) - attempts += 1 - except shotgun_api3.ShotgunError: - time.sleep(base.THUMBNAIL_RETRY_INTERVAL) - return thumbnail_id - - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - # upload thumbnail to first entity and share it with the rest - share_thumbnail_retry([self.version, self.shot], thumbnail_path=path) - response_version_thumbnail = self.find_one_await_thumbnail( - "Version", - [["id", "is", self.version["id"]]], - fields=["id", "code", "image"], - ) - response_shot_thumbnail = self.find_one_await_thumbnail( - "Shot", - [["id", "is", self.shot["id"]]], - fields=["id", "code", "image"], - ) - - shot_url = urllib.parse.urlparse(response_shot_thumbnail.get("image")) - version_url = urllib.parse.urlparse(response_version_thumbnail.get("image")) - shot_path = _get_path(shot_url) - version_path = _get_path(version_url) - self.assertEqual(shot_path, version_path) - - # share thumbnail from source entity with entities - self.sg.upload_thumbnail("Version", self.version["id"], path) - share_thumbnail_retry([self.asset, self.shot], source_entity=self.version) - response_version_thumbnail = self.find_one_await_thumbnail( - "Version", - [["id", "is", self.version["id"]]], - fields=["id", "code", "image"], - ) - response_shot_thumbnail = self.find_one_await_thumbnail( - "Shot", - [["id", "is", self.shot["id"]]], - fields=["id", "code", "image"], - ) - response_asset_thumbnail = self.find_one_await_thumbnail( - "Asset", - [["id", "is", self.asset["id"]]], - fields=["id", "code", "image"], - ) - - shot_url = urllib.parse.urlparse(response_shot_thumbnail.get("image")) - version_url = urllib.parse.urlparse(response_version_thumbnail.get("image")) - asset_url = urllib.parse.urlparse(response_asset_thumbnail.get("image")) - - shot_path = _get_path(shot_url) - version_path = _get_path(version_url) - asset_path = _get_path(asset_url) - - self.assertEqual(version_path, shot_path) - self.assertEqual(version_path, asset_path) - - # raise errors when missing required params or providing conflicting ones - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.share_thumbnail, - [self.shot, self.asset], - path, - self.version, - ) - self.assertRaises( - shotgun_api3.ShotgunError, self.sg.share_thumbnail, [self.shot, self.asset] - ) - - @patch("shotgun_api3.Shotgun._send_form") - def test_share_thumbnail_not_ready(self, mock_send_form): - """throw an exception if trying to share a transient thumbnail""" - - mock_send_form.method.assert_called_once() - mock_send_form.return_value = ( - "2" - "\nsource_entity image is a transient thumbnail that cannot be shared. " - "Try again later, when the final thumbnail is available\n" - ) - - self.assertRaises( - shotgun_api3.ShotgunThumbnailNotReady, - self.sg.share_thumbnail, - [self.version, self.shot], - source_entity=self.asset, - ) - - @patch("shotgun_api3.Shotgun._send_form") - def test_share_thumbnail_returns_error(self, mock_send_form): - """throw an exception if server returns an error code""" - - mock_send_form.method.assert_called_once() - mock_send_form.return_value = "1\nerror message.\n" - - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.share_thumbnail, - [self.version, self.shot], - source_entity=self.asset, - ) - - def test_deprecated_functions(self): - """Deprecated functions raise errors""" - self.assertRaises(shotgun_api3.ShotgunError, self.sg.schema, "foo") - self.assertRaises(shotgun_api3.ShotgunError, self.sg.entity_types) - - def test_simple_summary(self): - """Test simple call to summarize""" - summaries = [{"field": "id", "type": "count"}] - grouping = [{"direction": "asc", "field": "id", "type": "exact"}] - filters = [["project", "is", self.project]] - result = self.sg.summarize( - "Shot", filters=filters, summary_fields=summaries, grouping=grouping - ) - assert result["groups"] - assert result["groups"][0]["group_name"] - assert result["groups"][0]["group_value"] - assert result["groups"][0]["summaries"] - assert result["summaries"] - - def test_summary_include_archived_projects(self): - """Test summarize with archived project""" - if self.sg.server_caps.version > (5, 3, 13): - # archive project - self.sg.update("Project", self.project["id"], {"archived": True}) - # Ticket #25082 ability to hide archived projects in summary - summaries = [{"field": "id", "type": "count"}] - grouping = [{"direction": "asc", "field": "id", "type": "exact"}] - filters = [["project", "is", self.project]] - result = self.sg.summarize( - "Shot", - filters=filters, - summary_fields=summaries, - grouping=grouping, - include_archived_projects=False, - ) - self.assertEqual(result["summaries"]["id"], 0) - self.sg.update("Project", self.project["id"], {"archived": False}) - - def test_summary_values(self): - """Test summarize return data""" - - # create three unique shots - shot_prefix = uuid.uuid4().hex - - shots = [] - - shot_data_1 = { - "code": "%s Shot 1" % shot_prefix, - "sg_status_list": "ip", - "sg_cut_duration": 100, - "project": self.project, - } - - shot_data_2 = { - "code": "%s Shot 2" % shot_prefix, - "sg_status_list": "ip", - "sg_cut_duration": 100, - "project": self.project, - } - - shot_data_3 = { - "code": "%s Shot 3" % shot_prefix, - "sg_status_list": "fin", - "sg_cut_duration": 100, - "project": self.project, - } - - shot_data_4 = { - "code": "%s Shot 4" % shot_prefix, - "sg_status_list": "wtg", - "sg_cut_duration": 0, - "project": self.project, - } - - shots.append(self.sg.create("Shot", shot_data_1)) - shots.append(self.sg.create("Shot", shot_data_2)) - shots.append(self.sg.create("Shot", shot_data_3)) - shots.append(self.sg.create("Shot", shot_data_4)) - - summaries = [ - {"field": "id", "type": "count"}, - {"field": "sg_cut_duration", "type": "sum"}, - ] - grouping = [{"direction": "asc", "field": "sg_status_list", "type": "exact"}] - filters = [ - ["project", "is", self.project], - ["code", "starts_with", shot_prefix], - ] - result = self.sg.summarize( - "Shot", filters=filters, summary_fields=summaries, grouping=grouping - ) - count = {"id": 4, "sg_cut_duration": 300} - groups = [ - { - "group_name": "fin", - "group_value": "fin", - "summaries": {"id": 1, "sg_cut_duration": 100}, - }, - { - "group_name": "ip", - "group_value": "ip", - "summaries": {"id": 2, "sg_cut_duration": 200}, - }, - { - "group_name": "wtg", - "group_value": "wtg", - "summaries": {"id": 1, "sg_cut_duration": 0}, - }, - ] - # clean up - batch_data = [] - for s in shots: - batch_data.append( - {"request_type": "delete", "entity_type": "Shot", "entity_id": s["id"]} - ) - self.sg.batch(batch_data) - - self.assertEqual(result["summaries"], count) - # Do not assume the order of the summarized results. - self.assertEqual( - sorted(result["groups"], key=lambda x: x["group_name"]), groups - ) - - def test_ensure_ascii(self): - """test_ensure_ascii tests ensure_unicode flag.""" - sg_ascii = shotgun_api3.Shotgun( - self.config.server_url, ensure_ascii=True, **self.auth_args - ) - - result = sg_ascii.find_one( - "Note", [["id", "is", self.note["id"]]], fields=["content"] - ) - if six.PY2: - # In Python3 there isn't a separate unicode type. - self.assertFalse(_has_unicode(result)) - - def test_ensure_unicode(self): - """test_ensure_unicode tests ensure_unicode flag.""" - sg_unicode = shotgun_api3.Shotgun( - self.config.server_url, ensure_ascii=False, **self.auth_args - ) - result = sg_unicode.find_one( - "Note", [["id", "is", self.note["id"]]], fields=["content"] - ) - self.assertTrue(_has_unicode(result)) - - def test_work_schedule(self): - """test_work_schedule tests WorkDayRules api""" - self.maxDiff = None - - start_date = "2012-01-01" - start_date_obj = datetime.datetime(2012, 1, 1) - end_date = "2012-01-07" - end_date_obj = datetime.datetime(2012, 1, 7) - - project = self.project - # We're going to be comparing this value with the value returned from the server, so extract only the type, id - # and name - user = { - "type": self.human_user["type"], - "id": self.human_user["id"], - "name": self.human_user["name"], - } - - work_schedule = self.sg.work_schedule_read(start_date, end_date, project, user) - # Test that the work_schedule_read api method is called with the 'start_date' and 'end_date' arguments - # in the 'YYYY-MM-DD' string format. - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.work_schedule_read, - start_date_obj, - end_date_obj, - project, - user, - ) - - resp = self.sg.work_schedule_update("2012-01-02", False, "Studio Holiday") - expected = { - "date": "2012-01-02", - "description": "Studio Holiday", - "project": None, - "user": None, - "working": False, - } - self.assertEqual(expected, resp) - resp = self.sg.work_schedule_read(start_date, end_date, project, user) - work_schedule["2012-01-02"] = { - "reason": "STUDIO_EXCEPTION", - "working": False, - "description": "Studio Holiday", - } - self.assertEqual(work_schedule, resp) - - resp = self.sg.work_schedule_update( - "2012-01-03", False, "Project Holiday", project - ) - expected = { - "date": "2012-01-03", - "description": "Project Holiday", - "project": project, - "user": None, - "working": False, - } - self.assertEqual(expected, resp) - resp = self.sg.work_schedule_read(start_date, end_date, project, user) - work_schedule["2012-01-03"] = { - "reason": "PROJECT_EXCEPTION", - "working": False, - "description": "Project Holiday", - } - self.assertEqual(work_schedule, resp) - - jan4 = datetime.datetime(2012, 1, 4) - - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.work_schedule_update, - jan4, - False, - "Artist Holiday", - user=user, - ) - - resp = self.sg.work_schedule_update( - "2012-01-04", False, "Artist Holiday", user=user - ) - expected = { - "date": "2012-01-04", - "description": "Artist Holiday", - "project": None, - "user": user, - "working": False, - } - self.assertEqual(expected, resp) - resp = self.sg.work_schedule_read(start_date, end_date, project, user) - work_schedule["2012-01-04"] = { - "reason": "USER_EXCEPTION", - "working": False, - "description": "Artist Holiday", - } - self.assertEqual(work_schedule, resp) - - # test_preferences_read fails when preferences don't match the expected - # preferences. - def test_preferences_read(self): - # Only run the tests on a server with the feature. - if not self.sg.server_caps.version or self.sg.server_caps.version < (7, 10, 0): - return - - # This is a big diff if it fails, so show everything. - self.maxDiff = None - - # all prefs - resp = self.sg.preferences_read() - - expected = { - "date_component_order": "month_day", - "duration_units": "days", - "format_currency_fields_decimal_options": "$1,000.99", - "format_currency_fields_display_dollar_sign": False, - "format_currency_fields_negative_options": "- $1,000", - "format_date_fields": "08/04/22 OR 04/08/22 (depending on the Month order preference)", - "format_float_fields": "9,999.99", - "format_float_fields_rounding": "9.999999", - "format_footage_fields": "10-05", - "format_number_fields": "1,000", - "format_time_hour_fields": "12 hour", - "hours_per_day": 8.0, - "support_local_storage": True, - "enable_rv_integration": True, - "enable_shotgun_review_for_rv": False, - } - # Simply make sure viewmaster settings are there. These change frequently and we - # don't want to have the test break because Viewmaster changed or because we didn't - # update the test. - self.assertIn("view_master_settings", resp) - resp.pop("view_master_settings") - - # Simply make sure creative review settings are there. These change frequently and we - # don't want to have the test break because Creative Review changed or because we didn't - # update the test. - self.assertIn("creative_review_settings", resp) - resp.pop("creative_review_settings") - - self.assertEqual(expected, resp) - - # all filtered - resp = self.sg.preferences_read( - ["date_component_order", "support_local_storage"] - ) - - expected = {"date_component_order": "month_day", "support_local_storage": True} - self.assertEqual(expected, resp) - - # all filtered with invalid pref - resp = self.sg.preferences_read( - ["date_component_order", "support_local_storage", "email_notifications"] - ) - - expected = {"date_component_order": "month_day", "support_local_storage": True} - self.assertEqual(expected, resp) - - -class TestDataTypes(base.LiveTestBase): - """Test fields representing the different data types mapped on the server side. - - Untested data types: password, percent, pivot_column, serializable, image, currency - system_task_type, timecode, url, uuid, url_template - """ - - def setUp(self): - super(TestDataTypes, self).setUp() - - def test_set_checkbox(self): - entity = "HumanUser" - entity_id = self.human_user["id"] - field_name = "email_notes" - pos_values = [False, True] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_color(self): - entity = "Task" - entity_id = self.task["id"] - field_name = "color" - pos_values = ["pipeline_step", "222,0,0"] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_date(self): - entity = "Task" - entity_id = self.task["id"] - field_name = "due_date" - pos_values = ["2008-05-08", "2011-05-05"] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_date_time(self): - if self.config.jenkins: - self.skipTest("Jenkins. locked_until not updating.") - entity = "HumanUser" - entity_id = self.human_user["id"] - field_name = "locked_until" - local = shotgun_api3.shotgun.SG_TIMEZONE.local - dt_1 = datetime.datetime(2008, 10, 13, 23, 10, tzinfo=local) - dt_2 = datetime.datetime(2009, 10, 13, 23, 10, tzinfo=local) - pos_values = [dt_1, dt_2] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_duration(self): - entity = "Task" - entity_id = self.task["id"] - field_name = "duration" - pos_values = [2100, 1300] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_entity(self): - entity = "Task" - entity_id = self.task["id"] - field_name = "entity" - pos_values = [self.asset, self.shot] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected["id"], actual["id"]) - - def test_set_float(self): - entity = "Version" - entity_id = self.version["id"] - field_name = "sg_movie_aspect_ratio" - pos_values = [2.0, 3.0] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_list(self): - entity = "Note" - entity_id = self.note["id"] - field_name = "sg_note_type" - pos_values = ["Internal", "Client"] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_multi_entity(self): - sg = shotgun_api3.Shotgun(self.config.server_url, **self.auth_args) - keys = ["project", "user", "code"] - data = {"project": self.project, "user": self.human_user, "code": "Alpha"} - version_1 = base._find_or_create_entity(sg, "Version", data, keys) - data = {"project": self.project, "user": self.human_user, "code": "Beta"} - version_2 = base._find_or_create_entity(sg, "Version", data, keys) - - entity = "Playlist" - entity_id = self.playlist["id"] - field_name = "versions" - - # Default set behaviour - pos_values = [[version_1, version_2]] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(len(expected), len(actual)) - self.assertEqual( - sorted([x["id"] for x in expected]), sorted([x["id"] for x in actual]) - ) - - # Multi-entity remove mode - pos_values = [[version_1]] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values, multi_entity_update_mode="remove" - ) - self.assertEqual(1, len(actual)) - self.assertEqual(len(expected), len(actual)) - self.assertNotEqual(expected[0]["id"], actual[0]["id"]) - self.assertEqual(version_2["id"], actual[0]["id"]) - - # Multi-entity add mode - pos_values = [[version_1]] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values, multi_entity_update_mode="add" - ) - self.assertEqual(2, len(actual)) - self.assertTrue(version_1["id"] in [x["id"] for x in actual]) - - # Multi-entity set mode - pos_values = [[version_1, version_2]] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values, multi_entity_update_mode="set" - ) - self.assertEqual(len(expected), len(actual)) - self.assertEqual( - sorted([x["id"] for x in expected]), sorted([x["id"] for x in actual]) - ) - - def test_set_number(self): - entity = "Shot" - entity_id = self.shot["id"] - field_name = "head_in" - pos_values = [2300, 1300] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_status_list(self): - entity = "Task" - entity_id = self.task["id"] - field_name = "sg_status_list" - pos_values = ["wtg", "fin"] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_tag_list(self): - entity = "Task" - entity_id = self.task["id"] - field_name = "tag_list" - pos_values = [["a", "b"], ["c"]] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_text(self): - entity = "Note" - entity_id = self.note["id"] - field_name = "content" - pos_values = ["this content", "that content"] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def test_set_text_html_entity(self): - entity = "Note" - entity_id = self.note["id"] - field_name = "content" - pos_values = ["<", "<"] - expected, actual = self.assert_set_field( - entity, entity_id, field_name, pos_values - ) - self.assertEqual(expected, actual) - - def assert_set_field( - self, entity, entity_id, field_name, pos_values, multi_entity_update_mode=None - ): - query_result = self.sg.find_one(entity, [["id", "is", entity_id]], [field_name]) - initial_value = query_result[field_name] - new_value = (initial_value == pos_values[0] and pos_values[1]) or pos_values[0] - if multi_entity_update_mode: - self.sg.update( - entity, - entity_id, - {field_name: new_value}, - multi_entity_update_modes={field_name: multi_entity_update_mode}, - ) - else: - self.sg.update(entity, entity_id, {field_name: new_value}) - new_values = self.sg.find_one(entity, [["id", "is", entity_id]], [field_name]) - return new_value, new_values[field_name] - - -class TestUtc(base.LiveTestBase): - """Test utc options""" - - def setUp(self): - super(TestUtc, self).setUp() - utc = shotgun_api3.shotgun.SG_TIMEZONE.utc - self.datetime_utc = datetime.datetime(2008, 10, 13, 23, 10, tzinfo=utc) - local = shotgun_api3.shotgun.SG_TIMEZONE.local - self.datetime_local = datetime.datetime(2008, 10, 13, 23, 10, tzinfo=local) - self.datetime_none = datetime.datetime(2008, 10, 13, 23, 10) - - def test_convert_to_utc(self): - if self.config.jenkins: - self.skipTest("Jenkins. locked_until not updating.") - sg_utc = shotgun_api3.Shotgun( - self.config.server_url, - http_proxy=self.config.http_proxy, - convert_datetimes_to_utc=True, - **self.auth_args, - ) - self._assert_expected(sg_utc, self.datetime_none, self.datetime_local) - self._assert_expected(sg_utc, self.datetime_local, self.datetime_local) - - def test_no_convert_to_utc(self): - if self.config.jenkins: - self.skipTest("Jenkins. locked_until not updating.") - sg_no_utc = shotgun_api3.Shotgun( - self.config.server_url, - http_proxy=self.config.http_proxy, - convert_datetimes_to_utc=False, - **self.auth_args, - ) - self._assert_expected(sg_no_utc, self.datetime_none, self.datetime_none) - self._assert_expected(sg_no_utc, self.datetime_utc, self.datetime_none) - - def _assert_expected(self, sg, date_time, expected): - entity_name = "HumanUser" - entity_id = self.human_user["id"] - field_name = "locked_until" - sg.update(entity_name, entity_id, {field_name: date_time}) - result = sg.find_one(entity_name, [["id", "is", entity_id]], [field_name]) - self.assertEqual(result[field_name], expected) - - -class TestFind(base.LiveTestBase): - def setUp(self): - super(TestFind, self).setUp() - # We will need the created_at field for the shot - fields = list(self.shot.keys())[:] - fields.append("created_at") - self.shot = self.sg.find_one("Shot", [["id", "is", self.shot["id"]]], fields) - # We will need the uuid field for our LocalStorage - fields = list(self.local_storage.keys())[:] - fields.append("uuid") - self.local_storage = self.sg.find_one( - "LocalStorage", [["id", "is", self.local_storage["id"]]], fields - ) - - def test_find(self): - """Called find, find_one for known entities""" - filters = [] - filters.append(["project", "is", self.project]) - filters.append(["id", "is", self.version["id"]]) - - fields = ["id"] - - versions = self.sg.find("Version", filters, fields=fields) - - self.assertTrue(isinstance(versions, list)) - version = versions[0] - self.assertEqual("Version", version["type"]) - self.assertEqual(self.version["id"], version["id"]) - - version = self.sg.find_one("Version", filters, fields=fields) - self.assertEqual("Version", version["type"]) - self.assertEqual(self.version["id"], version["id"]) - - def _id_in_result(self, entity_type, filters, expected_id): - """ - Checks that a given id matches that of entities returned - for particular filters. - """ - results = self.sg.find(entity_type, filters) - return any(result["id"] == expected_id for result in results) - - # TODO test all applicable data types for 'in' - # 'currency' => [BigDecimal, Float, NilClass], - # 'image' => [Hash, NilClass], - # 'percent' => [Bignum, Fixnum, NilClass], - # 'serializable' => [Hash, Array, NilClass], - # 'system_task_type' => [String, NilClass], - # 'timecode' => [Bignum, Fixnum, NilClass], - # 'footage' => [Bignum, Fixnum, NilClass, String, Float, BigDecimal], - # 'url' => [Hash, NilClass], - - # 'uuid' => [String], - - def test_in_relation_comma_id(self): - """ - Test that 'in' relation using commas (old format) works with ids. - """ - filters = [["id", "in", self.project["id"], 99999]] - result = self._id_in_result("Project", filters, self.project["id"]) - self.assertTrue(result) - - def test_in_relation_list_id(self): - """ - Test that 'in' relation using list (new format) works with ids. - """ - filters = [["id", "in", [self.project["id"], 99999]]] - result = self._id_in_result("Project", filters, self.project["id"]) - self.assertTrue(result) - - def test_not_in_relation_id(self): - """ - Test that 'not_in' relation using commas (old format) works with ids. - """ - filters = [["id", "not_in", self.project["id"], 99999]] - result = self._id_in_result("Project", filters, self.project["id"]) - self.assertFalse(result) - - def test_in_relation_comma_text(self): - """ - Test that 'in' relation using commas (old format) works with text fields. - """ - filters = [["name", "in", self.project["name"], "fake project name"]] - result = self._id_in_result("Project", filters, self.project["id"]) - self.assertTrue(result) - - def test_in_relation_list_text(self): - """ - Test that 'in' relation using list (new format) works with text fields. - """ - filters = [["name", "in", [self.project["name"], "fake project name"]]] - result = self._id_in_result("Project", filters, self.project["id"]) - self.assertTrue(result) - - def test_not_in_relation_text(self): - """ - Test that 'not_in' relation using commas (old format) works with ids. - """ - filters = [["name", "not_in", [self.project["name"], "fake project name"]]] - result = self._id_in_result("Project", filters, self.project["id"]) - self.assertFalse(result) - - def test_in_relation_comma_color(self): - """ - Test that 'in' relation using commas (old format) works with color fields. - """ - filters = [ - ["color", "in", self.task["color"], "Green"], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_in_relation_list_color(self): - """ - Test that 'in' relation using list (new format) works with color fields. - """ - filters = [ - ["color", "in", [self.task["color"], "Green"]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_not_in_relation_color(self): - """ - Test that 'not_in' relation using commas (old format) works with color fields. - """ - filters = [ - ["color", "not_in", [self.task["color"], "Green"]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertFalse(result) - - def test_in_relation_comma_date(self): - """ - Test that 'in' relation using commas (old format) works with date fields. - """ - filters = [ - ["due_date", "in", self.task["due_date"], "2012-11-25"], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_in_relation_list_date(self): - """ - Test that 'in' relation using list (new format) works with date fields. - """ - filters = [ - ["due_date", "in", [self.task["due_date"], "2012-11-25"]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_not_in_relation_date(self): - """ - Test that 'not_in' relation using commas (old format) works with date fields. - """ - filters = [ - ["due_date", "not_in", [self.task["due_date"], "2012-11-25"]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertFalse(result) - - # TODO add datetime test for in and not_in - - def test_in_relation_comma_duration(self): - """ - Test that 'in' relation using commas (old format) works with duration fields. - """ - # we need to get the duration value - new_task_keys = list(self.task.keys())[:] - new_task_keys.append("duration") - self.task = self.sg.find_one( - "Task", [["id", "is", self.task["id"]]], new_task_keys - ) - filters = [ - ["duration", "in", self.task["duration"]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_in_relation_list_duration(self): - """ - Test that 'in' relation using list (new format) works with duration fields. - """ - # we need to get the duration value - new_task_keys = list(self.task.keys())[:] - new_task_keys.append("duration") - self.task = self.sg.find_one( - "Task", [["id", "is", self.task["id"]]], new_task_keys - ) - filters = [ - [ - "duration", - "in", - [ - self.task["duration"], - ], - ], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_not_in_relation_duration(self): - """ - Test that 'not_in' relation using commas (old format) works with duration fields. - """ - # we need to get the duration value - new_task_keys = list(self.task.keys())[:] - new_task_keys.append("duration") - self.task = self.sg.find_one( - "Task", [["id", "is", self.task["id"]]], new_task_keys - ) - - filters = [ - [ - "duration", - "not_in", - [ - self.task["duration"], - ], - ], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertFalse(result) - - def test_in_relation_comma_entity(self): - """ - Test that 'in' relation using commas (old format) works with entity fields. - """ - filters = [ - ["entity", "in", self.task["entity"], self.asset], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_in_relation_list_entity(self): - """ - Test that 'in' relation using list (new format) works with entity fields. - """ - filters = [ - ["entity", "in", [self.task["entity"], self.asset]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_not_in_relation_entity(self): - """ - Test that 'not_in' relation using commas (old format) works with entity fields. - """ - filters = [ - ["entity", "not_in", [self.task["entity"], self.asset]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertFalse(result) - - def test_in_relation_comma_entity_type(self): - """ - Test that 'in' relation using commas (old format) works with entity_type fields. - """ - filters = [["entity_type", "in", self.step["entity_type"], "something else"]] - - result = self._id_in_result("Step", filters, self.step["id"]) - self.assertTrue(result) - - def test_in_relation_list_entity_type(self): - """ - Test that 'in' relation using list (new format) works with entity_type fields. - """ - filters = [["entity_type", "in", [self.step["entity_type"], "something else"]]] - - result = self._id_in_result("Step", filters, self.step["id"]) - self.assertTrue(result) - - def test_not_in_relation_entity_type(self): - """ - Test that 'not_in' relation using commas (old format) works with entity_type fields. - """ - filters = [ - ["entity_type", "not_in", [self.step["entity_type"], "something else"]] - ] - - result = self._id_in_result("Step", filters, self.step["id"]) - self.assertFalse(result) - - def test_in_relation_comma_float(self): - """ - Test that 'in' relation using commas (old format) works with float fields. - """ - filters = [ - [ - "sg_frames_aspect_ratio", - "in", - self.version["sg_frames_aspect_ratio"], - 44.0, - ], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertTrue(result) - - def test_in_relation_list_float(self): - """ - Test that 'in' relation using list (new format) works with float fields. - """ - filters = [ - [ - "sg_frames_aspect_ratio", - "in", - [self.version["sg_frames_aspect_ratio"], 30.0], - ], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertTrue(result) - - def test_not_in_relation_float(self): - """ - Test that 'not_in' relation using commas (old format) works with float fields. - """ - filters = [ - [ - "sg_frames_aspect_ratio", - "not_in", - [self.version["sg_frames_aspect_ratio"], 4.4], - ], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertFalse(result) - - def test_in_relation_comma_list(self): - """ - Test that 'in' relation using commas (old format) works with list fields. - """ - filters = [ - ["frame_count", "in", self.version["frame_count"], 33], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertTrue(result) - - def test_in_relation_list_list(self): - """ - Test that 'in' relation using list (new format) works with list fields. - """ - filters = [ - ["frame_count", "in", [self.version["frame_count"], 33]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertTrue(result) - - def test_not_in_relation_list(self): - """ - Test that 'not_in' relation using commas (old format) works with list fields. - """ - filters = [ - ["frame_count", "not_in", [self.version["frame_count"], 33]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertFalse(result) - - def test_in_relation_comma_multi_entity(self): - """ - Test that 'in' relation using commas (old format) works with multi_entity fields. - """ - filters = [ - [ - "task_assignees", - "in", - self.human_user, - ], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_in_relation_list_multi_entity(self): - """ - Test that 'in' relation using list (new format) works with multi_entity fields. - """ - filters = [ - [ - "task_assignees", - "in", - [ - self.human_user, - ], - ], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_not_in_relation_multi_entity(self): - """ - Test that 'not_in' relation using commas (old format) works with multi_entity fields. - """ - filters = [ - [ - "task_assignees", - "not_in", - [ - self.human_user, - ], - ], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertFalse(result) - - def test_in_relation_comma_number(self): - """ - Test that 'in' relation using commas (old format) works with number fields. - """ - filters = [ - ["frame_count", "in", self.version["frame_count"], 1], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertTrue(result) - - def test_in_relation_list_number(self): - """ - Test that 'in' relation using list (new format) works with number fields. - """ - filters = [ - ["frame_count", "in", [self.version["frame_count"], 1]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertTrue(result) - - def test_not_in_relation_number(self): - """ - Test that 'not_in' relation using commas (old format) works with number fields. - """ - filters = [ - ["frame_count", "not_in", [self.version["frame_count"], 1]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Version", filters, self.version["id"]) - self.assertFalse(result) - - def test_in_relation_comma_status_list(self): - """ - Test that 'in' relation using commas (old format) works with status_list fields. - """ - filters = [ - ["sg_status_list", "in", self.task["sg_status_list"], "fin"], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_in_relation_list_status_list(self): - """ - Test that 'in' relation using list (new format) works with status_list fields. - """ - filters = [ - ["sg_status_list", "in", [self.task["sg_status_list"], "fin"]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertTrue(result) - - def test_not_in_relation_status_list(self): - """ - Test that 'not_in' relation using commas (old format) works with status_list fields. - """ - filters = [ - ["sg_status_list", "not_in", [self.task["sg_status_list"], "fin"]], - ["project", "is", self.project], - ] - - result = self._id_in_result("Task", filters, self.task["id"]) - self.assertFalse(result) - - def test_in_relation_comma_uuid(self): - """ - Test that 'in' relation using commas (old format) works with uuid fields. - """ - filters = [ - [ - "uuid", - "in", - self.local_storage["uuid"], - ] - ] - - result = self._id_in_result("LocalStorage", filters, self.local_storage["id"]) - self.assertTrue(result) - - def test_in_relation_list_uuid(self): - """ - Test that 'in' relation using list (new format) works with uuid fields. - """ - filters = [ - [ - "uuid", - "in", - [ - self.local_storage["uuid"], - ], - ] - ] - - result = self._id_in_result("LocalStorage", filters, self.local_storage["id"]) - self.assertTrue(result) - - def test_not_in_relation_uuid(self): - """ - Test that 'not_in' relation using commas (old format) works with uuid fields. - """ - filters = [ - [ - "uuid", - "not_in", - [ - self.local_storage["uuid"], - ], - ] - ] - - result = self._id_in_result("LocalStorage", filters, self.local_storage["id"]) - self.assertFalse(result) - - def test_find_in(self): - """Test use of 'in' relation with find.""" - # id - # old comma seperated format - filters = [["id", "in", self.project["id"], 99999]] - projects = self.sg.find("Project", filters) - # can't use 'any' in py 2.4 - match = False - for project in projects: - if project["id"] == self.project["id"]: - match = True - self.assertTrue(match) - - # new list format - filters = [["id", "in", [self.project["id"], 99999]]] - projects = self.sg.find("Project", filters) - # can't use 'any' in py 2.4 - match = False - for project in projects: - if project["id"] == self.project["id"]: - match = True - self.assertTrue(match) - - # text field - filters = [["name", "in", [self.project["name"], "fake project name"]]] - projects = self.sg.find("Project", filters) - project = projects[0] - self.assertEqual(self.project["id"], project["id"]) - - def test_unsupported_filters(self): - self.assertRaises( - shotgun_api3.Fault, - self.sg.find_one, - "Shot", - [["image", "is_not", [{"type": "Thumbnail", "id": 9}]]], - ) - self.assertRaises( - shotgun_api3.Fault, - self.sg.find_one, - "HumanUser", - [["password_proxy", "is_not", [None]]], - ) - self.assertRaises( - shotgun_api3.Fault, - self.sg.find_one, - "EventLogEntry", - [["meta", "is_not", [None]]], - ) - self.assertRaises( - shotgun_api3.Fault, - self.sg.find_one, - "Revision", - [["meta", "attachment", [None]]], - ) - - def test_zero_is_not_none(self): - """Test the zero and None are differentiated using "is_not" filter. - Ticket #25127 - """ - # Create a number field if it doesn't already exist - num_field = "sg_api_tests_number_field" - if num_field not in list(self.sg.schema_field_read("Asset").keys()): - self.sg.schema_field_create( - "Asset", "number", num_field.replace("sg_", "").replace("_", " ") - ) - - # Set to None - self.sg.update("Asset", self.asset["id"], {num_field: None}) - - # Should be filtered out - result = self.sg.find( - "Asset", - [["id", "is", self.asset["id"]], [num_field, "is_not", None]], - [num_field], - ) - self.assertEqual([], result) - - # Set it to zero - self.sg.update("Asset", self.asset["id"], {num_field: 0}) - - # Should not be filtered out - result = self.sg.find_one( - "Asset", - [["id", "is", self.asset["id"]], [num_field, "is_not", None]], - [num_field], - ) - self.assertFalse(result is None) - - # Set it to some other number - self.sg.update("Asset", self.asset["id"], {num_field: 1}) - - # Should not be filtered out - result = self.sg.find_one( - "Asset", - [["id", "is", self.asset["id"]], [num_field, "is_not", None]], - [num_field], - ) - self.assertFalse(result is None) - - def test_include_archived_projects(self): - if self.sg.server_caps.version > (5, 3, 13): - # Ticket #25082 - result = self.sg.find_one("Shot", [["id", "is", self.shot["id"]]]) - self.assertEqual(self.shot["id"], result["id"]) - - # archive project - self.sg.update("Project", self.project["id"], {"archived": True}) - - # setting defaults to True, so we should get result - result = self.sg.find_one("Shot", [["id", "is", self.shot["id"]]]) - self.assertEqual(self.shot["id"], result["id"]) - - result = self.sg.find_one( - "Shot", [["id", "is", self.shot["id"]]], include_archived_projects=False - ) - self.assertEqual(None, result) - - # unarchive project - self.sg.update("Project", self.project["id"], {"archived": False}) - - -class TestFollow(base.LiveTestBase): - - def test_follow_unfollow(self): - """Test follow method""" - - if not self.sg.server_caps.version or self.sg.server_caps.version < (5, 1, 22): - return - - with self.gen_entity( - "HumanUser", - projects=[self.project], - ) as human_user, self.gen_entity( - "Shot", - project=self.project, - ) as shot: - result = self.sg.follow(human_user, shot) - assert result["followed"] - - result = self.sg.unfollow(human_user, shot) - assert result["unfollowed"] - - def test_followers(self): - """Test followers method""" - - if not self.sg.server_caps.version or self.sg.server_caps.version < (5, 1, 22): - return - - with self.gen_entity( - "HumanUser", - projects=[self.project], - ) as human_user, self.gen_entity( - "Shot", - project=self.project, - ) as shot: - result = self.sg.follow(human_user, shot) - assert result["followed"] - - result = self.sg.followers(shot) - - self.assertEqual(1, len(result)) - self.assertEqual(human_user["id"], result[0]["id"]) - - def test_following(self): - """Test following method""" - - if not self.sg.server_caps.version or self.sg.server_caps.version < (7, 0, 12): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - with self.gen_entity( - "HumanUser", - projects=[self.project], - ) as human_user, self.gen_entity( - "Shot", - project=self.project, - ) as shot, self.gen_entity( - "Task", - project=self.project, - ) as task: - result = self.sg.follow(human_user, shot) - assert result["followed"] - - result = self.sg.following(human_user) - - self.assertEqual(1, len(result)) - - result = self.sg.follow(human_user, task) - assert result["followed"] - - result = self.sg.following(human_user) - - self.assertEqual(2, len(result)) - result = self.sg.following(human_user, entity_type="Task") - self.assertEqual(1, len(result)) - result = self.sg.following(human_user, entity_type="Shot") - self.assertEqual(1, len(result)) - - shot_project_id = self.sg.find_one( - "Shot", [["id", "is", shot["id"]]], ["project.Project.id"] - )["project.Project.id"] - task_project_id = self.sg.find_one( - "Task", [["id", "is", task["id"]]], ["project.Project.id"] - )["project.Project.id"] - project_count = 2 if shot_project_id == task_project_id else 1 - result = self.sg.following( - human_user, project={"type": "Project", "id": shot_project_id} - ) - self.assertEqual(project_count, len(result)) - result = self.sg.following( - human_user, project={"type": "Project", "id": task_project_id} - ) - self.assertEqual(project_count, len(result)) - result = self.sg.following( - human_user, - project={"type": "Project", "id": shot_project_id}, - entity_type="Shot", - ) - self.assertEqual(1, len(result)) - result = self.sg.following( - human_user, - project={"type": "Project", "id": task_project_id}, - entity_type="Task", - ) - self.assertEqual(1, len(result)) - - -class TestErrors(base.TestBase): - def setUp(self): - auth_mode = "HumanUser" if self.config.jenkins else "ApiUser" - super(TestErrors, self).setUp(auth_mode) - - def test_bad_auth(self): - """test_bad_auth invalid script name or api key raises fault""" - server_url = self.config.server_url - script_name = "not_real_script_name" - api_key = self.config.api_key - login = self.config.human_login - password = self.config.human_password - auth_token = "111111" - - # Test various combinations of illegal arguments - self.assertRaises(ValueError, shotgun_api3.Shotgun, server_url) - self.assertRaises(ValueError, shotgun_api3.Shotgun, server_url, None, api_key) - self.assertRaises( - ValueError, shotgun_api3.Shotgun, server_url, script_name, None - ) - self.assertRaises( - ValueError, - shotgun_api3.Shotgun, - server_url, - script_name, - api_key, - login=login, - password=password, - ) - self.assertRaises(ValueError, shotgun_api3.Shotgun, server_url, login=login) - self.assertRaises( - ValueError, shotgun_api3.Shotgun, server_url, password=password - ) - self.assertRaises( - ValueError, - shotgun_api3.Shotgun, - server_url, - script_name, - login=login, - password=password, - ) - self.assertRaises( - ValueError, - shotgun_api3.Shotgun, - server_url, - login=login, - auth_token=auth_token, - ) - self.assertRaises( - ValueError, - shotgun_api3.Shotgun, - server_url, - password=password, - auth_token=auth_token, - ) - self.assertRaises( - ValueError, - shotgun_api3.Shotgun, - server_url, - script_name, - login=login, - password=password, - auth_token=auth_token, - ) - self.assertRaises( - ValueError, - shotgun_api3.Shotgun, - server_url, - api_key=api_key, - login=login, - password=password, - auth_token=auth_token, - ) - - # Test failed authentications - sg = shotgun_api3.Shotgun(server_url, script_name, api_key) - self.assertRaises(shotgun_api3.AuthenticationFault, sg.find_one, "Shot", []) - - script_name = self.config.script_name - api_key = "notrealapikey" - sg = shotgun_api3.Shotgun(server_url, script_name, api_key) - self.assertRaises(shotgun_api3.AuthenticationFault, sg.find_one, "Shot", []) - - sg = shotgun_api3.Shotgun( - server_url, login=login, password="not a real password" - ) - self.assertRaises(shotgun_api3.AuthenticationFault, sg.find_one, "Shot", []) - - # This may trigger an account lockdown. Make sure it is not locked anymore. - user = self.sg.find_one("HumanUser", [["login", "is", login]]) - self.sg.update("HumanUser", user["id"], {"locked_until": None}) - - @patch("shotgun_api3.shotgun.Http.request") - def test_status_not_200(self, mock_request): - response = MagicMock(name="response mock", spec=dict) - response.status = 300 - response.reason = "reason" - mock_request.return_value = (response, {}) - self.assertRaises(shotgun_api3.ProtocolError, self.sg.find_one, "Shot", []) - - @patch("shotgun_api3.shotgun.Http.request") - def test_make_call_retry(self, mock_request): - response = MagicMock(name="response mock", spec=dict) - response.status = 200 - response.reason = "reason" - mock_request.return_value = (response, {}) - - bak_rpc_attempt_interval = self.sg.config.rpc_attempt_interval - self.sg.config.rpc_attempt_interval = 0 - try: - # First: make the request raise a consistent exception - mock_request.side_effect = Exception("not working") - with self.assertLogs( - "shotgun_api3", level="DEBUG" - ) as cm1, self.assertRaises(Exception) as cm2: - self.sg.info() - - self.assertEqual(cm2.exception.args[0], "not working") - log_content = "\n".join(cm1.output) - for i in [1, 2]: - self.assertIn( - f"Request failed, attempt {i} of 3. Retrying", - log_content, - ) - self.assertIn( - "Request failed. Giving up after 3 attempts.", - log_content, - ) - - # Then, make the exception happening only once and prove the - # retry works - def my_side_effect(*args, **kwargs): - try: - if my_side_effect.counter < 1: - raise Exception("not working") - - return mock.DEFAULT - finally: - my_side_effect.counter += 1 - - my_side_effect.counter = 0 - mock_request.side_effect = my_side_effect - with self.assertLogs("shotgun_api3", level="DEBUG") as cm: - self.assertIsInstance( - self.sg.info(), - dict, - ) - - log_content = "\n".join(cm.output) - self.assertIn( - "Request failed, attempt 1 of 3. Retrying", - log_content, - ) - self.assertNotIn( - "Request failed, attempt 2 of 3. Retrying", - log_content, - ) - - # Last: raise a SSLEOFError exception - SG-34910 - def my_side_effect2(*args, **kwargs): - try: - if my_side_effect2.counter < 1: - raise ssl.SSLEOFError( - "EOF occurred in violation of protocol (_ssl.c:2426)" - ) - - return mock.DEFAULT - finally: - my_side_effect2.counter += 1 - - my_side_effect2.counter = 0 - mock_request.side_effect = my_side_effect2 - - with self.assertLogs("shotgun_api3", level="DEBUG") as cm: - self.assertIsInstance( - self.sg.info(), - dict, - ) - - log_content = "\n".join(cm.output) - self.assertIn("SSLEOFError", log_content) - self.assertIn( - "Request failed, attempt 1 of 3. Retrying", - log_content, - ) - self.assertNotIn( - "Request failed, attempt 2 of 3. Retrying", - log_content, - ) - finally: - self.sg.config.rpc_attempt_interval = bak_rpc_attempt_interval - - @patch("shotgun_api3.shotgun.Http.request") - def test_sha2_error(self, mock_request): - # Simulate the exception raised with SHA-2 errors - mock_request.side_effect = ShotgunSSLError( - "[Errno 1] _ssl.c:480: error:0D0C50A1:asn1 " - "encoding routines:ASN1_item_verify: unknown message digest " - "algorithm" - ) - - # save the original state - original_env_val = os.environ.pop("SHOTGUN_FORCE_CERTIFICATE_VALIDATION", None) - - # ensure we're starting with the right values - self.sg.reset_user_agent() - - # ensure the initial settings are correct. These will be different depending on whether - # the ssl module imported successfully or not. - if "ssl" in sys.modules: - self.assertFalse(self.sg.config.no_ssl_validation) - self.assertFalse(shotgun_api3.shotgun.NO_SSL_VALIDATION) - self.assertTrue("(validate)" in " ".join(self.sg._user_agents)) - self.assertFalse("(no-validate)" in " ".join(self.sg._user_agents)) - else: - self.assertTrue(self.sg.config.no_ssl_validation) - self.assertTrue(shotgun_api3.shotgun.NO_SSL_VALIDATION) - self.assertFalse("(validate)" in " ".join(self.sg._user_agents)) - self.assertTrue("(no-validate)" in " ".join(self.sg._user_agents)) - - try: - self.sg.info() - except ShotgunSSLError: - # ensure the api has reset the values in the correct fallback behavior - self.assertTrue(self.sg.config.no_ssl_validation) - self.assertTrue(shotgun_api3.shotgun.NO_SSL_VALIDATION) - self.assertFalse("(validate)" in " ".join(self.sg._user_agents)) - self.assertTrue("(no-validate)" in " ".join(self.sg._user_agents)) - - if original_env_val is not None: - os.environ["SHOTGUN_FORCE_CERTIFICATE_VALIDATION"] = original_env_val - - @patch("shotgun_api3.shotgun.Http.request") - def test_sha2_error_with_strict(self, mock_request): - # Simulate the exception raised with SHA-2 errors - mock_request.side_effect = ShotgunSSLError( - "[Errno 1] _ssl.c:480: error:0D0C50A1:asn1 " - "encoding routines:ASN1_item_verify: unknown message digest " - "algorithm" - ) - - # save the original state - original_env_val = os.environ.pop("SHOTGUN_FORCE_CERTIFICATE_VALIDATION", None) - os.environ["SHOTGUN_FORCE_CERTIFICATE_VALIDATION"] = "1" - - # ensure we're starting with the right values - self.sg.config.no_ssl_validation = False - shotgun_api3.shotgun.NO_SSL_VALIDATION = False - self.sg.reset_user_agent() - - try: - self.sg.info() - except ShotgunSSLError: - # ensure the api has NOT reset the values in the fallback behavior because we have - # set the env variable to force validation - self.assertFalse(self.sg.config.no_ssl_validation) - self.assertFalse(shotgun_api3.shotgun.NO_SSL_VALIDATION) - self.assertFalse("(no-validate)" in " ".join(self.sg._user_agents)) - self.assertTrue("(validate)" in " ".join(self.sg._user_agents)) - - if original_env_val is not None: - os.environ["SHOTGUN_FORCE_CERTIFICATE_VALIDATION"] = original_env_val - - @patch.object(urllib.request.OpenerDirector, "open") - def test_sanitized_auth_params(self, mock_open): - # Simulate the server blowing up and giving us a 500 error - mock_open.side_effect = urllib.error.HTTPError("url", 500, "message", {}, None) - - this_dir, _ = os.path.split(__file__) - thumbnail_path = os.path.abspath(os.path.join(this_dir, "sg_logo.jpg")) - - try: - # Try to upload a bogus file - self.sg.upload("Note", 1234, thumbnail_path) - except shotgun_api3.ShotgunError as e: - self.assertFalse(str(self.api_key) in str(e)) - return - - # You should never get here... Otherwise some mocking failed and the - # except above wasn't properly run - self.assertTrue(False) - - def test_upload_empty_file(self): - """ - Test uploading an empty file raises an error. - """ - this_dir, _ = os.path.split(__file__) - path = os.path.abspath(os.path.expanduser(os.path.join(this_dir, "empty.txt"))) - self.assertRaises( - shotgun_api3.ShotgunError, self.sg.upload, "Version", 123, path - ) - self.assertRaises( - shotgun_api3.ShotgunError, self.sg.upload_thumbnail, "Version", 123, path - ) - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.upload_filmstrip_thumbnail, - "Version", - 123, - path, - ) - - def test_upload_missing_file(self): - """ - Test uploading an missing file raises an error. - """ - path = "/path/to/nowhere/foo.txt" - self.assertRaises( - shotgun_api3.ShotgunError, self.sg.upload, "Version", 123, path - ) - self.assertRaises( - shotgun_api3.ShotgunError, self.sg.upload_thumbnail, "Version", 123, path - ) - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.upload_filmstrip_thumbnail, - "Version", - 123, - path, - ) - - -# def test_malformed_response(self): -# # TODO ResponseError -# pass - - -class TestScriptUserSudoAuth(base.LiveTestBase): - def setUp(self): - super(TestScriptUserSudoAuth, self).setUp() - - self.sg.update( - "HumanUser", - self.human_user["id"], - {"projects": [self.project]}, - ) - - def test_user_is_creator(self): - """ - Test 'sudo_as_login' option: on create, ensure appropriate user is set in created-by - """ - - if not self.sg.server_caps.version or self.sg.server_caps.version < (5, 3, 12): - return - - x = shotgun_api3.Shotgun( - self.config.server_url, - http_proxy=self.config.http_proxy, - sudo_as_login=self.config.human_login, - **self.auth_args, - ) - - data = { - "project": self.project, - "code": "JohnnyApple_Design01_FaceFinal", - "description": "fixed rig per director final notes", - "sg_status_list": "na", - "entity": self.asset, - "user": self.human_user, - } - - version = x.create("Version", data, return_fields=["id", "created_by"]) - self.assertTrue(isinstance(version, dict)) - self.assertTrue("id" in version) - self.assertTrue("created_by" in version) - self.assertEqual(self.config.human_name, version["created_by"]["name"]) - - -class TestHumanUserSudoAuth(base.TestBase): - def setUp(self): - super(TestHumanUserSudoAuth, self).setUp("HumanUser") - - def test_human_user_sudo_auth_fails(self): - """ - Test 'sudo_as_login' option for HumanUser. - Request fails on server because user has no permission to Sudo. - """ - if self.config.jenkins: - self.skipTest("Jenkins. locked_until not updating.") - - if not self.sg.server_caps.version or self.sg.server_caps.version < (5, 3, 12): - return - - x = shotgun_api3.Shotgun( - self.config.server_url, - login=self.config.human_login, - password=self.config.human_password, - http_proxy=self.config.http_proxy, - sudo_as_login="blah", - ) - self.assertRaises(shotgun_api3.Fault, x.find_one, "Shot", []) - expected = "The user does not have permission to 'sudo':" - try: - x.find_one("Shot", []) - except shotgun_api3.Fault as e: - # py24 exceptions don't have message attr - if hasattr(e, "message"): - self.assertTrue(e.message.startswith(expected)) - else: - self.assertTrue(e.args[0].startswith(expected)) - - -class TestHumanUserAuth(base.HumanUserAuthLiveTestBase): - """ - Testing the username/password authentication method - """ - - def test_humanuser_find(self): - """Called find, find_one for known entities as human user""" - filters = [] - filters.append(["project", "is", self.project]) - filters.append(["id", "is", self.version["id"]]) - - fields = ["id"] - - versions = self.sg.find("Version", filters, fields=fields) - - self.assertTrue(isinstance(versions, list)) - version = versions[0] - self.assertEqual("Version", version["type"]) - self.assertEqual(self.version["id"], version["id"]) - - version = self.sg.find_one("Version", filters, fields=fields) - self.assertEqual("Version", version["type"]) - self.assertEqual(self.version["id"], version["id"]) - - def test_humanuser_upload_thumbnail_for_version(self): - """simple upload thumbnail for version test as human user.""" - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - # upload thumbnail - thumb_id = self.sg.upload_thumbnail("Version", self.version["id"], path) - self.assertTrue(isinstance(thumb_id, int)) - - # check result on version - version_with_thumbnail = self.find_one_await_thumbnail( - "Version", - [["id", "is", self.version["id"]]], - ) - - self.assertEqual(version_with_thumbnail.get("type"), "Version") - self.assertEqual(version_with_thumbnail.get("id"), self.version["id"]) - - h = Http(".cache") - thumb_resp, content = h.request(version_with_thumbnail.get("image"), "GET") - self.assertIn(thumb_resp["status"], ["200", "304"]) - self.assertIn(thumb_resp["content-type"], ["image/jpeg", "image/png"]) - - # clear thumbnail - response_clear_thumbnail = self.sg.update( - "Version", self.version["id"], {"image": None} - ) - expected_clear_thumbnail = { - "id": self.version["id"], - "image": None, - "type": "Version", - } - self.assertEqual(expected_clear_thumbnail, response_clear_thumbnail) - - -class TestSessionTokenAuth(base.SessionTokenAuthLiveTestBase): - """ - Testing the session token based authentication method - """ - - def test_humanuser_find(self): - """Called find, find_one for known entities as session token based user""" - - if self.sg.server_caps.version >= (5, 4, 1): - - filters = [] - filters.append(["project", "is", self.project]) - filters.append(["id", "is", self.version["id"]]) - - fields = ["id"] - - versions = self.sg.find("Version", filters, fields=fields) - - self.assertTrue(isinstance(versions, list)) - version = versions[0] - self.assertEqual("Version", version["type"]) - self.assertEqual(self.version["id"], version["id"]) - - version = self.sg.find_one("Version", filters, fields=fields) - self.assertEqual("Version", version["type"]) - self.assertEqual(self.version["id"], version["id"]) - - def test_humanuser_upload_thumbnail_for_version(self): - """simple upload thumbnail for version test as session based token user.""" - - if self.sg.server_caps.version >= (5, 4, 1): - - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - # upload thumbnail - thumb_id = self.sg.upload_thumbnail("Version", self.version["id"], path) - self.assertTrue(isinstance(thumb_id, int)) - - # check result on version - version_with_thumbnail = self.find_one_await_thumbnail( - "Version", - [["id", "is", self.version["id"]]], - ) - - self.assertEqual(version_with_thumbnail.get("type"), "Version") - self.assertEqual(version_with_thumbnail.get("id"), self.version["id"]) - - h = Http(".cache") - thumb_resp, content = h.request(version_with_thumbnail.get("image"), "GET") - self.assertIn(thumb_resp["status"], ["200", "304"]) - self.assertIn(thumb_resp["content-type"], ["image/jpeg", "image/png"]) - - # clear thumbnail - response_clear_thumbnail = self.sg.update( - "Version", self.version["id"], {"image": None} - ) - expected_clear_thumbnail = { - "id": self.version["id"], - "image": None, - "type": "Version", - } - self.assertEqual(expected_clear_thumbnail, response_clear_thumbnail) - - -class TestProjectLastAccessedByCurrentUser(base.LiveTestBase): - # Ticket #24681 - def test_logged_in_user(self): - if self.sg.server_caps.version and self.sg.server_caps.version < (5, 3, 20): - return - - sg = shotgun_api3.Shotgun( - self.config.server_url, - login=self.config.human_login, - password=self.config.human_password, - http_proxy=self.config.http_proxy, - ) - - sg.update_project_last_accessed(self.project) - initial = sg.find_one( - "Project", - [["id", "is", self.project["id"]]], - ["last_accessed_by_current_user"], - ) - - # Make sure time has elapsed so there is a difference between the two time stamps. - time.sleep(2) - - sg.update_project_last_accessed(self.project) - - current = sg.find_one( - "Project", - [["id", "is", self.project["id"]]], - ["last_accessed_by_current_user"], - ) - self.assertNotEqual(initial, current) - # it's possible initial is None - assert ( - initial["last_accessed_by_current_user"] - < current["last_accessed_by_current_user"] - ) - - def test_pass_in_user(self): - if self.sg.server_caps.version and self.sg.server_caps.version < (5, 3, 20): - return - - sg = shotgun_api3.Shotgun( - self.config.server_url, - login=self.config.human_login, - password=self.config.human_password, - http_proxy=self.config.http_proxy, - ) - - initial = sg.find_one( - "Project", - [["id", "is", self.project["id"]]], - ["last_accessed_by_current_user"], - ) - time.sleep(1) - - # this instance of the api is not logged in as a user - self.sg.update_project_last_accessed(self.project, user=self.human_user) - - current = sg.find_one( - "Project", - [["id", "is", self.project["id"]]], - ["last_accessed_by_current_user"], - ) - self.assertNotEqual(initial, current) - # it's possible initial is None - if initial: - assert ( - initial["last_accessed_by_current_user"] - < current["last_accessed_by_current_user"] - ) - - def test_sudo_as_user(self): - if self.sg.server_caps.version and self.sg.server_caps.version < (5, 3, 20): - return - - sg = shotgun_api3.Shotgun( - self.config.server_url, - http_proxy=self.config.http_proxy, - sudo_as_login=self.config.human_login, - **self.auth_args, - ) - - initial = sg.find_one( - "Project", - [["id", "is", self.project["id"]]], - ["last_accessed_by_current_user"], - ) - time.sleep(1) - - sg.update_project_last_accessed(self.project) - - current = sg.find_one( - "Project", - [["id", "is", self.project["id"]]], - ["last_accessed_by_current_user"], - ) - self.assertNotEqual(initial, current) - # it's possible initial is None - if initial: - assert ( - initial["last_accessed_by_current_user"] - < current["last_accessed_by_current_user"] - ) - - -class TestActivityStream(base.LiveTestBase): - """ - Unit tests for the activity_stream_read() method - """ - - def setUp(self): - super(TestActivityStream, self).setUp() - self._prefix = uuid.uuid4().hex - - self._shot = self.sg.create( - "Shot", - {"code": "%s activity stream test" % self._prefix, "project": self.project}, - ) - - self._note = self.sg.create( - "Note", - {"content": "Test!", "project": self.project, "note_links": [self._shot]}, - ) - - # check that if the created_by is a script user, we want to ensure - # that event log generation is enabled for this user. If it has been - # disabled, these tests will fail because the activity stream is - # connected to events. In this case, print a warning to the user - d = self.sg.find_one( - "Shot", - [["id", "is", self._shot["id"]]], - ["created_by.ApiUser.generate_event_log_entries"], - ) - - if d["created_by.ApiUser.generate_event_log_entries"] is False: - # events are turned off! warn the user - print( - "WARNING! Looks like the script user that is running these " - "tests has got the generate event log entries setting set to " - "off. This will cause the activity stream tests to fail. " - "Please enable event log generation for the script user." - ) - - def tearDown(self): - batch_data = [] - batch_data.append( - { - "request_type": "delete", - "entity_type": self._note["type"], - "entity_id": self._note["id"], - } - ) - batch_data.append( - { - "request_type": "delete", - "entity_type": self._shot["type"], - "entity_id": self._shot["id"], - } - ) - self.sg.batch(batch_data) - - super(TestActivityStream, self).tearDown() - - def test_simple(self): - """ - Test activity stream - """ - - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - result = self.sg.activity_stream_read(self._shot["type"], self._shot["id"]) - - expected_keys = [ - "earliest_update_id", - "entity_id", - "entity_type", - "latest_update_id", - "updates", - ] - - self.assertEqual(set(expected_keys), set(result.keys())) - self.assertEqual(len(result["updates"]), 2) - self.assertEqual(result["entity_type"], "Shot") - self.assertEqual(result["entity_id"], self._shot["id"]) - - def test_limit(self): - """ - Test limited activity stream - """ - - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - result = self.sg.activity_stream_read( - self._shot["type"], self._shot["id"], limit=1 - ) - - self.assertEqual(len(result["updates"]), 1) - self.assertEqual(result["updates"][0]["update_type"], "create") - self.assertEqual(result["updates"][0]["meta"]["entity_type"], "Note") - - def test_extra_fields(self): - """ - Test additional fields for activity stream - """ - - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - result = self.sg.activity_stream_read( - self._shot["type"], - self._shot["id"], - entity_fields={"Shot": ["created_by.HumanUser.image"], "Note": ["content"]}, - ) - - self.assertEqual(len(result["updates"]), 2) - self.assertEqual( - set(result["updates"][0]["primary_entity"].keys()), - set(["content", "id", "name", "status", "type"]), - ) - - self.assertEqual( - set(result["updates"][1]["primary_entity"].keys()), - set(["created_by.HumanUser.image", "id", "name", "status", "type"]), - ) - - -class TestNoteThreadRead(base.LiveTestBase): - """ - Unit tests for the note_thread_read method - """ - - def setUp(self): - super(TestNoteThreadRead, self).setUp() - - # get path to our std attahcment - this_dir, _ = os.path.split(__file__) - self._thumbnail_path = os.path.abspath(os.path.join(this_dir, "sg_logo.jpg")) - - def _check_note(self, data, note_id, additional_fields): - - # check the expected fields - expected_fields = set( - ["content", "created_at", "created_by", "id", "type"] + additional_fields - ) - - self.assertEqual(expected_fields, set(data.keys())) - - # check that the data matches the data we get from a find call - note_data = self.sg.find_one( - "Note", [["id", "is", note_id]], list(expected_fields) - ) - # remove images before comparison - if ( - "created_by.HumanUser.image" in note_data - and "created_by.HumanUser.image" in data - ): - note_data.pop("created_by.HumanUser.image") - data.pop("created_by.HumanUser.image") - self.assertEqual(note_data, data) - - def _check_reply(self, data, reply_id, additional_fields): - - # check the expected fields - expected_fields = set( - ["content", "created_at", "user", "id", "type"] + additional_fields - ) - self.assertEqual(expected_fields, set(data.keys())) - - # check that the data matches the data we get from a find call - reply_data = self.sg.find_one( - "Reply", [["id", "is", reply_id]], list(expected_fields) - ) - - # the reply stream adds an image to the user fields in order - # to include thumbnails for users, so remove this before we compare - # against the shotgun find data. The image is tested elsewhere. - del data["user"]["image"] - - self.assertEqual(reply_data, data) - - def _check_attachment(self, data, attachment_id, additional_fields): - # check the expected fields - expected_fields = set( - ["created_at", "created_by", "id", "type"] + additional_fields - ) - self.assertEqual(expected_fields, set(data.keys())) - - # check that the data matches the data we get from a find call - attachment_data = self.sg.find_one( - "Attachment", [["id", "is", attachment_id]], list(expected_fields) - ) - - # remove images before comparison - if "this_file" in attachment_data and "this_file" in data: - attachment_data["this_file"].pop("url") - data["this_file"].pop("url") - self.assertEqual(attachment_data, data) - - # For now skip tests that are erroneously failling on some sites to - # allow CI to pass until the known issue causing this is resolved. - @base.skip("Skipping test that erroneously fails on some sites.") - def test_simple(self): - """ - Test note reply thread API call - """ - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - user_entity = "HumanUser" if self.config.jenkins else "ApiUser" - - # create note - note = self.sg.create("Note", {"content": "Test!", "project": self.project}) - - # for this test, we check that the replies returned also - # contain the thumbnail associated with the user doing the - # reply. For this, make sure that there is a thumbnail - # associated with the current user - - d = self.sg.find_one( - "Note", - [["id", "is", note["id"]]], - ["created_by", f"created_by.{user_entity}.image"], - ) - - current_thumbnail = d[f"created_by.{user_entity}.image"] - - if current_thumbnail is None: - # upload thumbnail - self.sg.upload_thumbnail( - user_entity, d["created_by"]["id"], self._thumbnail_path - ) - - d = self.sg.find_one( - "Note", - [["id", "is", note["id"]]], - ["created_by", f"created_by.{user_entity}.image"], - ) - - current_thumbnail = d[f"created_by.{user_entity}.image"] - - # get thread - result = self.sg.note_thread_read(note["id"]) - self.assertEqual(len(result), 1) - self._check_note(result[0], note["id"], additional_fields=[]) - - # now add a reply - reply = self.sg.create("Reply", {"content": "Reply Content", "entity": note}) - - # get thread - result = self.sg.note_thread_read(note["id"]) - self.assertEqual(len(result), 2) - - # now check that the reply thumbnail field matches - # the uploaded thumbnail. strip off any s3 querystring - # for the comparison - reply_thumb = result[1]["user"]["image"] - url_obj_a = urllib.parse.urlparse(current_thumbnail) - url_obj_b = urllib.parse.urlparse(reply_thumb) - self.assertEqual( - "%s/%s" % (url_obj_a.netloc, url_obj_a.path), - "%s/%s" % (url_obj_b.netloc, url_obj_b.path), - ) - - # and check ther rest of the data - self._check_note(result[0], note["id"], additional_fields=[]) - self._check_reply(result[1], reply["id"], additional_fields=[]) - - # now upload an attachment - attachment_id = self.sg.upload(note["type"], note["id"], self._thumbnail_path) - - # get thread - result = self.sg.note_thread_read(note["id"]) - self.assertEqual(len(result), 3) - self._check_note(result[0], note["id"], additional_fields=[]) - self._check_reply(result[1], reply["id"], additional_fields=[]) - self._check_attachment(result[2], attachment_id, additional_fields=[]) - - # For now skip tests that are erroneously failling on some sites to - # allow CI to pass until the known issue causing this is resolved. - @base.skip("Skipping test that erroneously fails on some sites.") - def test_complex(self): - """ - Test note reply thread API call with additional params - """ - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - additional_fields = { - "Note": [ - "created_by.HumanUser.image", - "addressings_to", - "playlist", - "user", - ], - "Reply": ["content"], - "Attachment": ["this_file"], - } - - # create note - note = self.sg.create( - "Note", - { - "content": "Test!", - "project": self.project, - "addressings_to": [self.human_user], - }, - ) - - # get thread - result = self.sg.note_thread_read(note["id"], additional_fields) - - self.assertEqual(len(result), 1) - self._check_note(result[0], note["id"], additional_fields["Note"]) - - # now add a reply - reply = self.sg.create("Reply", {"content": "Reply Content", "entity": note}) - - # get thread - result = self.sg.note_thread_read(note["id"], additional_fields) - self.assertEqual(len(result), 2) - self._check_note(result[0], note["id"], additional_fields["Note"]) - self._check_reply(result[1], reply["id"], additional_fields["Reply"]) - - # now upload an attachment - attachment_id = self.sg.upload(note["type"], note["id"], self._thumbnail_path) - - # get thread - result = self.sg.note_thread_read(note["id"], additional_fields) - self.assertEqual(len(result), 3) - self._check_note(result[0], note["id"], additional_fields["Note"]) - self._check_reply(result[1], reply["id"], additional_fields["Reply"]) - - self._check_attachment( - result[2], attachment_id, additional_fields["Attachment"] - ) - - -class TestTextSearch(base.LiveTestBase): - """ - Unit tests for the text_search() method - """ - - def setUp(self): - super(TestTextSearch, self).setUp() - - # create 5 shots and 5 assets to search for - self._prefix = uuid.uuid4().hex - - batch_data = [] - for i in range(5): - data = { - "code": "%s Text Search %s" % (self._prefix, i), - "project": self.project, - } - batch_data.append( - {"request_type": "create", "entity_type": "Shot", "data": data} - ) - batch_data.append( - {"request_type": "create", "entity_type": "Asset", "data": data} - ) - data = self.sg.batch(batch_data) - - self._shot_ids = [x["id"] for x in data if x["type"] == "Shot"] - self._asset_ids = [x["id"] for x in data if x["type"] == "Asset"] - - def tearDown(self): - - # clean up - batch_data = [] - for shot_id in self._shot_ids: - batch_data.append( - {"request_type": "delete", "entity_type": "Shot", "entity_id": shot_id} - ) - for asset_id in self._asset_ids: - batch_data.append( - { - "request_type": "delete", - "entity_type": "Asset", - "entity_id": asset_id, - } - ) - self.sg.batch(batch_data) - - super(TestTextSearch, self).tearDown() - - def test_simple(self): - """ - Test basic global search - """ - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - result = self.sg.text_search("%s Text Search" % self._prefix, {"Shot": []}) - - self.assertEqual(set(["matches", "terms"]), set(result.keys())) - self.assertEqual(result["terms"], [self._prefix, "text", "search"]) - matches = result["matches"] - self.assertEqual(len(matches), 5) - - for match in matches: - self.assertTrue(match["id"] in self._shot_ids) - self.assertEqual(match["type"], "Shot") - self.assertEqual(match["project_id"], self.project["id"]) - self.assertEqual(match["image"], None) - - def test_limit(self): - """ - Test limited global search - """ - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - result = self.sg.text_search( - "%s Text Search" % self._prefix, {"Shot": []}, limit=3 - ) - matches = result["matches"] - self.assertEqual(len(matches), 3) - - def test_entity_filter(self): - """ - Test basic multi-type global search - """ - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - result = self.sg.text_search( - "%s Text Search" % self._prefix, {"Shot": [], "Asset": []} - ) - - matches = result["matches"] - - self.assertEqual(set(["matches", "terms"]), set(result.keys())) - self.assertEqual(len(matches), 10) - - def test_complex_entity_filter(self): - """ - Test complex multi-type global search - """ - if not self.sg.server_caps.version or self.sg.server_caps.version < (6, 2, 0): - return - - result = self.sg.text_search( - "%s Text Search" % self._prefix, - { - "Shot": [["code", "ends_with", "3"]], - "Asset": [ - {"filter_operator": "any", "filters": [["code", "ends_with", "4"]]} - ], - }, - ) - - matches = result["matches"] - - self.assertEqual(set(["matches", "terms"]), set(result.keys())) - self.assertEqual(len(matches), 2) - - self.assertEqual(matches[0]["type"], "Shot") - self.assertEqual(matches[0]["name"], "%s Text Search 3" % self._prefix) - self.assertEqual(matches[1]["type"], "Asset") - self.assertEqual(matches[1]["name"], "%s Text Search 4" % self._prefix) - - -class TestReadAdditionalFilterPresets(base.LiveTestBase): - """ - Unit tests for the additional_filter_presets read parameter - """ - - def test_simple_case(self): - if self.sg_version < (7, 0, 0): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - filters = [["project", "is", self.project], ["id", "is", self.version["id"]]] - - fields = ["id"] - - additional_filters = [ - {"preset_name": "LATEST", "latest_by": "ENTITIES_CREATED_AT"} - ] - - versions = self.sg.find( - "Version", - filters, - fields=fields, - additional_filter_presets=additional_filters, - ) - version = versions[0] - self.assertEqual("Version", version["type"]) - self.assertEqual(self.version["id"], version["id"]) - - def test_find_one(self): - if self.sg_version < (7, 0, 0): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - filters = [["project", "is", self.project], ["id", "is", self.version["id"]]] - - fields = ["id"] - - additional_filters = [ - {"preset_name": "LATEST", "latest_by": "ENTITIES_CREATED_AT"} - ] - - version = self.sg.find_one( - "Version", - filters, - fields=fields, - additional_filter_presets=additional_filters, - ) - self.assertEqual("Version", version["type"]) - self.assertEqual(self.version["id"], version["id"]) - - def test_filter_with_no_name(self): - if self.sg_version < (7, 0, 0): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - filters = [["project", "is", self.project], ["id", "is", self.version["id"]]] - - fields = ["id"] - - additional_filters = [{}] - - self.assertRaises( - shotgun_api3.Fault, - self.sg.find, - "Version", - filters, - fields=fields, - additional_filter_presets=additional_filters, - ) - - def test_invalid_filter(self): - if self.sg_version < (7, 0, 0): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - filters = [["project", "is", self.project], ["id", "is", self.version["id"]]] - - fields = ["id"] - - additional_filters = [{"preset_name": "BAD_FILTER"}] - - self.assertRaises( - shotgun_api3.Fault, - self.sg.find, - "Version", - filters, - fields=fields, - additional_filter_presets=additional_filters, - ) - - def test_filter_not_iterable(self): - if self.sg_version < (7, 0, 0): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - filters = [["project", "is", self.project], ["id", "is", self.version["id"]]] - - fields = ["id"] - - additional_filters = 3 - - self.assertRaises( - shotgun_api3.Fault, - self.sg.find, - "Version", - filters, - fields=fields, - additional_filter_presets=additional_filters, - ) - - def test_filter_not_list_of_iterable(self): - if self.sg_version < (7, 0, 0): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - filters = [["project", "is", self.project], ["id", "is", self.version["id"]]] - - fields = ["id"] - - additional_filters = [3] - - self.assertRaises( - shotgun_api3.Fault, - self.sg.find, - "Version", - filters, - fields=fields, - additional_filter_presets=additional_filters, - ) - - def test_multiple_latest_filters(self): - if self.sg_version < (7, 0, 0): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - filters = [["project", "is", self.project], ["id", "is", self.version["id"]]] - - fields = ["id"] - - additional_filters = ( - {"preset_name": "LATEST", "latest_by": "ENTITY_CREATED_AT"}, - { - "preset_name": "LATEST", - "latest_by": "PIPELINE_STEP_NUMBER_AND_ENTITIES_CREATED_AT", - }, - ) - - self.assertRaises( - shotgun_api3.Fault, - self.sg.find, - "Version", - filters, - fields=fields, - additional_filter_presets=additional_filters, - ) - - def test_modify_visibility(self): - """ - Ensure the visibility of a field can be edited via the API. - """ - # If the version of Shotgun is too old, do not run this test. - # TODO: Update this with the real version number once the feature is released. - if self.sg_version < (8, 5, 0): - warnings.warn( - "Test bypassed because PTR server used does not support this feature.", - FutureWarning, - ) - return - - field_display_name = "Project Visibility Test" - field_name = "sg_{0}".format(field_display_name.lower().replace(" ", "_")) - - schema = self.sg.schema_field_read("Asset") - # Ensure the custom field exists. - if field_name not in schema: - self.sg.schema_field_create("Asset", "text", "Project Visibility Test") - - # Grab any two projects that we can use for toggling the visible property with. - projects = self.sg.find( - "Project", [], order=[{"field_name": "id", "direction": "asc"}] - ) - project_1 = projects[0] - project_2 = projects[1] - - # First, reset the field visibility in a known state, i.e. visible for both projects, - # in case the last test run failed midway through. - self.sg.schema_field_update("Asset", field_name, {"visible": True}, project_1) - self.assertEqual( - {"value": True, "editable": True}, - self.sg.schema_field_read("Asset", field_name, project_1)[field_name][ - "visible" - ], - ) - self.sg.schema_field_update("Asset", field_name, {"visible": True}, project_2) - self.assertEqual( - {"value": True, "editable": True}, - self.sg.schema_field_read("Asset", field_name, project_2)[field_name][ - "visible" - ], - ) - - # Built-in fields should remain not editable. - self.assertFalse( - self.sg.schema_field_read("Asset", "code")["code"]["visible"]["editable"] - ) - - # Custom fields should be editable - self.assertEqual( - {"value": True, "editable": True}, - self.sg.schema_field_read("Asset", field_name)[field_name]["visible"], - ) - - # Hide the field on project 1 - self.sg.schema_field_update("Asset", field_name, {"visible": False}, project_1) - # It should not be visible anymore. - self.assertEqual( - {"value": False, "editable": True}, - self.sg.schema_field_read("Asset", field_name, project_1)[field_name][ - "visible" - ], - ) - - # The field should be visible on the second project. - self.assertEqual( - {"value": True, "editable": True}, - self.sg.schema_field_read("Asset", field_name, project_2)[field_name][ - "visible" - ], - ) - - # Restore the visibility on the field. - self.sg.schema_field_update("Asset", field_name, {"visible": True}, project_1) - self.assertEqual( - {"value": True, "editable": True}, - self.sg.schema_field_read("Asset", field_name, project_1)[field_name][ - "visible" - ], - ) - - -class TestLibImports(base.LiveTestBase): - """ - Ensure that included modules are importable and that the correct version is - present. - """ - - def test_import_httplib(self): - """ - Ensure that httplib2 is importable and objects are available - - This is important, because httplib2 imports switch between - the Python 2 and 3 compatible versions, and the module imports are - proxied to allow this. - """ - from shotgun_api3.lib import httplib2 - - # Ensure that Http object is available. This is a good indication that - # the httplib2 module contents are importable. - self.assertTrue(hasattr(httplib2, "Http")) - self.assertTrue(isinstance(httplib2.Http, object)) - - # Ensure that the version of httplib2 compatible with the current Python - # version was imported. - # (The last module name for __module__ should be either python2 or - # python3, depending on what has been imported. Make sure we got the - # right one.) - httplib2_compat_version = httplib2.Http.__module__.split(".")[-1] - if six.PY2: - self.assertEqual(httplib2_compat_version, "python2") - elif six.PY3: - self.assertTrue(httplib2_compat_version, "python3") - - # Ensure that socks submodule is present and importable using a from - # import -- this is a good indication that external httplib2 imports - # from shotgun_api3 will work as expected. - from shotgun_api3.lib.httplib2 import socks - - self.assertTrue(isinstance(socks, types.ModuleType)) - # Make sure that objects in socks are available as expected - self.assertTrue(hasattr(socks, "HTTPError")) - - -def _has_unicode(data): - for k, v in data.items(): - if isinstance(k, six.text_type): - return True - if isinstance(v, six.text_type): - return True - return False - - -def _get_path(url): - """Returns path component of a url without the sheme, host, query, anchor, or any other - additional elements. - For example, the url "https://foo.shotgunstudio.com/page/2128#Shot_1190_sr10101_034" - returns "/page/2128" - """ - # url_parse returns native objects for older python versions (2.4) - if isinstance(url, dict): - return url.get("path") - elif isinstance(url, tuple): - # 3rd component is the path - return url[2] - else: - return url.path - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/test_api_long.py b/tests/test_api_long.py deleted file mode 100644 index 0bf509b3c..000000000 --- a/tests/test_api_long.py +++ /dev/null @@ -1,198 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -"""Longer tests for calling the Shotgun API functions. - -Includes the schema functions and the automated searching for all entity types -""" - -from __future__ import print_function -from . import base -import random -import shotgun_api3 -from shotgun_api3.lib import six - - -class TestShotgunApiLong(base.LiveTestBase): - def test_automated_find(self): - """Called find for each entity type and read all fields""" - - # Whitelist certain data types for order_field, since no_sorting is not - # currently exposed. These should be good bets to be sortable. - sortable_types = ("number", "date") - - all_entities = list(self.sg.schema_entity_read().keys()) - direction = "asc" - filter_operator = "all" - limit = 1 - page = 1 - for entity_type in all_entities: - if entity_type in ( - "Asset", - "Task", - "Shot", - "Attachment", - "Candidate", - "MimProject", - "MimEntity", - "MimField", - ): - continue - print("Finding entity type %s" % entity_type) - - fields = self.sg.schema_field_read(entity_type) - if not fields: - print("No fields for %s skipping" % entity_type) - continue - - # trying to use some different code paths to the other find test - # pivot_column fields aren't valid for sorting so ensure we're - # not using one. - order_field = None - for field_name, field in six.iteritems(fields): - # Restrict sorting to only types we know will always be sortable - # Since no_sorting is not exposed to us, we'll have to rely on - # this as a safeguard against trying to sort by a field with - # allow_sorting=false. - if field["data_type"]["value"] in sortable_types: - order_field = field_name - break - # TODO for our test project, we haven't populated these entities.... - order = None - if order_field: - order = [{"field_name": order_field, "direction": direction}] - if "project" in fields: - filters = [["project", "is", self.project]] - else: - filters = [] - - records = self.sg.find( - entity_type, - filters, - fields=list(fields.keys()), - order=order, - filter_operator=filter_operator, - limit=limit, - page=page, - ) - - self.assertTrue(isinstance(records, list)) - - if filter_operator == "all": - filter_operator = "any" - else: - filter_operator = "all" - if direction == "desc": - direction = "asc" - else: - direction = "desc" - limit = (limit % 5) + 1 - page = (page % 3) + 1 - - def test_schema(self): - """Called schema functions""" - - schema = self.sg.schema_entity_read() - self.assertTrue(schema, dict) - self.assertTrue(len(schema) > 0) - - schema = self.sg.schema_read() - self.assertTrue(schema, dict) - self.assertTrue(len(schema) > 0) - - schema = self.sg.schema_field_read("Version") - self.assertTrue(schema, dict) - self.assertTrue(len(schema) > 0) - - schema = self.sg.schema_field_read("Version", field_name="user") - self.assertTrue(schema, dict) - self.assertTrue(len(schema) > 0) - self.assertTrue("user" in schema) - - # An explanation is in order here. the field code that is created in shotgun is based on the human display name - # that is provided , so for example "Money Count" would generate the field code 'sg_monkey_count' . The field - # that is created in this test is retired at the end of the test but when this test is run again against - # the same database ( which happens on our Continuous Integration server ) trying to create a new field - # called "Monkey Count" will now fail due to the new Delete Field Forever features we have added to shotgun - # since there will a retired field called sg_monkey_count. The old behavior was to go ahead and create a new - # "Monkey Count" field with a field code with an incremented number of the end like sg_monkey_count_1. The new - # behavior is to raise an error in hopes the user will go into the UI and delete the old retired field forever. - - # make a the name of the field somewhat unique - human_field_name = "Monkey " + str(random.getrandbits(24)) - - properties = {"description": "How many monkeys were needed"} - new_field_name = self.sg.schema_field_create( - "Version", "number", human_field_name, properties=properties - ) - - properties = {"description": "How many monkeys turned up"} - ret_val = self.sg.schema_field_update("Version", new_field_name, properties) - self.assertTrue(ret_val) - - ret_val = self.sg.schema_field_delete("Version", new_field_name) - self.assertTrue(ret_val) - - def test_schema_with_project(self): - """Called schema functions with project""" - - project_entity = {"type": "Project", "id": 0} - - if not self.sg.server_caps.version or self.sg.server_caps.version < (5, 4, 4): - # server does not support this! - self.assertRaises( - shotgun_api3.ShotgunError, self.sg.schema_entity_read, project_entity - ) - self.assertRaises( - shotgun_api3.ShotgunError, self.sg.schema_read, project_entity - ) - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.schema_field_read, - "Version", - None, - project_entity, - ) - self.assertRaises( - shotgun_api3.ShotgunError, - self.sg.schema_field_read, - "Version", - "user", - project_entity, - ) - - else: - schema = self.sg.schema_entity_read(project_entity) - self.assertTrue(schema, dict) - self.assertTrue(len(schema) > 0) - self.assertTrue("Project" in schema) - self.assertTrue("visible" in schema["Project"]) - - schema = self.sg.schema_read(project_entity) - self.assertTrue(schema, dict) - self.assertTrue(len(schema) > 0) - self.assertTrue("Version" in schema) - self.assertFalse("visible" in schema) - - schema = self.sg.schema_field_read("Version", project_entity=project_entity) - self.assertTrue(schema, dict) - self.assertTrue(len(schema) > 0) - self.assertTrue("user" in schema) - self.assertTrue("visible" in schema["user"]) - - schema = self.sg.schema_field_read("Version", "user", project_entity) - self.assertTrue(schema, dict) - self.assertTrue(len(schema) > 0) - self.assertTrue("user" in schema) - self.assertTrue("visible" in schema["user"]) - - -if __name__ == "__main__": - base.unittest.main() diff --git a/tests/test_client.py b/tests/test_client.py deleted file mode 100644 index e29c6158d..000000000 --- a/tests/test_client.py +++ /dev/null @@ -1,772 +0,0 @@ -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -"""Tests against the client software that do not involve calling the -CRUD functions. These tests always use a mock http connection so not not -need a live server to run against.""" - -import datetime -import os -import re - -from shotgun_api3.lib.six.moves import urllib -from shotgun_api3.lib import six, sgutils - -try: - import simplejson as json -except ImportError: - try: - import json as json - except ImportError: - import shotgun_api3.lib.simplejson as json - -import platform -import sys -import time -import unittest -from . import mock - -import shotgun_api3.lib.httplib2 as httplib2 -import shotgun_api3 as api -from shotgun_api3.shotgun import ServerCapabilities, SG_TIMEZONE -from . import base - -if six.PY3: - from base64 import encodebytes as base64encode -else: - from base64 import encodestring as base64encode - - -def b64encode(val): - return base64encode(sgutils.ensure_binary(val)).decode("utf-8") - - -class TestShotgunClient(base.MockTestBase): - """Test case for shotgun api with server interactions mocked.""" - - def setUp(self): - super(TestShotgunClient, self).setUp() - # get domain and uri scheme - match = re.search("(https?://)(.*)", self.server_url) - self.uri_prefix = match.group(1) - self.domain = match.group(2) - # always want the mock on - self._setup_mock() - - def test_detect_client_caps(self): - """Client and server capabilities detected""" - client_caps = self.sg.client_caps - self.sg.connect() - self.assertEqual(1, self.sg._http_request.call_count) - - self.assertTrue(client_caps is not None) - self.assertTrue(client_caps.platform in ("windows", "linux", "mac")) - self.assertTrue(client_caps.local_path_field.startswith("local_path")) - self.assertTrue(str(client_caps).startswith("ClientCapabilities")) - self.assertTrue(client_caps.py_version.startswith(str(sys.version_info[0]))) - self.assertTrue(client_caps.py_version.endswith(str(sys.version_info[1]))) - self.assertTrue(client_caps.ssl_version is not None) - # todo test for version string (eg. "1.2.3ng") or "unknown" - - def test_detect_server_caps(self): - """test_detect_server_caps tests that ServerCapabilities object is made - with appropriate settings for given server version.""" - # has paging is tested else where. - server_info = {"version": [9, 9, 9]} - self._mock_http(server_info) - # ensrue the server caps is re-read - self.sg._server_caps = None - self.assertTrue(self.sg.server_caps is not None) - self.assertFalse(self.sg.server_caps.is_dev) - self.assertEqual((9, 9, 9), self.sg.server_caps.version) - self.assertTrue(self.server_url.endswith(self.sg.server_caps.host)) - self.assertTrue(str(self.sg.server_caps).startswith("ServerCapabilities")) - self.assertEqual(server_info, self.sg.server_info) - - self._mock_http({"version": [9, 9, 9, "Dev"]}) - self.sg._server_caps = None - self.assertTrue(self.sg.server_caps.is_dev) - - def test_server_version_json(self): - """test_server_version_json tests expected versions for json support.""" - sc = ServerCapabilities("foo", {"version": (2, 4, 0)}) - - sc.version = (2, 3, 99) - self.assertRaises(api.ShotgunError, sc._ensure_json_supported) - self.assertRaises( - api.ShotgunError, ServerCapabilities, "foo", {"version": (2, 2, 0)} - ) - - sc.version = (0, 0, 0) - self.assertRaises(api.ShotgunError, sc._ensure_json_supported) - - sc.version = (2, 4, 0) - sc._ensure_json_supported() - - sc.version = (2, 5, 0) - sc._ensure_json_supported() - - def test_extra_auth_params(self): - """test_extra_auth_params tests provided auth_params are included in request""" - # ok for the mock server to just return an error, we want to look at - # what's in the request - self._mock_http({"message": "Go BANG", "exception": True}) - - def auth_args(): - args = self.sg._http_request.call_args[0] - body = args[2] - body = json.loads(body) - return body["params"][0] - - self.sg.config.extra_auth_params = None - self.assertRaises(api.Fault, self.sg.delete, "FakeType", 1) - self.assertTrue("product" not in auth_args()) - - self.sg.config.extra_auth_params = {"product": "rv"} - self.assertRaises(api.Fault, self.sg.delete, "FakeType", 1) - self.assertEqual("rv", auth_args()["product"]) - - def test_session_uuid(self): - """test_session_uuid tests session UUID is included in request""" - # ok for the mock server to just return an error, we want to look at - # whats in the request - self._mock_http({"message": "Go BANG", "exception": True}) - - def auth_args(): - args = self.sg._http_request.call_args[0] - body = args[2] - body = json.loads(body) - return body["params"][0] - - self.sg.set_session_uuid(None) - self.assertRaises(api.Fault, self.sg.delete, "FakeType", 1) - self.assertTrue("session_uuid" not in auth_args()) - - my_uuid = "5a1d49b0-0c69-11e0-a24c-003048d17544" - self.sg.set_session_uuid(my_uuid) - self.assertRaises(api.Fault, self.sg.delete, "FakeType", 1) - self.assertEqual(my_uuid, auth_args()["session_uuid"]) - - def test_url(self): - """Server url is parsed correctly""" - login = self.human_user["login"] - password = self.human_password - - self.assertRaises(ValueError, api.Shotgun, None, None, None, connect=False) - self.assertRaises( - ValueError, api.Shotgun, "file://foo.com", None, None, connect=False - ) - - self.assertEqual("/api3/json", self.sg.config.api_path) - - # support auth details in the url of the form - login_password = "%s:%s" % (login, password) - # login:password@domain - auth_url = "%s%s@%s" % (self.uri_prefix, login_password, self.domain) - sg = api.Shotgun(auth_url, None, None, connect=False) - expected = "Basic " + b64encode(urllib.parse.unquote(login_password)).strip() - self.assertEqual(expected, sg.config.authorization) - - def test_b64encode(self): - """Parse value using the proper encoder.""" - login = "thelogin" - password = "%thepassw0r#$" - login_password = "%s:%s" % (login, password) - expected = "dGhlbG9naW46JXRoZXBhc3N3MHIjJA==" - result = b64encode(urllib.parse.unquote(login_password)).strip() - self.assertEqual(expected, result) - - def test_read_config(self): - """Validate that config values are properly coerced.""" - this_dir = os.path.dirname(os.path.realpath(__file__)) - config_path = os.path.join(this_dir, "test_config_file") - config = base.ConfigParser() - config.read(config_path) - result = config.get("SERVER_INFO", "api_key") - expected = "%abce" - - self.assertEqual(expected, result) - - def test_split_url(self): - """Validate that url parts are properly extracted.""" - - sg = api.Shotgun("https://ci.shotgunstudio.com", "foo", "bar", connect=False) - - base_url = "https://ci.shotgunstudio.com" - expected_server = "ci.shotgunstudio.com" - expected_auth = None - auth, server = sg._split_url(base_url) - self.assertEqual(auth, expected_auth) - self.assertEqual(server, expected_server) - - base_url = "https://ci.shotgunstudio.com:9500" - expected_server = "ci.shotgunstudio.com:9500" - expected_auth = None - auth, server = sg._split_url(base_url) - self.assertEqual(auth, expected_auth) - self.assertEqual(server, expected_server) - - base_url = "https://x:y@ci.shotgunstudio.com:9500" - expected_server = "ci.shotgunstudio.com:9500" - expected_auth = "x:y" - auth, server = sg._split_url(base_url) - self.assertEqual(auth, expected_auth) - self.assertEqual(server, expected_server) - - base_url = "https://12345XYZ@ci.shotgunstudio.com:9500" - expected_server = "ci.shotgunstudio.com:9500" - expected_auth = "12345XYZ" - auth, server = sg._split_url(base_url) - self.assertEqual(auth, expected_auth) - self.assertEqual(server, expected_server) - - def test_authorization(self): - """Authorization passed to server""" - login = self.human_user["login"] - password = self.human_password - login_password = "%s:%s" % (login, password) - # login:password@domain - auth_url = "%s%s@%s" % (self.uri_prefix, login_password, self.domain) - - self.sg = api.Shotgun(auth_url, "foo", "bar", connect=False) - self._setup_mock() - self._mock_http({"version": [2, 4, 0, "Dev"]}) - - self.sg.info() - - args, _ = self.sg._http_request.call_args - verb, path, body, headers = args - - expected = "Basic " + b64encode(urllib.parse.unquote(login_password)).strip() - self.assertEqual(expected, headers.get("Authorization")) - - def test_localization_header_default(self): - """Localization header not passed to server without explicitly setting PTR localization config to True""" - self.sg.info() - - args, _ = self.sg._http_request.call_args - (_, _, _, headers) = args - expected_header_value = "auto" - - self.assertEqual(None, headers.get("locale")) - - def test_localization_header_when_localized(self): - """Localization header passed to server when setting PTR localization config to True""" - self.sg.config.localized = True - - self.sg.info() - - args, _ = self.sg._http_request.call_args - (_, _, _, headers) = args - expected_header_value = "auto" - - self.assertEqual("auto", headers.get("locale")) - - def test_user_agent(self): - """User-Agent passed to server""" - # test default user agent - self.sg.info() - client_caps = self.sg.client_caps - config = self.sg.config - args, _ = self.sg._http_request.call_args - (_, _, _, headers) = args - ssl_validate_lut = {True: "no-validate", False: "validate"} - expected = "shotgun-json (%s); Python %s (%s); ssl %s (%s)" % ( - api.__version__, - client_caps.py_version, - client_caps.platform.capitalize(), - client_caps.ssl_version, - ssl_validate_lut[config.no_ssl_validation], - ) - self.assertEqual(expected, headers.get("user-agent")) - - # test adding to user agent - self.sg.add_user_agent("test-agent") - self.sg.info() - args, _ = self.sg._http_request.call_args - (_, _, _, headers) = args - expected = "shotgun-json (%s); Python %s (%s); ssl %s (%s); test-agent" % ( - api.__version__, - client_caps.py_version, - client_caps.platform.capitalize(), - client_caps.ssl_version, - ssl_validate_lut[config.no_ssl_validation], - ) - self.assertEqual(expected, headers.get("user-agent")) - - # test resetting user agent - self.sg.reset_user_agent() - self.sg.info() - args, _ = self.sg._http_request.call_args - (_, _, _, headers) = args - expected = "shotgun-json (%s); Python %s (%s); ssl %s (%s)" % ( - api.__version__, - client_caps.py_version, - client_caps.platform.capitalize(), - client_caps.ssl_version, - ssl_validate_lut[config.no_ssl_validation], - ) - self.assertEqual(expected, headers.get("user-agent")) - - def test_connect_close(self): - """Connection is closed and opened.""" - # The mock created an existing mock connection, - self.sg.connect() - self.assertEqual(0, self.mock_conn.request.call_count) - self.sg.close() - self.assertEqual(None, self.sg._connection) - - def test_network_retry(self): - """Network failure is retried, with a sleep call between retries.""" - self.sg._http_request.side_effect = httplib2.HttpLib2Error - - with mock.patch("time.sleep") as mock_sleep: - self.assertRaises(httplib2.HttpLib2Error, self.sg.info) - self.assertTrue( - self.sg.config.max_rpc_attempts == self.sg._http_request.call_count, - "Call is repeated", - ) - # Ensure that sleep was called with the retry interval between each attempt - attempt_interval = self.sg.config.rpc_attempt_interval / 1000.0 - calls = [mock.callargs(((attempt_interval,), {}))] - calls *= self.sg.config.max_rpc_attempts - 1 - self.assertTrue( - mock_sleep.call_args_list == calls, - "Call is repeated at correct interval.", - ) - - def test_set_retry_interval(self): - """Setting the retry interval through parameter and environment variable works.""" - original_env_val = os.environ.pop("SHOTGUN_API_RETRY_INTERVAL", None) - - try: - - def run_interval_test(expected_interval, interval_property=None): - self.sg = api.Shotgun( - self.config.server_url, - self.config.script_name, - self.config.api_key, - http_proxy=self.config.http_proxy, - connect=self.connect, - ) - self._setup_mock() - if interval_property: - # if a value was provided for interval_property, set the - # config's property to that value. - self.sg.config.rpc_attempt_interval = interval_property - self.sg._http_request.side_effect = httplib2.HttpLib2Error - self.assertEqual(self.sg.config.rpc_attempt_interval, expected_interval) - self.test_network_retry() - - # Try passing parameter and ensure the correct interval is used. - run_interval_test(expected_interval=2500, interval_property=2500) - - # Try setting ENV VAR and ensure the correct interval is used. - os.environ["SHOTGUN_API_RETRY_INTERVAL"] = "2000" - run_interval_test(expected_interval=2000) - - # Try both parameter and environment variable, to ensure parameter wins. - run_interval_test(expected_interval=4000, interval_property=4000) - - finally: - # Restore environment variable. - if original_env_val is not None: - os.environ["SHOTGUN_API_RETRY_INTERVAL"] = original_env_val - elif "SHOTGUN_API_RETRY_INTERVAL" in os.environ: - os.environ.pop("SHOTGUN_API_RETRY_INTERVAL") - - def test_http_error(self): - """HTTP error raised and not retried.""" - self._mock_http("big old error string", status=(500, "Internal Server Error")) - self.assertRaises(api.ProtocolError, self.sg.info) - self.assertEqual(1, self.sg._http_request.call_count, "Call is not repeated") - - def test_rpc_error(self): - """RPC error transformed into Python error""" - self._mock_http({"message": "Go BANG", "exception": True}) - self.assertRaises(api.Fault, self.sg.info) - - try: - self.sg.info() - except api.Fault as e: - self.assertEqual("Go BANG", str(e)) - - def test_call_rpc(self): - """Named rpc method is called and results handled""" - d = {"no-results": "data without a results key"} - self._mock_http(d) - rv = self.sg._call_rpc("no-results", None) - self._assert_http_method("no-results", None) - expected = "rpc response without results key is returned as-is" - self.assertEqual(d, rv, expected) - - d = {"results": {"singleton": "result"}} - self._mock_http(d) - rv = self.sg._call_rpc("singleton", None) - self._assert_http_method("singleton", None) - expected = "rpc response with singleton result" - self.assertEqual(d["results"], rv, expected) - - d = {"results": ["foo", "bar"]} - a = {"some": "args"} - self._mock_http(d) - rv = self.sg._call_rpc("list", a) - self._assert_http_method("list", a) - expected = "rpc response with list result" - self.assertEqual(d["results"], rv, expected) - - d = {"results": ["foo", "bar"]} - a = {"some": "args"} - self._mock_http(d) - rv = self.sg._call_rpc("list-first", a, first=True) - self._assert_http_method("list-first", a) - expected = "rpc response with list result, first item" - self.assertEqual(d["results"][0], rv, expected) - - # Test unicode mixed with utf-8 as reported in Ticket #17959 - d = {"results": ["foo", "bar"]} - a = { - "utf_str": "\xe2\x88\x9a", - "unicode_str": sgutils.ensure_text("\xe2\x88\x9a"), - } - self._mock_http(d) - rv = self.sg._call_rpc("list", a) - expected = "rpc response with list result" - self.assertEqual(d["results"], rv, expected) - - # Test that we raise on a 5xx. This is ensuring the retries behavior - # in place specific to 5xx responses still eventually ends up raising. - # 502 - d = {"results": ["foo", "bar"]} - a = {"some": "args"} - self._mock_http(d, status=(502, "bad gateway")) - self.assertRaises(api.ProtocolError, self.sg._call_rpc, "list", a) - self.assertEqual( - self.sg.MAX_ATTEMPTS, - self.sg._http_request.call_count, - f"Call is repeated up to {self.sg.MAX_ATTEMPTS} times", - ) - - # 504 - d = {"results": ["foo", "bar"]} - a = {"some": "args"} - self._mock_http(d, status=(504, "gateway timeout")) - self.assertRaises(api.ProtocolError, self.sg._call_rpc, "list", a) - self.assertEqual( - self.sg.MAX_ATTEMPTS, - self.sg._http_request.call_count, - f"Call is repeated up to {self.sg.MAX_ATTEMPTS} times", - ) - - def test_upload_s3_503(self): - """ - Test 503 response is retried when uploading to S3. - """ - this_dir, _ = os.path.split(__file__) - storage_url = "http://foo.com/" - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - # Expected HTTPError exception error message - expected = ( - "The server is currently down or to busy to reply." - "Please try again later." - ) - - # Test the Internal function that is used to upload each - # data part in the context of multi-part uploads to S3, we - # simulate the HTTPError exception raised with 503 status errors - with self.assertRaises(api.ShotgunError, msg=expected): - self.sg._upload_file_to_storage(path, storage_url) - # Test the max retries attempt - self.assertTrue( - self.sg.MAX_ATTEMPTS == self.sg._make_upload_request.call_count, - f"Call is repeated up to {self.sg.MAX_ATTEMPTS} times", - ) - - def test_upload_s3_500(self): - """ - Test 500 response is retried when uploading to S3. - """ - self._setup_mock(s3_status_code_error=500) - this_dir, _ = os.path.split(__file__) - storage_url = "http://foo.com/" - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - # Expected HTTPError exception error message - expected = ( - "The server is currently down or to busy to reply." - "Please try again later." - ) - - # Test the Internal function that is used to upload each - # data part in the context of multi-part uploads to S3, we - # simulate the HTTPError exception raised with 503 status errors - with self.assertRaises(api.ShotgunError, msg=expected): - self.sg._upload_file_to_storage(path, storage_url) - # Test the max retries attempt - self.assertTrue( - self.sg.MAX_ATTEMPTS == self.sg._make_upload_request.call_count, - f"Call is repeated up to {self.sg.MAX_ATTEMPTS} times", - ) - - def test_upload_s3_urlerror__get_attachment_upload_info(self): - """ - Test URLError response is retried when invoking _send_form - """ - mock_opener = mock.Mock() - mock_opener.return_value.open.side_effect = urllib.error.URLError( - "[WinError 10054] An existing connection was forcibly closed by the remote host" - ) - self.sg._build_opener = mock_opener - this_dir, _ = os.path.split(__file__) - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - with self.assertRaises(api.ShotgunError) as cm: - self.sg._get_attachment_upload_info(False, path, False) - - # Test the max retries attempt - self.assertEqual( - self.sg.MAX_ATTEMPTS, - mock_opener.return_value.open.call_count, - f"Call is repeated up to {self.sg.MAX_ATTEMPTS} times", - ) - - # Test the exception message - the_exception = cm.exception - self.assertEqual(str(the_exception), "Max attemps limit reached.") - - def test_upload_s3_urlerror__upload_to_storage(self): - """ - Test URLError response is retried when uploading to S3. - """ - self.sg._make_upload_request = mock.Mock( - spec=api.Shotgun._make_upload_request, - side_effect=urllib.error.URLError( - "[Errno 104] Connection reset by peer", - ), - ) - - this_dir, _ = os.path.split(__file__) - storage_url = "http://foo.com/" - path = os.path.abspath( - os.path.expanduser(os.path.join(this_dir, "sg_logo.jpg")) - ) - - # Test the Internal function that is used to upload each - # data part in the context of multi-part uploads to S3, we - # simulate the HTTPError exception raised with 503 status errors - with self.assertRaises(api.ShotgunError) as cm: - self.sg._upload_file_to_storage(path, storage_url) - - # Test the max retries attempt - self.assertEqual( - self.sg.MAX_ATTEMPTS, - self.sg._make_upload_request.call_count, - f"Call is repeated up to {self.sg.MAX_ATTEMPTS} times", - ) - - # Test the exception message - the_exception = cm.exception - self.assertEqual(str(the_exception), "Max attemps limit reached.") - - def test_transform_data(self): - """Outbound data is transformed""" - timestamp = time.time() - # microseconds will be last during transforms - now = datetime.datetime.fromtimestamp(timestamp).replace( - microsecond=0, tzinfo=SG_TIMEZONE.local - ) - utc_now = datetime.datetime.utcfromtimestamp(timestamp).replace(microsecond=0) - local = {"date": now.strftime("%Y-%m-%d"), "datetime": now, "time": now.time()} - # date will still be the local date, because they are not transformed - utc = { - "date": now.strftime("%Y-%m-%d"), - "datetime": utc_now, - "time": utc_now.time(), - } - - def _datetime(s, f): - return datetime.datetime(*time.strptime(s, f)[:6]) - - def assert_wire(wire, match): - self.assertTrue(isinstance(wire["date"], str)) - d = _datetime(wire["date"], "%Y-%m-%d").date() - d = wire["date"] - self.assertEqual(match["date"], d) - self.assertTrue(isinstance(wire["datetime"], str)) - d = _datetime(wire["datetime"], "%Y-%m-%dT%H:%M:%SZ") - self.assertEqual(match["datetime"], d) - self.assertTrue(isinstance(wire["time"], str)) - d = _datetime(wire["time"], "%Y-%m-%dT%H:%M:%SZ") - self.assertEqual(match["time"], d.time()) - - # leave as local - # AMORTON: tests disabled for now, always have utc over the wire - # self.sg.config.convert_datetimes_to_utc = False - # wire = self.sg._transform_outbound(local) - # print("local {}".format(local)) - # print("wire {}".format(wire)) - # assert_wire(wire, local) - # wire = self.sg._transform_inbound(wire) - # #times will become datetime over the wire - # wire["time"] = wire["time"].time() - # self.assertEqual(local, wire) - - self.sg.config.convert_datetimes_to_utc = True - wire = self.sg._transform_outbound(local) - assert_wire(wire, utc) - wire = self.sg._transform_inbound(wire) - # times will become datetime over the wire - wire["time"] = wire["time"].time() - self.assertEqual(local, wire) - - def test_encode_payload(self): - """Request body is encoded as JSON""" - - d = {"this is ": "my data \u00e0"} - j = self.sg._encode_payload(d) - self.assertTrue(isinstance(j, bytes)) - - d = {"this is ": "my data"} - j = self.sg._encode_payload(d) - self.assertTrue(isinstance(j, bytes)) - - def test_decode_response_ascii(self): - self._assert_decode_resonse( - True, sgutils.ensure_str("my data \u00e0", encoding="utf8") - ) - - def test_decode_response_unicode(self): - self._assert_decode_resonse(False, "my data \u00e0") - - def _assert_decode_resonse(self, ensure_ascii, data): - """HTTP Response is decoded as JSON or text""" - - headers = {"content-type": "application/json;charset=utf-8"} - d = {"this is ": data} - sg = api.Shotgun( - self.config.server_url, - self.config.script_name, - self.config.api_key, - http_proxy=self.config.http_proxy, - ensure_ascii=ensure_ascii, - connect=False, - ) - - if six.PY3: - j = json.dumps(d, ensure_ascii=ensure_ascii) - else: - j = json.dumps(d, ensure_ascii=ensure_ascii, encoding="utf-8") - self.assertEqual(d, sg._decode_response(headers, j)) - - headers["content-type"] = "text/javascript" - self.assertEqual(d, sg._decode_response(headers, j)) - - headers["content-type"] = "text/foo" - self.assertEqual(j, sg._decode_response(headers, j)) - - def test_parse_records(self): - """Parse records to replace thumbnail and local paths""" - - system = platform.system().lower() - if system == "darwin": - local_path_field = "local_path_mac" - elif system in ["windows", "microsoft"]: - local_path_field = "local_path_windows" - elif system == "linux": - local_path_field = "local_path_linux" - orig = { - "type": "FakeAsset", - "id": 1234, - "image": "blah", - "foo": { - "link_type": "local", - local_path_field: "/foo/bar.jpg", - }, - } - url = "http://foo/files/0000/0000/0012/232/shot_thumb.jpg" - self.sg._build_thumb_url = mock.Mock(return_value=url) - - modified, txt = self.sg._parse_records([orig, "plain text"]) - self.assertEqual("plain text", txt, "non dict value is left as is") - - self.sg._build_thumb_url.assert_called_once_with("FakeAsset", 1234) - - self.assertEqual(url, modified["image"], "image path changed to url path") - self.assertEqual("/foo/bar.jpg", modified["foo"]["local_path"]) - self.assertEqual("file:///foo/bar.jpg", modified["foo"]["url"]) - - def test_thumb_url(self): - """Thumbnail endpoint used to get thumbnail url""" - - # the thumbnail service returns a two line - # test response success code on line 1, data on line 2 - resp = "1\n/files/0000/0000/0012/232/shot_thumb.jpg" - self._mock_http(resp, headers={"content-type": "text/plain"}) - self.sg.config.scheme = "http" - self.sg.config.server = "foo.com" - - url = self.sg._build_thumb_url("FakeAsset", 1234) - - self.assertEqual("http://foo.com/files/0000/0000/0012/232/shot_thumb.jpg", url) - self.assertTrue(self.sg._http_request.called, "http request made to get url") - args, _ = self.sg._http_request.call_args - verb, path, body, headers = args - self.assertEqual( - "/upload/get_thumbnail_url?entity_type=FakeAsset&entity_id=1234", - path, - "thumbnail url called with correct args", - ) - - resp = "0\nSome Error" - self._mock_http(resp, headers={"content-type": "text/plain"}) - self.assertRaises(api.ShotgunError, self.sg._build_thumb_url, "FakeAsset", 456) - - resp = "99\nSome Error" - self._mock_http(resp, headers={"content-type": "text/plain"}) - self.assertRaises(RuntimeError, self.sg._build_thumb_url, "FakeAsset", 456) - - -class TestShotgunClientInterface(base.MockTestBase): - """Tests expected interface for shotgun module and client""" - - def test_client_interface(self): - expected_attributes = ["base_url", "config", "client_caps", "server_caps"] - for expected_attribute in expected_attributes: - if not hasattr(self.sg, expected_attribute): - assert False, "%s not found on %s" % (expected_attribute, self.sg) - - def test_module_interface(self): - import shotgun_api3 - - expected_contents = [ - "Shotgun", - "ShotgunError", - "Fault", - "ProtocolError", - "ResponseError", - "Error", - "sg_timezone", - "__version__", - ] - for expected_content in expected_contents: - if not hasattr(shotgun_api3, expected_content): - assert False, "%s not found on module %s" % ( - expected_content, - shotgun_api3, - ) - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/test_config_file b/tests/test_config_file deleted file mode 100644 index d642f96c2..000000000 --- a/tests/test_config_file +++ /dev/null @@ -1,7 +0,0 @@ -[SERVER_INFO] -server_url : https://url -script_name : xyz -api_key : %%abce - -[TEST_DATA] -project_name : hjkl diff --git a/tests/test_mockgun.py b/tests/test_mockgun.py deleted file mode 100644 index e7e4295e4..000000000 --- a/tests/test_mockgun.py +++ /dev/null @@ -1,760 +0,0 @@ -#! /opt/local/bin/python - -# ----------------------------------------------------------------------------- -# Copyright (c) 2009-2017, Shotgun Software Inc -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# - Redistributions of source code must retain the above copyright notice, this -# list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# - Neither the name of the Shotgun Software Inc nor the names of its -# contributors may be used to endorse or promote products derived from this -# software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -# ----------------------------------------------------------------------------- - -""" -Unit tests for Mockgun. Does not require an Internet connection -and can be run on their own by typing "python test_mockgun.py". -""" - -import datetime -import re -import os -import unittest -from shotgun_api3.lib.mockgun import Shotgun as Mockgun -from shotgun_api3 import ShotgunError - - -mockgun_schema_folder = os.path.join(os.path.dirname(__file__), "mockgun") - -Mockgun.set_schema_paths( - os.path.join(mockgun_schema_folder, "schema.pickle"), - os.path.join(mockgun_schema_folder, "schema_entity.pickle"), -) - - -class TestMockgunModuleInterface(unittest.TestCase): - """ - mockgun.py was turned into a module. Ensure we haven't broken the interface. - """ - - def test_interface_intact(self): - """ - Ensure everything that was public before still is. - """ - - from shotgun_api3.lib import mockgun - - # Try to access everything. If something is missing, it will raise an - # error. - mockgun.MockgunError - mockgun.generate_schema - mockgun.Shotgun - - -class TestValidateFilterSyntax(unittest.TestCase): - """ - Tests filter syntax support. - """ - - def setUp(self): - """ - Creates test data. - """ - super(TestValidateFilterSyntax, self).setUp() - - self._mockgun = Mockgun( - "https://test.shotgunstudio.com", login="user", password="1234" - ) - - self._mockgun.create("Shot", {"code": "shot"}) - - def test_filter_array_or_dict(self): - """ - Ensure that arrays and dictionaries are supported for filters. - """ - # This should not throw. - self._mockgun.find( - "Shot", - [ - {"filter_operator": "any", "filters": [["code", "is", "shot"]]}, - ["code", "is", "shot"], - ], - ) - - # We can't have not dict/list values for filters however. - self.assertRaisesRegex( - ShotgunError, - "Filters can only be lists or dictionaries, not int.", - lambda: self._mockgun.find("Shot", [1]), - ) - - -class TestEntityFieldComparison(unittest.TestCase): - """ - Checks if entity fields comparison work. - """ - - def setUp(self): - """ - Creates test data. - """ - self._mockgun = Mockgun( - "https://test.shotgunstudio.com", login="user", password="1234" - ) - - self._project_link = self._mockgun.create( - "Project", {"name": "project", "archived": False} - ) - - # This entity will ensure that a populated link field will be comparable. - self._mockgun.create( - "PipelineConfiguration", - { - "code": "with_project", - "project": self._project_link, - }, - ) - - # This entity will ensure that an unpopulated link field will be comparable. - self._mockgun.create("PipelineConfiguration", {"code": "without_project"}) - - def test_searching_for_none_entity_field(self): - """ - Ensures that comparison with None work. - """ - - items = self._mockgun.find("PipelineConfiguration", [["project", "is", None]]) - self.assertEqual(len(items), 1) - - items = self._mockgun.find( - "PipelineConfiguration", [["project", "is_not", None]] - ) - self.assertEqual(len(items), 1) - - def test_searching_for_initialized_entity_field(self): - """ - Ensures that comparison with an entity works. - """ - items = self._mockgun.find( - "PipelineConfiguration", [["project", "is", self._project_link]] - ) - self.assertEqual(len(items), 1) - - items = self._mockgun.find( - "PipelineConfiguration", [["project", "is_not", self._project_link]] - ) - self.assertEqual(len(items), 1) - - def test_find_entity_with_none_link(self): - """ - Make sure that we can search for sub entity fields on entities that have the field not set. - """ - # The pipeline configuration without_project doesn't have the project field set, so we're expecting - # it to not be returned here. - items = self._mockgun.find( - "PipelineConfiguration", [["project.Project.archived", "is", False]] - ) - self.assertEqual(len(items), 1) - self.assertEqual(items[0]["id"], self._project_link["id"]) - - -class TestTextFieldOperators(unittest.TestCase): - """ - Checks if text field comparison work. - """ - - def setUp(self): - """ - Creates test data. - """ - self._mockgun = Mockgun( - "https://test.shotgunstudio.com", login="user", password="1234" - ) - self._user1 = self._mockgun.create("HumanUser", {"login": "user"}) - self._user2 = self._mockgun.create("HumanUser", {"login": None}) - - def test_operator_is(self): - """ - Ensure is operator work. - """ - actual = self._mockgun.find("HumanUser", [["login", "is", "user"]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_is_none(self): - """ - Ensure is operator work when used with None. - """ - actual = self._mockgun.find("HumanUser", [["login", "is", None]]) - expected = [{"type": "HumanUser", "id": self._user2["id"]}] - self.assertEqual(expected, actual) - - def test_operator_is_case_sensitivity(self): - """ - Ensure is operator is case insensitive. - """ - actual = self._mockgun.find("HumanUser", [["login", "is", "USER"]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_is_not(self): - """ - Ensure the is_not operator works. - """ - actual = self._mockgun.find("HumanUser", [["login", "is_not", "user"]]) - expected = [{"type": "HumanUser", "id": self._user2["id"]}] - self.assertEqual(expected, actual) - - def test_operator_is_not_none(self): - """ - Ensure the is_not operator works when used with None. - """ - actual = self._mockgun.find("HumanUser", [["login", "is_not", None]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_is_not_case_sensitivity(self): - """ - Ensure the is_not operator is case insensitive. - """ - actual = self._mockgun.find("HumanUser", [["login", "is_not", "USER"]]) - expected = [{"type": "HumanUser", "id": self._user2["id"]}] - self.assertEqual(expected, actual) - - def test_operator_in(self): - """ - Ensure the in operator works. - """ - actual = self._mockgun.find("HumanUser", [["login", "in", ["user"]]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_in_none(self): - """ - Ensure the in operator works with a list containing None. - """ - actual = self._mockgun.find("HumanUser", [["login", "in", [None]]]) - expected = [{"type": "HumanUser", "id": self._user2["id"]}] - self.assertEqual(expected, actual) - - def test_operator_in_case_sensitivity(self): - """ - Ensure the in operator is case insensitive. - """ - actual = self._mockgun.find("HumanUser", [["login", "in", ["USER"]]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_not_in(self): - """ - Ensure the not_in operator works. - """ - actual = self._mockgun.find("HumanUser", [["login", "not_in", ["foo"]]]) - expected = [ - {"type": "HumanUser", "id": self._user1["id"]}, - {"type": "HumanUser", "id": self._user2["id"]}, - ] - self.assertEqual(expected, actual) - - def test_operator_not_in_none(self): - """ - Ensure the not_not operator works with a list containing None. - """ - actual = self._mockgun.find("HumanUser", [["login", "not_in", [None]]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_not_in_case_sensitivity(self): - """ - Ensure the not_in operator is case insensitive. - """ - actual = self._mockgun.find("HumanUser", [["login", "not_in", ["USER"]]]) - expected = [{"type": "HumanUser", "id": self._user2["id"]}] - self.assertEqual(expected, actual) - - def test_operator_contains(self): - """ - Ensures the contains operator works. - """ - actual = self._mockgun.find("HumanUser", [["login", "contains", "se"]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_contains_case_sensitivity(self): - """ - Ensure the contains operator is case insensitive. - """ - actual = self._mockgun.find("HumanUser", [["login", "contains", "SE"]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_not_contains(self): - """ - Ensure the not_contains operator works. - """ - actual = self._mockgun.find("HumanUser", [["login", "not_contains", "user"]]) - expected = [{"type": "HumanUser", "id": self._user2["id"]}] - self.assertEqual(expected, actual) - - def test_operator_not_contains_case_sensitivity(self): - """ - Ensure the not_contains operator is case insensitive. - """ - actual = self._mockgun.find("HumanUser", [["login", "not_contains", "USER"]]) - expected = [{"type": "HumanUser", "id": self._user2["id"]}] - self.assertEqual(expected, actual) - - def test_operator_starts_with(self): - """ - Ensure the starts_with operator works. - """ - actual = self._mockgun.find("HumanUser", [["login", "starts_with", "us"]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_starts_with_case_sensitivity(self): - """ - Ensure the starts_with operator is case insensitive. - """ - actual = self._mockgun.find("HumanUser", [["login", "starts_with", "US"]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_ends_with(self): - """ - Ensure the ends_with operator works. - """ - actual = self._mockgun.find("HumanUser", [["login", "ends_with", "er"]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - def test_operator_ends_with_case_sensitivity(self): - """ - Ensure the starts_with operator is case insensitive. - """ - actual = self._mockgun.find("HumanUser", [["login", "ends_with", "ER"]]) - expected = [{"type": "HumanUser", "id": self._user1["id"]}] - self.assertEqual(expected, actual) - - -class TestMultiEntityFieldComparison(unittest.TestCase): - """ - Ensures multi entity field comparison work. - """ - - def setUp(self): - """ - Creates test data. - """ - - self._mockgun = Mockgun( - "https://test.shotgunstudio.com", login="user", password="1234" - ) - - # Create two users to assign to the pipeline configurations. - self._user1 = self._mockgun.create("HumanUser", {"login": "user1"}) - self._user2 = self._mockgun.create("HumanUser", {"login": "user2"}) - - # Create pipeline configurations that are assigned none, one or two users. - self._mockgun.create( - "PipelineConfiguration", {"code": "with_user1", "users": [self._user1]} - ) - - self._mockgun.create( - "PipelineConfiguration", {"code": "with_user2", "users": [self._user2]} - ) - - self._mockgun.create( - "PipelineConfiguration", - {"code": "with_both", "users": [self._user2, self._user1]}, - ) - - self._mockgun.create( - "PipelineConfiguration", {"code": "with_none", "users": []} - ) - - def test_find_by_sub_entity_field(self): - """ - Ensures that queries on linked entity fields works. - """ - items = self._mockgun.find( - "PipelineConfiguration", [["users.HumanUser.login", "is", "user1"]] - ) - self.assertEqual(len(items), 2) - - items = self._mockgun.find( - "PipelineConfiguration", [["users.HumanUser.login", "is", "user2"]] - ) - self.assertEqual(len(items), 2) - - items = self._mockgun.find( - "PipelineConfiguration", [["users.HumanUser.login", "contains", "ser"]] - ) - self.assertEqual(len(items), 3) - - # Lets get fancy a bit. - items = self._mockgun.find( - "PipelineConfiguration", - [ - { - "filter_operator": "any", - "filters": [ - ["users.HumanUser.login", "is", "user1"], - ["users.HumanUser.login", "is", "user2"], - ], - } - ], - ) - self.assertEqual(len(items), 3) - - items = self._mockgun.find( - "PipelineConfiguration", - [ - { - "filter_operator": "all", - "filters": [ - ["users.HumanUser.login", "is", "user1"], - ["users.HumanUser.login", "is", "user2"], - ], - } - ], - ) - self.assertEqual(len(items), 1) - - def test_find_with_none(self): - """ - Ensures comparison with multi-entity fields and None works. - """ - items = self._mockgun.find( - "PipelineConfiguration", [["users", "is", None]], ["users"] - ) - self.assertEqual(len(items), 1) - self.assertEqual(items[0]["users"], []) - - items = self._mockgun.find( - "PipelineConfiguration", [["users", "is_not", None]], ["users"] - ) - self.assertEqual(len(items), 3) - for item in items: - self.assertTrue(len(item["users"]) > 0) - - -class TestMultiEntityFieldUpdate(unittest.TestCase): - """ - Ensures multi entity field update modes work. - """ - - def setUp(self): - """ - Creates test data. - """ - - self._mockgun = Mockgun( - "https://test.shotgunstudio.com", login="user", password="1234" - ) - - # Create two versions to assign to the shot. - self._version1 = self._mockgun.create("Version", {"code": "version1"}) - self._version2 = self._mockgun.create("Version", {"code": "version2"}) - self._version3 = self._mockgun.create("Version", {"code": "version3"}) - - # remove 'code' field for later comparisons - del self._version1["code"] - del self._version2["code"] - del self._version3["code"] - - # Create playlists - self._add_playlist = self._mockgun.create( - "Playlist", - {"code": "playlist1", "versions": [self._version1, self._version2]}, - ) - self._remove_playlist = self._mockgun.create( - "Playlist", - { - "code": "playlist1", - "versions": [self._version1, self._version2, self._version3], - }, - ) - self._set_playlist = self._mockgun.create( - "Playlist", - {"code": "playlist1", "versions": [self._version1, self._version2]}, - ) - - def test_update_add(self): - """ - Ensures that "add" multi_entity_update_mode works. - """ - # Attempts to add _version2 - # It already exists on the playlist and should not be duplicated - self._mockgun.update( - "Playlist", - self._add_playlist["id"], - {"versions": [self._version2, self._version3]}, - multi_entity_update_modes={"versions": "add"}, - ) - - playlist = self._mockgun.find_one( - "Playlist", [["id", "is", self._add_playlist["id"]]], ["versions"] - ) - self.assertEqual( - playlist["versions"], [self._version1, self._version2, self._version3] - ) - - def test_update_remove(self): - """ - Ensures that "remove" multi_entity_update_mode works. - """ - self._mockgun.update( - "Playlist", - self._remove_playlist["id"], - {"versions": [self._version2]}, - multi_entity_update_modes={"versions": "remove"}, - ) - - playlist = self._mockgun.find_one( - "Playlist", [["id", "is", self._remove_playlist["id"]]], ["versions"] - ) - self.assertEqual(playlist["versions"], [self._version1, self._version3]) - - def test_update_set(self): - """ - Ensures that "set" multi_entity_update_mode works. - """ - self._mockgun.update( - "Playlist", - self._set_playlist["id"], - {"versions": [self._version2, self._version3]}, - multi_entity_update_modes={"versions": "set"}, - ) - - playlist = self._mockgun.find_one( - "Playlist", [["id", "is", self._set_playlist["id"]]], ["versions"] - ) - self.assertEqual(playlist["versions"], [self._version2, self._version3]) - - def test_batch_update(self): - self._mockgun.batch( - [ - { - "request_type": "update", - "entity_type": "Playlist", - "entity_id": self._set_playlist["id"], - "data": {"versions": [self._version1, self._version2]}, - "multi_entity_update_modes": {"versions": "set"}, - } - ] - ) - playlist = self._mockgun.find_one( - "Playlist", [["id", "is", self._set_playlist["id"]]], ["versions"] - ) - self.assertEqual(playlist["versions"], [self._version1, self._version2]) - - -class TestFilterOperator(unittest.TestCase): - """ - Unit tests for the filter_operator filter syntax. - """ - - def setUp(self): - """ - Creates tests data. - """ - super(TestFilterOperator, self).setUp() - - self._mockgun = Mockgun( - "https://test.shotgunstudio.com", login="user", password="1234" - ) - - self._prj1_link = self._mockgun.create("Project", {"name": "prj1"}) - - self._prj2_link = self._mockgun.create("Project", {"name": "prj2"}) - - self._shot1 = self._mockgun.create( - "Shot", - { - "code": "shot1", - "project": self._prj1_link, - "description": "a", - "sg_cut_order": 2, - }, - ) - - self._shot2 = self._mockgun.create( - "Shot", {"code": "shot2", "project": self._prj1_link, "sg_cut_order": 1} - ) - - self._shot3 = self._mockgun.create( - "Shot", {"code": "shot3", "project": self._prj2_link, "description": "b"} - ) - - self._user1 = self._mockgun.create( - "HumanUser", {"login": "user1", "password_strength": 0.2} - ) - - self._user2 = self._mockgun.create( - "HumanUser", {"login": "user2", "created_at": datetime.datetime(2025, 1, 1)} - ) - - def test_simple_filter_operators(self): - """ - Tests a simple use of the filter_operator. - """ - shots = self._mockgun.find( - "Shot", - [ - { - "filter_operator": "any", - "filters": [["code", "is", "shot1"], ["code", "is", "shot2"]], - } - ], - ) - - self.assertEqual(len(shots), 2) - - shots = self._mockgun.find( - "Shot", - [ - { - "filter_operator": "all", - "filters": [["code", "is", "shot1"], ["code", "is", "shot2"]], - } - ], - ) - - self.assertEqual(len(shots), 0) - - def test_ordered_filter_operator(self): - """ - Test use of the order feature of filter_operator on supported data types. - """ - find_args = ["Shot", [], ["code"]] - - # str field - shots = self._mockgun.find( - *find_args, order=[{"field_name": "description", "direction": "asc"}] - ) - self.assertEqual([s["code"] for s in shots], ["shot2", "shot1", "shot3"]) - - shots = self._mockgun.find( - *find_args, order=[{"field_name": "description", "direction": "desc"}] - ) - self.assertEqual([s["code"] for s in shots], ["shot3", "shot1", "shot2"]) - - # int field - shots = self._mockgun.find( - *find_args, order=[{"field_name": "sg_cut_order", "direction": "asc"}] - ) - self.assertEqual([s["code"] for s in shots], ["shot3", "shot2", "shot1"]) - - # float field - users = self._mockgun.find( - "HumanUser", - [], - ["login"], - order=[{"field_name": "password_strength", "direction": "asc"}], - ) - self.assertEqual([u["login"] for u in users], ["user2", "user1"]) - - # date_time field - users = self._mockgun.find( - "HumanUser", - [], - ["login"], - order=[{"field_name": "created_at", "direction": "asc"}], - ) - self.assertEqual([u["login"] for u in users], ["user1", "user2"]) - - def test_nested_filter_operators(self): - """ - Tests a the use of the filter_operator nested - inside the filter_operator. - """ - shots = self._mockgun.find( - "Shot", - [ - { - "filter_operator": "any", - "filters": [ - { - "filter_operator": "all", - "filters": [ - ["code", "is", "shot1"], - ["project", "is", self._prj1_link], - ], - }, - { - "filter_operator": "all", - "filters": [ - ["code", "is", "shot3"], - ["project", "is", self._prj2_link], - ], - }, - ], - } - ], - ) - - self.assertEqual(len(shots), 2) - - def test_invalid_operator(self): - - self.assertRaisesRegex( - ShotgunError, - "Unknown filter_operator type: bad", - lambda: self._mockgun.find( - "Shot", [{"filter_operator": "bad", "filters": []}] - ), - ) - - self.assertRaisesRegex( - ShotgunError, - "Bad filter operator, requires keys 'filter_operator' and 'filters',", - lambda: self._mockgun.find("Shot", [{}]), - ) - - -class TestConfig(unittest.TestCase): - """ - Tests the shotgun._Config class - """ - - def test_set_server_params_with_regular_url(self): - """ - Make sure it works with a normal URL. - """ - mockgun = Mockgun("https://server.shotgunstudio.com/") - self.assertEqual(mockgun.config.scheme, "https") - self.assertEqual(mockgun.config.server, "server.shotgunstudio.com") - self.assertEqual(mockgun.config.api_path, "/api3/json") - - def test_set_server_params_with_url_with_path(self): - """ - Make sure it works with a URL with a path - """ - mockgun = Mockgun("https://local/something/") - self.assertEqual(mockgun.config.scheme, "https") - self.assertEqual(mockgun.config.server, "local") - self.assertEqual(mockgun.config.api_path, "/something/api3/json") - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/test_proxy.py b/tests/test_proxy.py deleted file mode 100644 index cb713cd9d..000000000 --- a/tests/test_proxy.py +++ /dev/null @@ -1,38 +0,0 @@ -#! /opt/local/bin/python - -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. -import sys -from . import base -import shotgun_api3 as api - - -class ServerConnectionTest(base.TestBase): - """Tests for server connection""" - - def setUp(self): - super(ServerConnectionTest, self).setUp() - - def test_connection(self): - """Tests server connects and returns nothing""" - result = self.sg.connect() - self.assertEqual(result, None) - - def test_proxy_info(self): - """check proxy value depending http_proxy setting in config""" - self.sg.connect() - if self.config.http_proxy: - sys.stderr.write("[WITH PROXY] ") - self.assertTrue( - isinstance(self.sg._connection.proxy_info, api.lib.httplib2.ProxyInfo) - ) - else: - sys.stderr.write("[NO PROXY] ") - self.assertEqual(self.sg._connection.proxy_info, None) diff --git a/tests/test_unit.py b/tests/test_unit.py deleted file mode 100644 index de996c553..000000000 --- a/tests/test_unit.py +++ /dev/null @@ -1,820 +0,0 @@ -#! /opt/local/bin/python - -# Copyright (c) 2019 Shotgun Software Inc. -# -# CONFIDENTIAL AND PROPRIETARY -# -# This work is provided "AS IS" and subject to the Shotgun Pipeline Toolkit -# Source Code License included in this distribution package. See LICENSE. -# By accessing, using, copying or modifying this work you indicate your -# agreement to the Shotgun Pipeline Toolkit Source Code License. All rights -# not expressly granted therein are reserved by Shotgun Software Inc. - -import os -import unittest -from unittest import mock -from .mock import patch -import shotgun_api3 as api -from shotgun_api3.shotgun import _is_mimetypes_broken -from shotgun_api3.lib.six.moves import range, urllib -from shotgun_api3.lib.httplib2 import Http, ssl_error_classes - - -class TestShotgunInit(unittest.TestCase): - """Test case for Shotgun.__init__""" - - def setUp(self): - self.server_path = "http://server_path" - self.script_name = "script_name" - self.api_key = "api_key" - - # Proxy Server Tests - def test_http_proxy_server(self): - proxy_server = "someserver.com" - http_proxy = proxy_server - sg = api.Shotgun( - self.server_path, - self.script_name, - self.api_key, - http_proxy=http_proxy, - connect=False, - ) - self.assertEqual(sg.config.proxy_server, proxy_server) - self.assertEqual(sg.config.proxy_port, 8080) - proxy_server = "123.456.789.012" - http_proxy = proxy_server - sg = api.Shotgun( - self.server_path, - self.script_name, - self.api_key, - http_proxy=http_proxy, - connect=False, - ) - self.assertEqual(sg.config.proxy_server, proxy_server) - self.assertEqual(sg.config.proxy_port, 8080) - - def test_http_proxy_server_and_port(self): - proxy_server = "someserver.com" - proxy_port = 1234 - http_proxy = "%s:%d" % (proxy_server, proxy_port) - sg = api.Shotgun( - self.server_path, - self.script_name, - self.api_key, - http_proxy=http_proxy, - connect=False, - ) - self.assertEqual(sg.config.proxy_server, proxy_server) - self.assertEqual(sg.config.proxy_port, proxy_port) - proxy_server = "123.456.789.012" - proxy_port = 1234 - http_proxy = "%s:%d" % (proxy_server, proxy_port) - sg = api.Shotgun( - self.server_path, - self.script_name, - self.api_key, - http_proxy=http_proxy, - connect=False, - ) - self.assertEqual(sg.config.proxy_server, proxy_server) - self.assertEqual(sg.config.proxy_port, proxy_port) - - def test_http_proxy_server_and_port_with_authentication(self): - proxy_server = "someserver.com" - proxy_port = 1234 - proxy_user = "user" - proxy_pass = "password" - http_proxy = "%s:%s@%s:%d" % (proxy_user, proxy_pass, proxy_server, proxy_port) - sg = api.Shotgun( - self.server_path, - self.script_name, - self.api_key, - http_proxy=http_proxy, - connect=False, - ) - self.assertEqual(sg.config.proxy_server, proxy_server) - self.assertEqual(sg.config.proxy_port, proxy_port) - self.assertEqual(sg.config.proxy_user, proxy_user) - self.assertEqual(sg.config.proxy_pass, proxy_pass) - proxy_server = "123.456.789.012" - proxy_port = 1234 - proxy_user = "user" - proxy_pass = "password" - http_proxy = "%s:%s@%s:%d" % (proxy_user, proxy_pass, proxy_server, proxy_port) - sg = api.Shotgun( - self.server_path, - self.script_name, - self.api_key, - http_proxy=http_proxy, - connect=False, - ) - self.assertEqual(sg.config.proxy_server, proxy_server) - self.assertEqual(sg.config.proxy_port, proxy_port) - self.assertEqual(sg.config.proxy_user, proxy_user) - self.assertEqual(sg.config.proxy_pass, proxy_pass) - - def test_http_proxy_with_at_in_password(self): - proxy_server = "someserver.com" - proxy_port = 1234 - proxy_user = "user" - proxy_pass = "p@ssword" - http_proxy = "%s:%s@%s:%d" % (proxy_user, proxy_pass, proxy_server, proxy_port) - sg = api.Shotgun( - self.server_path, - self.script_name, - self.api_key, - http_proxy=http_proxy, - connect=False, - ) - self.assertEqual(sg.config.proxy_server, proxy_server) - self.assertEqual(sg.config.proxy_port, proxy_port) - self.assertEqual(sg.config.proxy_user, proxy_user) - self.assertEqual(sg.config.proxy_pass, proxy_pass) - - def test_malformatted_proxy_info(self): - conn_info = { - "base_url": self.server_path, - "script_name": self.script_name, - "api_key": self.api_key, - "connect": False, - } - conn_info["http_proxy"] = "http://someserver.com" - self.assertRaises(ValueError, api.Shotgun, **conn_info) - conn_info["http_proxy"] = "user@someserver.com" - self.assertRaises(ValueError, api.Shotgun, **conn_info) - conn_info["http_proxy"] = "someserver.com:1234:5678" - self.assertRaises(ValueError, api.Shotgun, **conn_info) - - -class TestShotgunSummarize(unittest.TestCase): - """Test case for _create_summary_request function and parameter - validation as it exists in Shotgun.summarize. - - Does not require database connection or test data.""" - - def setUp(self): - self.sg = api.Shotgun( - "http://server_path", "script_name", "api_key", connect=False - ) - - def test_filter_operator_none(self): - expected_logical_operator = "and" - filter_operator = None - self._assert_filter_operator(expected_logical_operator, filter_operator) - - def _assert_filter_operator(self, expected_logical_operator, filter_operator): - result = self.get_call_rpc_params(None, {"filter_operator": filter_operator}) - actual_logical_operator = result["filters"]["logical_operator"] - self.assertEqual(expected_logical_operator, actual_logical_operator) - - def test_filter_operator_all(self): - expected_logical_operator = "and" - filter_operator = "all" - self._assert_filter_operator(expected_logical_operator, filter_operator) - - def test_filter_operator_or(self): - expected_logical_operator = "or" - filter_operator = "or" - self._assert_filter_operator(expected_logical_operator, filter_operator) - - def test_filters(self): - path = "path" - relation = "relation" - value = "value" - expected_condition = {"path": path, "relation": relation, "values": [value]} - args = ["", [[path, relation, value]], None] - result = self.get_call_rpc_params(args, {}) - actual_condition = result["filters"]["conditions"][0] - self.assertEqual(expected_condition, actual_condition) - - @patch("shotgun_api3.Shotgun._call_rpc") - def get_call_rpc_params(self, args, kws, call_rpc): - """Return params sent to _call_rpc from summarize.""" - if not args: - args = [None, [], None] - self.sg.summarize(*args, **kws) - return call_rpc.call_args[0][1] - - def test_grouping(self): - result = self.get_call_rpc_params(None, {}) - self.assertFalse("grouping" in result) - grouping = ["something"] - kws = {"grouping": grouping} - result = self.get_call_rpc_params(None, kws) - self.assertEqual(grouping, result["grouping"]) - - def test_grouping_type(self): - """test_grouping_type tests that grouping parameter is a list or None""" - self.assertRaises( - ValueError, self.sg.summarize, "", [], [], grouping="Not a list" - ) - - -class TestShotgunBatch(unittest.TestCase): - def setUp(self): - self.sg = api.Shotgun( - "http://server_path", "script_name", "api_key", connect=False - ) - - def test_missing_required_key(self): - req = {} - # requires keys request_type and entity_type - self.assertRaises(api.ShotgunError, self.sg.batch, [req]) - req["entity_type"] = "Entity" - self.assertRaises(api.ShotgunError, self.sg.batch, [req]) - req["request_type"] = "not_real_type" - self.assertRaises(api.ShotgunError, self.sg.batch, [req]) - # create requires data key - req["request_type"] = "create" - self.assertRaises(api.ShotgunError, self.sg.batch, [req]) - # update requires entity_id and data - req["request_type"] = "update" - req["data"] = {} - self.assertRaises(api.ShotgunError, self.sg.batch, [req]) - del req["data"] - req["entity_id"] = 2334 - self.assertRaises(api.ShotgunError, self.sg.batch, [req]) - # delete requires entity_id - req["request_type"] = "delete" - del req["entity_id"] - self.assertRaises(api.ShotgunError, self.sg.batch, [req]) - - -class TestServerCapabilities(unittest.TestCase): - def test_no_server_version(self): - self.assertRaises(api.ShotgunError, api.shotgun.ServerCapabilities, "host", {}) - - def test_bad_version(self): - """test_bad_meta tests passing bad meta data type""" - self.assertRaises( - api.ShotgunError, - api.shotgun.ServerCapabilities, - "host", - {"version": (0, 0, 0)}, - ) - - def test_dev_version(self): - serverCapabilities = api.shotgun.ServerCapabilities( - "host", {"version": (3, 4, 0, "Dev")} - ) - self.assertEqual(serverCapabilities.version, (3, 4, 0)) - self.assertTrue(serverCapabilities.is_dev) - - serverCapabilities = api.shotgun.ServerCapabilities( - "host", {"version": (2, 4, 0)} - ) - self.assertEqual(serverCapabilities.version, (2, 4, 0)) - self.assertFalse(serverCapabilities.is_dev) - - -class TestClientCapabilities(unittest.TestCase): - - def test_darwin(self): - self.assert_platform("Darwin", "mac") - - def test_windows(self): - self.assert_platform("win32", "windows") - - def test_linux(self): - self.assert_platform("Linux", "linux") - - def assert_platform(self, sys_ret_val, expected): - platform = api.shotgun.sys.platform - try: - api.shotgun.sys.platform = sys_ret_val - expected_local_path_field = "local_path_%s" % expected - - client_caps = api.shotgun.ClientCapabilities() - self.assertEqual(client_caps.platform, expected) - self.assertEqual(client_caps.local_path_field, expected_local_path_field) - finally: - api.shotgun.sys.platform = platform - - def test_no_platform(self): - platform = api.shotgun.sys.platform - try: - api.shotgun.sys.platform = "unsupported" - client_caps = api.shotgun.ClientCapabilities() - self.assertEqual(client_caps.platform, None) - self.assertEqual(client_caps.local_path_field, None) - finally: - api.shotgun.sys.platform = platform - - @patch("shotgun_api3.shotgun.sys") - def test_py_version(self, mock_sys): - major = 2 - minor = 7 - micro = 3 - mock_sys.version_info = (major, minor, micro, "final", 0) - expected_py_version = "%s.%s" % (major, minor) - client_caps = api.shotgun.ClientCapabilities() - self.assertEqual(client_caps.py_version, expected_py_version) - - -class TestFilters(unittest.TestCase): - maxDiff = None - - def test_empty(self): - expected = {"logical_operator": "and", "conditions": []} - - result = api.shotgun._translate_filters([], None) - self.assertEqual(result, expected) - - def test_simple(self): - filters = [["code", "is", "test"], ["sg_status_list", "is", "ip"]] - - expected = { - "logical_operator": "or", - "conditions": [ - {"path": "code", "relation": "is", "values": ["test"]}, - {"path": "sg_status_list", "relation": "is", "values": ["ip"]}, - ], - } - - result = api.shotgun._translate_filters(filters, "any") - self.assertEqual(result, expected) - - # Test both styles of passing arrays - def test_arrays(self): - expected = { - "logical_operator": "and", - "conditions": [ - { - "path": "code", - "relation": "in", - "values": ["test1", "test2", "test3"], - } - ], - } - - filters = [["code", "in", "test1", "test2", "test3"]] - - result = api.shotgun._translate_filters(filters, "all") - self.assertEqual(result, expected) - - filters = [["code", "in", ["test1", "test2", "test3"]]] - - result = api.shotgun._translate_filters(filters, "all") - self.assertEqual(result, expected) - - def test_nested(self): - filters = [ - ["code", "in", "test"], - { - "filter_operator": "any", - "filters": [ - ["sg_status_list", "is", "ip"], - ["sg_status_list", "is", "fin"], - { - "filter_operator": "all", - "filters": [ - ["sg_status_list", "is", "hld"], - ["assets", "is", {"type": "Asset", "id": 9}], - ], - }, - ], - }, - ] - - expected = { - "logical_operator": "and", - "conditions": [ - {"path": "code", "relation": "in", "values": ["test"]}, - { - "logical_operator": "or", - "conditions": [ - {"path": "sg_status_list", "relation": "is", "values": ["ip"]}, - {"path": "sg_status_list", "relation": "is", "values": ["fin"]}, - { - "logical_operator": "and", - "conditions": [ - { - "path": "sg_status_list", - "relation": "is", - "values": ["hld"], - }, - { - "path": "assets", - "relation": "is", - "values": [{"type": "Asset", "id": 9}], - }, - ], - }, - ], - }, - ], - } - - result = api.shotgun._translate_filters(filters, "all") - self.assertEqual(result, expected) - - def test_invalid(self): - self.assertRaises(api.ShotgunError, api.shotgun._translate_filters, [], "bogus") - self.assertRaises( - api.ShotgunError, api.shotgun._translate_filters, ["bogus"], "all" - ) - - filters = [{"filter_operator": "bogus", "filters": []}] - - self.assertRaises( - api.ShotgunError, api.shotgun._translate_filters, filters, "all" - ) - - filters = [{"filters": []}] - - self.assertRaises( - api.ShotgunError, api.shotgun._translate_filters, filters, "all" - ) - - filters = [{"filter_operator": "all", "filters": {"bogus": "bogus"}}] - - self.assertRaises( - api.ShotgunError, api.shotgun._translate_filters, filters, "all" - ) - - @mock.patch.dict(os.environ, {"SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION": "1"}) - def test_related_object(self): - filters = [ - [ - "project", - "is", - { - "foo": "foo", - "bar": "bar", - "id": 999, - "baz": "baz", - "type": "Anything", - }, - ], - ] - expected = { - "logical_operator": "and", - "conditions": [ - { - "path": "project", - "relation": "is", - "values": [ - { - "foo": "foo", - "bar": "bar", - "baz": "baz", - "id": 999, - "type": "Anything", - } - ], - } - ], - } - api.Shotgun("http://server_path", "script_name", "api_key", connect=False) - result = api.shotgun._translate_filters(filters, "all") - self.assertEqual(result, expected) - - @mock.patch("shotgun_api3.shotgun.SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION", False) - def test_related_object_entity_optimization_is(self): - filters = [ - [ - "project", - "is", - { - "foo": "foo", - "bar": "bar", - "id": 999, - "baz": "baz", - "type": "Anything", - }, - ], - ] - expected = { - "logical_operator": "and", - "conditions": [ - { - "path": "project", - "relation": "is", - "values": [ - { - "id": 999, - "type": "Anything", - } - ], - } - ], - } - api.Shotgun("http://server_path", "script_name", "api_key", connect=False) - result = api.shotgun._translate_filters(filters, "all") - self.assertEqual(result, expected) - - # Now test a non-related object. The expected result should not be optimized. - filters = [ - [ - "something", - "is", - {"foo": "foo", "bar": "bar"}, - ], - ] - expected = { - "logical_operator": "and", - "conditions": [ - { - "path": "something", - "relation": "is", - "values": [{"bar": "bar", "foo": "foo"}], - } - ], - } - api.Shotgun("http://server_path", "script_name", "api_key", connect=False) - result = api.shotgun._translate_filters(filters, "all") - self.assertEqual(result, expected) - - @mock.patch("shotgun_api3.shotgun.SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION", False) - def test_related_object_entity_optimization_in(self): - filters = [ - [ - "project", - "in", - [ - { - "foo1": "foo1", - "bar1": "bar1", - "id": 999, - "baz1": "baz1", - "type": "Anything", - }, - { - "foo2": "foo2", - "bar2": "bar2", - "id": 998, - "baz2": "baz2", - "type": "Anything", - }, - {"foo3": "foo3", "bar3": "bar3"}, - ], - ], - ] - expected = { - "logical_operator": "and", - "conditions": [ - { - "path": "project", - "relation": "in", - "values": [ - { - "id": 999, - "type": "Anything", - }, - { - "id": 998, - "type": "Anything", - }, - { - "foo3": "foo3", - "bar3": "bar3", - }, - ], - } - ], - } - api.Shotgun("http://server_path", "script_name", "api_key", connect=False) - result = api.shotgun._translate_filters(filters, "all") - self.assertEqual(result, expected) - - def test_related_object_update_entity(self): - entity_type = "Anything" - entity_id = 999 - multi_entity_update_modes = {"link": "set", "name": "set"} - data = { - "name": "test", - "link": { - "name": "test", - "url": "http://test.com", - }, - } - expected = { - "id": 999, - "type": "Anything", - "fields": [ - { - "field_name": "name", - "value": "test", - "multi_entity_update_mode": "set", - }, - { - "field_name": "link", - "value": { - "name": "test", - "url": "http://test.com", - }, - "multi_entity_update_mode": "set", - }, - ], - } - sg = api.Shotgun("http://server_path", "script_name", "api_key", connect=False) - result = sg._translate_update_params( - entity_type, entity_id, data, multi_entity_update_modes - ) - self.assertEqual(result, expected) - - @mock.patch("shotgun_api3.shotgun.SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION", False) - def test_related_object_update_optimization_entity(self): - entity_type = "Anything" - entity_id = 999 - multi_entity_update_modes = {"project": "set", "link": "set", "name": "set"} - data = { - "name": "test", - "link": { - "name": "test", - "url": "http://test.com", - }, - "project": { - "foo1": "foo1", - "bar1": "bar1", - "id": 888, - "baz1": "baz1", - "type": "Project", - }, - } - expected = { - "id": 999, - "type": "Anything", - "fields": [ - { - "field_name": "name", - "value": "test", - "multi_entity_update_mode": "set", - }, - { - "field_name": "link", - "value": { - "name": "test", - "url": "http://test.com", - }, - "multi_entity_update_mode": "set", - }, - { - "field_name": "project", - "multi_entity_update_mode": "set", - "value": { - # Entity is optimized with type/id fields. - "id": 888, - "type": "Project", - }, - }, - ], - } - sg = api.Shotgun("http://server_path", "script_name", "api_key", connect=False) - result = sg._translate_update_params( - entity_type, entity_id, data, multi_entity_update_modes - ) - self.assertEqual(result, expected) - - @mock.patch("shotgun_api3.shotgun.SHOTGUN_API_DISABLE_ENTITY_OPTIMIZATION", False) - def test_related_object_update_optimization_entity_multi(self): - entity_type = "Asset" - entity_id = 6626 - data = { - "sg_status_list": "ip", - "project": {"id": 70, "type": "Project", "name": "disposable name 70"}, - "sg_vvv": [ - {"id": 6441, "type": "Asset", "name": "disposable name 6441"}, - {"id": 6440, "type": "Asset"}, - ], - "sg_class": { - "id": 1, - "type": "CustomEntity53", - "name": "disposable name 1", - }, - } - expected = { - "type": "Asset", - "id": 6626, - "fields": [ - {"field_name": "sg_status_list", "value": "ip"}, - {"field_name": "project", "value": {"type": "Project", "id": 70}}, - { - "field_name": "sg_vvv", - "value": [ - {"id": 6441, "type": "Asset"}, - {"id": 6440, "type": "Asset"}, - ], - }, - { - "field_name": "sg_class", - "value": {"type": "CustomEntity53", "id": 1}, - }, - ], - } - sg = api.Shotgun("http://server_path", "script_name", "api_key", connect=False) - result = sg._translate_update_params(entity_type, entity_id, data, None) - self.assertEqual(result, expected) - - -class TestCerts(unittest.TestCase): - # A dummy bad url provided by Amazon - bad_url = "https://untrusted-root.badssl.com/" - # A list of Amazon cert URLS, taken from here: - # https://aws.amazon.com/blogs/security/how-to-prepare-for-aws-move-to-its-own-certificate-authority/ - test_urls = [ - "https://good.sca1a.amazontrust.com", - "https://good.sca2a.amazontrust.com", - "https://good.sca3a.amazontrust.com", - "https://good.sca4a.amazontrust.com", - "https://good.sca0a.amazontrust.com", - ] - - def setUp(self): - self.sg = api.Shotgun( - "http://server_path", "script_name", "api_key", connect=False - ) - - # Get the location of the certs file - self.certs = self.sg._get_certs_file(None) - - def _check_url_with_sg_api_httplib2(self, url, certs): - """ - Given a url and the certs file, it will do a simple - request and return the result. - """ - http = Http(ca_certs=certs) - return http.request(url) - - def _check_url_with_urllib(self, url): - """ - Given a url it will perform a simple request and return a result. - """ - # create a request using the opener generated by the PTR API. - # The `_build_opener` method internally should use the correct certs. - opener = self.sg._build_opener(urllib.request.HTTPHandler) - request = urllib.request.Request(url) - return opener.open(request) - - def test_found_correct_cert(self): - """ - Checks that the cert file the API is finding, - (when a cert path isn't passed and the SHOTGUN_API_CACERTS - isn't set), is the one bundled with this API - """ - # Get the path to the cert file we expect the Shotgun API to find - cert_path = os.path.normpath( - # Get the path relative to where we picked up the API and not relative - # to file on disk. On CI we pip install the API to run the tests - # so we have to pick the location from the installed copy. - # Call dirname to remove from __init__.py - os.path.join(os.path.dirname(api.__file__), "lib", "certifi", "cacert.pem") - ) - # Now ensure that the path the PTR API has found is correct. - self.assertEqual(cert_path, self.certs) - self.assertTrue(os.path.isfile(self.certs)) - - def test_httplib(self): - """ - Checks that we can access the amazon urls using our bundled - certificate with httplib. - """ - # First check that we get an error when trying to connect to a known dummy bad URL - self.assertRaises( - ssl_error_classes, - self._check_url_with_sg_api_httplib2, - self.bad_url, - self.certs, - ) - - # Now check that the good urls connect properly using the certs - for url in self.test_urls: - response, message = self._check_url_with_sg_api_httplib2(url, self.certs) - self.assertEqual(response["status"], "200") - - def test_urlib(self): - """ - Checks that we can access the amazon urls using our bundled - certificate with urllib. - """ - # First check that we get an error when trying to connect to a known dummy bad URL - self.assertRaises( - urllib.error.URLError, self._check_url_with_urllib, self.bad_url - ) - - # Now check that the good urls connect properly using the certs - for url in self.test_urls: - response = self._check_url_with_urllib(url) - assert response is not None - - -class TestMimetypesFix(unittest.TestCase): - """ - Makes sure that the mimetypes fix will be imported. - """ - - @patch("shotgun_api3.shotgun.sys") - def _test_mimetypes_import( - self, platform, major, minor, patch_number, result, mock - ): - """ - Mocks sys.platform and sys.version_info to test the mimetypes import code. - """ - - mock.version_info = [major, minor, patch_number] - mock.platform = platform - self.assertEqual(_is_mimetypes_broken(), result) - - -if __name__ == "__main__": - unittest.main() diff --git a/update_httplib2.py b/update_httplib2.py deleted file mode 100755 index 30422e0c2..000000000 --- a/update_httplib2.py +++ /dev/null @@ -1,121 +0,0 @@ -#!/usr/bin/env python3 - -""" -Updates the httplib2 module. - -Run as "./upgrade_httplib2.py vX.Y.Z" to get a specific release from github. -""" - -import pathlib -import tempfile -import shutil -import subprocess -import sys - - -class Utilities: - def download_archive(self, file_path, file_name): - """Download the archive from github.""" - print(f"Downloading {file_name}") - subprocess.check_output( - [ - "curl", - "-L", - f"https://github.com/httplib2/httplib2/archive/{file_name}", - "-o", - file_path, - ] - ) - - def unzip_archive(self, file_path, file_name, temp_dir): - """Unzip in a temp dir.""" - print(f"Unzipping {file_name}") - subprocess.check_output(["unzip", str(file_path), "-d", str(temp_dir)]) - - def remove_folder(self, path): - """Remove a folder recursively.""" - print(f"Removing the folder {path}") - shutil.rmtree(path, ignore_errors=True) - - def git_remove(self, target): - print(f"Removing {target} in git.") - try: - subprocess.check_output( - [ - "git", - "rm", - "-rf", - ] - + target - ) - except Exception as e: - pass - - def copy_folder(self, source, target): - """Copy a folder recursively.""" - shutil.copytree(source, target) - - def sanitize_file(self, file_path): - """Normalize file imports and remove unnecessary strings.""" - with open(file_path, "r") as f: - contents = f.read() - - contents = contents.replace("from httplib2.", "from .") - contents = contents.replace("from httplib2", "from .") - contents = contents.replace( - "import pyparsing as pp", "from ... import pyparsing as pp" - ) - - with open(file_path, "w") as f: - f.write(contents) - - -def main(temp_path, repo_root, version): - # Paths and file names - httplib2_dir = repo_root / "shotgun_api3" / "lib" / "httplib2" - python2_dir = str(httplib2_dir / "python2") - python3_dir = str(httplib2_dir / "python3") - file_name = f"{version}.zip" - file_path = temp_path / file_name - - utilities = Utilities() - - # Downloads the archive from github - utilities.download_archive(file_path, file_name) - - # Unzip in a temp dir - unzipped_folder = temp_path / "unzipped" - unzipped_folder.mkdir() - utilities.unzip_archive(file_path, file_name, unzipped_folder) - - # Remove current httplib2/python2 and httplib2/python3 folders - utilities.remove_folder(python2_dir) - utilities.remove_folder(python3_dir) - - # Removes the previous version of httplib2 - utilities.git_remove([str(python2_dir), str(python3_dir)]) - - # Copies a new version into place. - print("Copying new version of httplib2") - root_folder = unzipped_folder / f"httplib2-{version[1:]}" - utilities.copy_folder(str(root_folder / "python2" / "httplib2"), python2_dir) - utilities.copy_folder(str(root_folder / "python3" / "httplib2"), python3_dir) - utilities.remove_folder(f"{python2_dir}/test") - utilities.remove_folder(f"{python3_dir}/test") - - # Patches the httplib2 imports so they are relative instead of absolute. - print("Patching imports") - for python_file in httplib2_dir.rglob("*.py"): - utilities.sanitize_file(python_file) - - # Adding files to the git repo. - print("Adding to git") - subprocess.check_output(["git", "add", str(python2_dir), str(python3_dir)]) - - -if __name__ == "__main__": - try: - temp_path = pathlib.Path(tempfile.mkdtemp()) - main(temp_path, pathlib.Path(__file__).parent, sys.argv[1]) - finally: - shutil.rmtree(temp_path)